在很多业务系统中,经常需要对 Word 文档进行在线预览或生成图片。常见场景包括:
Word 文档 (.docx) 本身不适合直接渲染为图片,因此通常采用如下转换链路:
DOCX → PDF → PNG原因:
本文记录一次完整的服务器环境搭建过程,使用:
完整转换流程如下:
PHP (phpword)
↓
DOCX
↓
LibreOffice (soffice)
↓
PDF
↓
ImageMagick (convert)
↓
PNG首先在服务器安装 LibreOffice:
sudo yum install libreoffice安装完成后可以使用 soffice进行文档转换。
测试是否安装成功:
soffice --version接下来就可以开始 DOCX 转 PDF 了,使用命令:
# 单文件转换
soffice --headless \
--convert-to pdf \
/tmp/upload_data/letter.docx \
--outdir /tmp/upload_data执行后会在/tmp/upload_data目录下生成letter.pdf
如果目录中有大量 Word 文件,也可以批量转换:
soffice --headless \
--convert-to pdf \
/tmp/upload_data/1/*.docx \
--outdir /tmp/upload_data/1执行后会在/tmp/upload_data/1/目录下生成和 docx 文件同名的 pdf 文件。
但是这个时候查看生成好的 PDF 文件,会发现字体和 Word 有区别,在 Linux 服务器上转换 Word 时,经常会遇到:
原因是服务器没有 Windows 上对应的字体。解决方法就是从 Windows 复制字体,放到服务器上。
字体目录:
C:\Windows\Fonts常用中文字体:
字体 | 文件 |
|---|---|
宋体 | simsun.ttc |
黑体 | simhei.ttf |
微软雅黑 | msyh.ttc |
仿宋 | simfang.ttf |
楷体 | simkai.ttf |
将这些字体打包为fonts.zip后上传服务器,上传到服务器后执行:
unzip fonts.zip -d /usr/share/fonts/chinese刷新字体缓存:
fc-cache -fv查看字体:
fc-list | grep simsun如果看到输出,说明字体安装成功。
转为 PDF 以后,就可以使用 ImageMagick 将 PDF 渲染为图片。
安装:
yum install -y ImageMagick ImageMagick-devel检查版本:
convert -version基本转换命令:
convert -density 300 letter.pdf letter.png参数说明:
参数 | 说明 |
|---|---|
| 设置 PDF 渲染 DPI |
| 输入文件 |
| 输出文件 |
默认情况下,每页 PDF 都会生成一张图片,多页 PDF 时就会生成letter-0.png、letter-1.png...
如果需要拼接多页为一张图片,生成一张长图:
convert -density 300 letter.pdf -append letter.png-append表示纵向拼接,+append表示横向拼接。
同时可以加上-background white -alpha remove,防止透明背景。
完整示例命令:
soffice --headless --convert-to pdf letter.docx
convert -density 300 letter.pdf -background white -alpha remove -append letter.png通过 LibreOffice 与 ImageMagick,可以在 Linux 服务器上实现稳定的文档转换流程。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。