惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

沈唁志

使用 Trusted Publishing 提升 npm 包发布安全性 2025|在代码之外,我学会了旅行、牵手和拥抱 使用 GitHub Actions 自动同步 Docker 镜像到 CNB 怎么申请开具中国税收居民身份证明? HMAC 签名编码的坑:Go 和 PHP 的不同处理方式 Bitwarden Secrets Manager:简化 DevOps 的机密管理 MySQL 字符集与大小写敏感性解析 在命令行中输出带颜色的日志 PHP 中生成带毫秒的时间戳
Linux 服务器实现 Word 转图片方案
沈唁 · 2026-03-12 · via 沈唁志

在很多业务系统中,经常需要对 Word 文档进行在线预览或生成图片。

常见场景包括:

  • 电子函件或通知预览
  • 审批系统附件展示
  • OCR 识别前的文档预处理
  • IM / 消息系统模板截图
  • 文档归档与审计

Word 文档 (.docx) 本身不适合直接渲染为图片,因此通常采用如下转换链路:

DOCX → PDF → PNG

原因:

  • DOCX → PDF:排版最稳定
  • PDF → PNG:渲染简单,兼容性好

本文记录一次完整的服务器环境搭建过程,使用:

  • CentOS/PHP
  • phpword:负责处理 Word 模板中的变量替换
  • LibreOffice:负责 Word 转 PDF
  • ImageMagick:负责 PDF 转 PNG

完整转换流程如下:

PHP (phpword)
  ↓
DOCX
  ↓
LibreOffice (soffice)
  ↓
PDF
  ↓
ImageMagick (convert)
  ↓
PNG

LibreOffice

首先在服务器安装 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

如果看到输出,说明字体安装成功。

ImageMagick

转为 PDF 以后,就可以使用 ImageMagick 将 PDF 渲染为图片。

安装:

yum install -y ImageMagick ImageMagick-devel

检查版本:

convert -version

基本转换命令:

convert -density 300 letter.pdf letter.png

参数说明:

参数 说明
-density 300 设置 PDF 渲染 DPI
letter.pdf 输入文件
letter.png 输出文件

默认情况下,每页 PDF 都会生成一张图片,多页 PDF 时就会生成letter-0.pngletter-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 服务器上实现稳定的文档转换流程。