如何将word文档转换为图片

如何将word文档转换为图片

前段时间换工作,在BOSS直聘上看到一个有意思的功能,上传docx格式的简历,能够以图片的形式在线预览,并且图片还添加了水印,笔者对此比较感兴趣,就摸索着实现方法。网上逛了一圈,对于docx直接转图片这种转换没有什么有效的信息,不过结合获取的信息,笔者倒是想了一个曲线救国的法子,docx->pdf, pdf->image,通过两步可以最终实现该转换。

一、环境准备

首先进行环境准备工作,把需要用到的工具都安装配置好:

1、安装pandoc

Pandoc是由John MacFarlane开发的标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域中的“瑞士军刀”。该工具使用Haskell语言编写,以命令行形式实现与用户的交互,可支持多种操作系统。简而言之,pandoc就是一款转换工具,可以把格式A的文档转换为格式B的文档,就本文的目标来讲,主要用它实现了docx->pdf的转换。

下载地址:http://pandoc.org/installing.html

根据系统类别选择对应的安装包,安装完成后将其安装目录添加到系统路径中,windows版本的安装完成后会自动添加,不用额外设置。

2、安装miktex

MikTex是一款基于Tex的排版引擎。TeX 在不同的硬件和操作系统上有不同的实现版本。这就像C语言,在不同的操作系统中有不同的编译系统,例如Linux 下的gcc,Windows 下的Visual C++ 等。有时,一种操作系统里也会有好几种的TeX系统。目前常见的Unix/Linux 下的TeX系统是Texlive,Windows 下则有MiKTeX和fpTeX。CTeX指的是CTeX中文套装的简称,是把MiKTeX和一些常用的相关工具,如GSview,WinEdt 等包装在一起制作的一个简易安装程序,并对其中的中文支持部分进行了配置,使得安装后马上就可以使用中文。

该排版工具是docx->pdf转换时不可获取的,否则无法实现转换。

下载地址:https://miktex.org/   根据系统类别选择合适的版本,安装完成后将安装目录添加到系统路径。

3、安装poppler

代码实现中引用了一个开源库pdf2image,而这个库又引用了poppler,所以需要安装该环境。Poppler是一个基于xpdf-3.0的用于操作pdf的库,其中poppler-utils是建立在Poppler的库API上的工具集合,用于管理PDF和提取内容,主要工具如下:

  • pdfdetach – 从PDF中提取嵌入式文档;
  • pdffonts – 列出PDF中使用的字体;
  • pdfimages – 从PDF中以原始分辨率提取所有嵌入式图像;
  • pdfinfo – 列出PDF的所有信息;
  • pdfseparate – 从PDF中提取单个页面;
  • pdftocairo – 使用cairo将单页从PDF转换为矢量或位图格式;
  • pdftohtml – 将PDF转换为HTML格式的保留格式;
  • pdftoppm – 将PDF页面转换为位图;
  • pdftops – 将PDF转换为可打印的PS格式;
  • pdftotext – 从PDF中提取所有文本;
  • pdfunite – 合并几个PDF。

pdf2image使用了pdftoppm和pdfinfo这两个工具,用来将pdf转换为图片和获取pdf的文档页数,代码稍后会列出。

下载地址:https://github.com/Belval/pdf2image  根据系统类别选择对应的版本,安装完成后将安装目录下的bin目录添加到系统路径。

4、字体下载

用来生成水印时使用,笔者下载的是SimSun宋体,下载地址:https://www.fontke.com/font/10132367/download/,也可以下载其他字体,看个人选择。

完成上边四步环境就配置好了,笔者的电脑是Windows10,当然以上工具同样支持linux和mac环境,每个工具的官档都标注了支持的系统版本。环境配置好后接下来就是coding环节了,通过程序来实现转换过程的自动化调用,笔者会列出代码的目录结构,并依次说明其用途。

二、代码实现

关于实现这部分,笔者使用的开发语言是python36,以下为目录结构:

1、font目录

该目录存放的是下载好的字体文件,供代码中引用。

2、pdf目录

该目录存放转换之后的pdf文件。

3、target目录

该目录存放最终转换后的图片,图片为以时间戳命名的png图片,格式可以指定。

4、config.py

配置文件,存放了目录、图片大小、水印等配置,代码如下:

5、doc2pdf.py

该模块封装了pandoc命令行工具的调用,实现了docx文档到pdf的转换过程

6、pdf2image.py

一个开源的python库,只包含了一个文件,笔者直接复制过来使用的。主要封装了poppler的命令行调用,实现pdf到图片的转换。

7、main.py

入口主程序,传入doc文档,得到png图片^_^

三、待完善的地方

笔者从网上下载了份docx格式的简历模板,通过上边的程序转换后得到的图片如下:

从图中可以看到个人信息部分的样式跑偏了,这部分是在docx->pdf过程中的排版引擎决定的,所以想要获得完美的图片,先要好好研究下排版引擎的使用,排版引擎可以加载多种扩展包,用来支持不同的排版格式。笔者只是兴趣使然,在短时间内实现了docx到图片的转换,没有深入研究排版引擎部分。关于这种转换笔者能力有限,只能以这种繁琐的方式实现,不过笔者倒是很好奇BOSS直聘是如何实现的,如果有机会真心希望交流一下。

说点什么

avatar
  订阅  
提醒