使用 shell 将 office 文件转换成 jpg 文件

今天在写脚本的时候碰到一个难题,如何将 office 文件(包括 doc、docx、xls、xlsx、ppt、pptx等)批量转换成 jpg 格式的文件?

本来想用“我的ABC软件工具箱”这款程序来实现的,但是该软件批量超过5个就要收费,我需要整理的,可是需要超过 9000 个目录的……无奈.jpg

后续想到 Linux 下有个 convert 命令,是用来进行格式转换的,很久之前研究图片格式转换的时候使用过,还有点映像,遂想着看能否使用脚本进行批量格式转换。

通过一番研究后发现,还真的可以实现使用脚本将 office 文件转换成 jpg 文件,只不过中间需要经过一道手续,那就是先转成 pdf。下面说说具体转换方法。

1. 将 office 转换成 pdf

这层转换需要用到 unoconv,这个软件是依赖 LibreOffice 来进行转换的,只要 LibreOffice 支持的格式,都可以进行转换。

unoconv is a command line utility that can convert any file format that LibreOffice can import, to any file format that LibreOffice is capable of exporting.

使用如下命令安装:

sudo apt install unoconv -y;

安装完成后,就可以使用 unoconv 命令将 office 文件转换成 pdf 文件了:

unoconv -f pdf office_file_name.doc

# 转换完成后会在源文件目录生成 office_file_name.pdf 文件
# -f 是指定格式

2. 将 pdf 转换成 jpg

将 office 文件转换成 pdf 文件后,接下来就是将 pdf 转换成 jpg 了,此时需要用到 imagemagick 这个软件,imagemagick 是个集成对图片进行各种编辑、合并、转换、对比等功能的软件,本次我们主要用到的,还是 convert 转换的功能:

convert - convert between image formats as well as resize an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample, and much more.

使用如下命令安装 imagemagick

sudo apt install imagemagick -y;

安装完成后还不能直接用,需要进行一些初始化配置,否则执行会报错。(都是填坑的经验啊,大哭.gif)

编辑 /etc/ImageMagick-6/policy.xml 文件,修改如下内容:

...
  <!-- 为了避免 pdf 转换后的图片尺寸超出限制,需要修改图片尺寸限制 -->
  <policy domain="resource" name="width" value="160KP"/>
  <policy domain="resource" name="height" value="160KP"/>
...
  <!-- 由于 pdf 默认是受保护的,没有权限读取和编辑,所以需要更改针对 pdf 的权限 -->
  <policy domain="coder" rights="none" pattern="EPS" />
  <policy domain="coder" rights="read|write" pattern="PDF" />
  <policy domain="coder" rights="none" pattern="XPS" />
...

修改完初始化配置后,就可以快乐的玩耍了,可使用如下命令进行转换:

convert -density 300 -append office_file_name.pdf office_file_name.jpg

# -desity 300 表示转换图片的分辨率,单位是dpi(默认为75dpi,很粗糙)
# -append 表示将多页合并成长图(默认每页生成一张图)

打完收工,新技能 get✓ !微笑.jpg

微信扫一扫,分享到朋友圈

使用 shell 将 office 文件转换成 jpg 文件