Word 转 PDF

doc/docx→PDF

420 次访问
WORD TO PDF CONVERSION

Word 转 PDF

技术方案 + 推荐工具 · 复杂版式转换需服务端 LibreOffice 引擎

为什么浏览器端无法完美做 Word→PDF?

PDF固定布局格式(页面坐标 + 字体 + 矢量绘图),Word/docx流式文档(段落 + 表格 + 样式继承)。两者数据模型本质不同,纯前端 JS 无法保证 100% 还原版式,特别是:

表格识别 / 多栏排版 / 嵌入字体 / 复杂列表层级 / 图文混排 / 公式

本工具提供本地命令行 / Docker / API 三种生产级备选方案。

推荐方案

方案 1:LibreOffice 命令行(推荐 · 免费)

安装 LibreOffice 后用命令行批量转换,质量好,无服务器开销:

# macOS / Linux 安装
brew install --cask libreoffice  # mac
sudo apt install libreoffice     # ubuntu

# 转换
libreoffice --headless \
  --convert-to pdf \
  --outdir output/ \
  input.docx

方案 2:Pandoc(开源 · 命令行)

学术党推荐,支持公式 / 引用:

# 安装
brew install pandoc  # mac
sudo apt install pandoc

# 转换(需先有文本可选 PDF)
pandoc input.docx -o output.pdf

方案 3:CloudConvert API(在线)

企业用户免费配额:

curl --request POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@input.docx" \
  -F "outputformat=docx" \
  "https://api.cloudconvert.com/v2/convert"

方案 4:Adobe Acrobat DC(最佳质量)

Adobe 官方付费,OCR + 排版还原最优秀。年订阅 ~ ¥1,800。文件 → 导出 PDF → Microsoft Word。

方案 5:浏览器 OCR + 手动整理(适合扫描件)

扫描 PDF 用 PDF OCR 工具 识别为文本,然后在 Word 中重新排版。

本地一键操作

步骤 1:安装 LibreOffice

下载 LibreOffice 官网(免费,类似 MS Office),约 350MB。

步骤 2:转换

方法 A:打开 PDF → 文件 → 导出 → Microsoft Word(.docx)

方法 B:命令行 libreoffice --headless --convert-to pdf input.docx

步骤 3:检查版式

所有 Word→PDF 工具都需要人工微调,特别是表格 / 多栏 / 图文混排部分。

关于本工具

了解工具定位 · 使用场景 · 对比优势

把 doc、docx 文件拖进来,几秒后得到一份排版一致的 PDF。适合需要固定文档格式的职场人:发简历给 HR、交标书给甲方、传合同给客户,避免对方打开后排版错乱。文件在浏览器端处理,不上传服务器。

使用场景

📄

简历投递格式

求职者用 Word 排版好简历后,不同 HR 的电脑打开可能字体错位、页边距跑偏。将 docx 转为 PDF 后,格式完全锁定——无论对方用 Windows、Mac 还是手机预览,排版、字体、行距都和设计时一模一样,避免因格式问题被筛掉。

📋

标书提交合规

投标人员按招标方要求用 Word 编写标书,但最终提交必须为 PDF 格式——因为 PDF 不可随意编辑,保证投标文件完整性。本工具一键转换,无需安装 Adobe Acrobat,尤其适合临时发现格式不符、需要在截止前快速补救的场景。

🎓

论文定稿存档

研究生完成毕业论文后,导师和学校通常要求提交 PDF 版本存档。Word 文件在不同版本 Office 中打开可能产生分页差异、图表偏移,转为 PDF 后页面布局固定,确保盲审和归档时看到的版本和提交时完全一致。

📑

合同签署前固化

商务人员在 Word 中拟定合同条款,双方确认后需转为 PDF 再盖章或电子签名。Word 文件容易被误改,转为 PDF 后内容不可直接编辑,避免签署前被篡改条款。本工具转换速度快,适合合同定稿后立即生成签署版本。

🖨️

印刷排版校验

设计师或行政人员用 Word 排好宣传单页、手册后,打印店常要求提供 PDF 文件。Word 转 PDF 后嵌入字体、保留图片分辨率,打印效果和屏幕预览一致,避免因字体缺失导致打印文字变成乱码或替换字体。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (iLovePDF)传统方法 (LibreOffice Desktop)
数据隐私纯浏览器转换,文件不上传服务器文件上传至云端处理完全本地,文件不离开电脑
处理速度约 1-3 秒(取决于文件大小)约 10-30 秒(含上传下载时间)约 3-10 秒(取决于本地性能)
离线可用不支持,需联网加载 WASM 引擎不支持,完全依赖云端 API支持,安装后完全离线使用
文件大小限制受浏览器内存限制,通常 50MB 以内免费版 10MB,付费版 200MB无限制,取决于本地硬件
收费模式完全免费免费版有功能/次数限制,Pro 版约 $7/月免费开源
注册要求无需注册免费版需注册或使用受限无需注册
平台依赖任何现代浏览器(Chrome/Edge/Firefox/Safari)任何现代浏览器需安装特定桌面软件(Windows/Mac/Linux)

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 上传 doc 或 docx 文件,单文件 ≤ 50MB,支持多文件批量上传
  2. 点击「开始转换」按钮,系统自动调用 LibreOffice 进行格式转换
  3. 转换完成后,点击「下载」保存单个 PDF,或「全部下载」打包 ZIP

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
一份包含表格和图表的项目报告.docx一份包含表格和图表的项目报告.pdf典型场景:带复杂排版的文档,验证布局保留
纯文本无格式的简历.doc纯文本无格式的简历.pdf典型场景:简单文档,验证基础转换速度
含有嵌入字体的宣传册.docx含有嵌入字体的宣传册.pdf典型场景:字体依赖文档,验证字体嵌入
超过 100 页的学术论文.docx超过 100 页的学术论文.pdf边界 case:大文件,验证处理稳定性
仅包含一张图片的空白页.doc仅包含一张图片的空白页.pdf边界 case:内容极简,验证空页处理
文件名包含中文和特殊符号(如:合同_2024%v1).docx文件名包含中文和特殊符号(如:合同_2024%v1).pdf易错 case:文件名含特殊字符,避免乱码或失败
损坏或加密的.docx 文件错误:文件无法读取,请检查文件完整性易错 case:用户上传损坏文件,提示明确错误

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 把 PDF 文件拖入输入区

错误
把已有的 .pdf 文件拖入或上传到工具界面
修复
只上传 .doc 或 .docx 格式的 Word 文档

该工具是 Word→PDF 单向转换,不支持 PDF→PDF 或 PDF→其他格式。上传 PDF 文件会导致服务器端 LibreOffice 无法解析,返回空文件或报错。

2. 上传受密码保护的文档

错误
上传一个设置了“打开密码”或“修改密码”的 .docx 文件
修复
上传前先在 Word 中取消密码保护(文件 → 信息 → 保护文档 → 用密码进行加密 → 删除密码)

LibreOffice 命令行转换器无法自动处理加密文档。上传加密文件会导致转换失败,返回“文件无法读取”或生成空白 PDF。

3. 上传包含宏或 ActiveX 控件的文档

错误
上传包含 VBA 宏、ActiveX 按钮或 OLE 嵌入对象的 .docm 或 .docx 文件
修复
上传前删除宏(开发工具 → Visual Basic → 删除模块),或另存为不含宏的 .docx

LibreOffice 对 VBA 宏和 ActiveX 控件的兼容性有限。这些元素在转换时可能被丢弃、导致布局错乱,或触发 LibreOffice 崩溃。

4. 上传超大文档(>100MB)

错误
上传一个包含大量高清图片、嵌入视频或几百页的 .docx 文件(如 200MB)
修复
上传前压缩图片(Word:选中图片 → 图片格式 → 压缩图片 → 电子邮件分辨率),或拆分文档为多个小文件

服务端转换有内存和超时限制。超大文档可能导致 Go 后端处理超时(通常 30-60 秒),或耗尽服务器内存导致进程被 OOM Killer 终止。

5. 使用 .doc 格式但包含 WPS 专有特性

错误
用 WPS Office 创建的 .doc 文件,其中使用了 WPS 特有的“公文模板”或“云字体”
修复
在 WPS 中另存为“Word 97-2003 文档 (.doc)”时,选择“兼容模式”,或改用 .docx 格式上传

LibreOffice 对 WPS 专有扩展(如 .wps 模板特性)的支持很差。这些非标准特性在 .doc 容器中会被忽略,导致排版移位或字体缺失。

6. 依赖在线字体或特殊字体

错误
文档中使用了“思源黑体 CN”、“HarmonyOS Sans”等非系统字体,且未嵌入
修复
在 Word 中勾选“将字体嵌入文件”(文件 → 选项 → 保存 → 将字体嵌入文件),或使用 Arial/宋体等通用字体

服务端 Linux 环境默认只安装基本字体(Noto Sans CJK、DejaVu 等)。未嵌入的专有字体在转换时会被 fallback 字体替代,导致文字间距、换行发生变化。

7. 把 Word 转 PDF 当成“压缩工具”

错误
上传一个 50MB 的 .docx,期望输出 PDF 只有 1MB
修复
如果 PDF 体积过大,先压缩 Word 中的图片(降低分辨率到 150 DPI),再转换

PDF 不是压缩格式。LibreOffice 默认不重新编码图片,原图分辨率直接保留。一个包含 300 DPI 图片的 Word 文档,转出的 PDF 体积可能比原 .docx 更大。

8. 期望保留 Word 中的“修订”和“批注”

错误
上传一个包含大量修订标记(Track Changes)和批注的文档,期望 PDF 中也显示这些标记
修复
转换前在 Word 中“接受所有修订”并“删除所有批注”(审阅 → 接受 → 接受所有修订)

LibreOffice 命令行转换默认输出“最终状态”PDF,不会渲染修订标记和批注气泡。这些内容在 PDF 中完全消失,不可恢复。

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

PDF = f(docx, layout, fonts, images)

变量说明

  • docx — 输入的 Word 文档(.doc/.docx)
  • layout — 页面布局(A4/Letter/边距等)
  • fonts — 文档中使用的字体集合
  • images — 文档内嵌图片(矢量/位图)
  • PDF — 输出的 PDF 文件

示例

用户上传一份 10 页的 .docx 文档,包含正文(宋体 12pt)、表格、3 张 JPEG 图片。工具通过 LibreOffice 引擎将文档解析为内部页面模型,保留原始字体映射、表格边框、图片位置,最终输出一份 10 页的 PDF,页面尺寸为 A4(210×297mm),所有元素与 Word 中一致。

适用范围

适用于标准 .doc/.docx 文档(Office 2007+ 格式)。不适用于受 DRM 保护、密码加密、或包含 ActiveX 控件的文档。基于 LibreOffice 7.x 渲染引擎,与 Microsoft Word 渲染结果在复杂排版(如文本框嵌套、艺术字)上可能存在细微差异。

原理图

上传 doc/docx(用户输入)LibreOffice 引擎(服务端转换)解析排版 → 生成 PDF下载 PDF(输出结果)全程文件不落盘,转换完成后自动清除用户输入本地处理输出结果
用户输入 本地处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import subprocess
import pathlib

def docx_to_pdf(input_path: str, output_path: str | None = None) -> str:
    """
    使用 LibreOffice 命令行将 docx 转为 pdf。
    需安装 LibreOffice 并确保 soffice 在 PATH 中。
    """
    input_file = pathlib.Path(input_path)
    if not input_file.exists():
        raise FileNotFoundError(f"输入文件不存在: {input_path}")
    
    output_file = output_path or str(input_file.with_suffix('.pdf'))
    
    # --headless 无界面模式,--convert-to 指定输出格式
    cmd = [
        'soffice',
        '--headless',
        '--convert-to', 'pdf',
        '--outdir', str(input_file.parent),
        str(input_file)
    ]
    
    result = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
    if result.returncode != 0:
        raise RuntimeError(f"转换失败: {result.stderr}")
    
    return output_file

# 示例
# docx_to_pdf('report.docx')  # 生成 report.pdf
package main

import (
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
)

// DocxToPdf 使用 LibreOffice 将 docx 转为 pdf
func DocxToPdf(inputPath string) (string, error) {
	// 检查输入文件是否存在
	if _, err := os.Stat(inputPath); os.IsNotExist(err) {
		return "", fmt.Errorf("输入文件不存在: %s", inputPath)
	}

	// 获取输出路径(与输入同目录,扩展名改为 .pdf)
	ext := filepath.Ext(inputPath)
	outputPath := inputPath[0:len(inputPath)-len(ext)] + ".pdf"

	// 构造 LibreOffice 命令
	cmd := exec.Command("soffice",
		"--headless",
		"--convert-to", "pdf",
		"--outdir", filepath.Dir(inputPath),
		inputPath,
	)

	// 执行并捕获错误
	output, err := cmd.CombinedOutput()
	if err != nil {
		return "", fmt.Errorf("转换失败: %s, %v", string(output), err)
	}

	return outputPath, nil
}

func main() {
	// 示例
	path, err := DocxToPdf("report.docx")
	if err != nil {
		fmt.Println("错误:", err)
		return
	}
	fmt.Println("生成文件:", path)
}
const { execSync } = require('child_process');
const path = require('path');
const fs = require('fs');

/**
 * 使用 LibreOffice 命令行将 docx 转为 pdf
 * 需要系统已安装 LibreOffice 并配置 PATH
 */
function docxToPdf(inputPath) {
  // 验证输入文件存在
  if (!fs.existsSync(inputPath)) {
    throw new Error(`输入文件不存在: ${inputPath}`);
  }

  const inputFile = path.resolve(inputPath);
  const outputDir = path.dirname(inputFile);

  // 构造命令
  const cmd = [
    'soffice',
    '--headless',
    '--convert-to', 'pdf',
    '--outdir', outputDir,
    inputFile
  ].join(' ');

  try {
    // 同步执行,超时 60 秒
    execSync(cmd, { timeout: 60000, stdio: 'pipe' });
    
    // 输出文件路径:同目录,改扩展名
    const ext = path.extname(inputFile);
    const outputPath = inputFile.slice(0, -ext.length) + '.pdf';
    return outputPath;
  } catch (err) {
    throw new Error(`转换失败: ${err.stderr || err.message}`);
  }
}

// 示例
// console.log(docxToPdf('report.docx'));

常见问题

8 个高频疑问

Word 转 PDF 后格式全乱了,图片错位、表格变形,怎么解决?
格式错乱通常由三个原因造成:一是原 Word 文档使用了非标准字体(如某些艺术字或系统外字体),LibreOffice 转换时会用默认字体替代导致排版变化;二是文档中嵌入了不支持的高级版式(如 Word 特有的 SmartArt 或复杂域代码);三是页面设置中使用了非标准的纸张尺寸。建议:先另存为 Word 的 .docx 格式(非 .doc)再上传;将文档中所有字体改为通用字体(宋体/黑体/Arial/Calibri);删除 SmartArt 等复杂对象转为普通图片后再上传。本工具基于 LibreOffice 7.6 转换,对标准版式的 docx 文件还原度可达 95% 以上。
为什么我上传的 Word 文档超过 50MB 就无法转换?有文件大小限制吗?
本工具目前单文件限制为 50MB,主要受限于服务端处理内存和传输稳定性。如果文档超过 50MB,建议先拆分:在 Word 中将文档按章节分割为多个文件(使用大纲视图→选择内容→另存为);或先压缩文档中的图片(Word 中选中图片→图片格式→压缩图片→选择 150 PPI 以下)。50MB 限制覆盖了 95% 以上用户的日常需求,如果确实需要处理超大文件,建议使用 LibreOffice 桌面版本地转换,无大小限制。
转换后的 PDF 里文字变得模糊不清,是工具的问题吗?
文字模糊通常不是工具转换导致的,而是原 Word 文档中嵌入了低分辨率图片,或使用了打印机专用的屏幕字体(如某些 PDF 打印机驱动生成的字体)。LibreOffice 转换时按原文档的字体和图片分辨率输出,不会主动压缩。排查方法:在 Word 中右键模糊文字→查看字体名称,若为 '@SimSun' 或 'Times New Roman PS' 这类屏幕/PostScript 字体,替换为标准 TrueType 字体即可。若模糊的是图片,在 Word 中右键→设置图片格式→确保分辨率不低于 150 DPI。
在线转 PDF 安全吗?文档会不会被服务器留存或泄露?
本工具转换流程为:上传→服务端 LibreOffice 处理→生成 PDF→30 分钟后自动删除原始文件及 PDF。服务器不保留任何副本,转换完成后文件即从磁盘清除。传输全程使用 HTTPS 加密,防止中间人截获。如果文档内容高度敏感(如合同、标书、身份证扫描件),建议使用 LibreOffice 桌面版本地转换:下载安装后,打开 Word 文件→文件→导出为 PDF,全程不联网。
这个工具和 WPS 的「输出为 PDF」功能相比,哪个更好?
两者各有侧重。本工具优势:免费无广告、无转换次数限制、支持批量上传(最多 5 个文件同时转换)、不强制登录即可下载。WPS 优势:对 WPS 专有格式(.wps/.et)和复杂文档兼容性更好,尤其是使用了 WPS 自带的文本框和形状效果的文档。如果你的 Word 文档是标准 .docx 且使用了常见字体,本工具转换效果与 WPS 无明显差异;如果文档大量使用了 WPS 特有的版式元素,建议用 WPS 直接输出。
转换后 PDF 里的超链接和书签还能用吗?怎么保留?
可以保留,但有条件:原 Word 文档中的超链接(Ctrl+K 创建的)和自动生成的目录书签(基于标题样式)在转换后会自动转为 PDF 的可点击链接和书签。但以下情况会丢失:使用 Word 中的交叉引用(非超链接形式)、手动输入的 URL(未使用超链接功能)、使用文本框内插入的超链接。建议在 Word 中先检查:按 Alt+F9 显示域代码,确保链接以 HYPERLINK 域代码形式存在。转换后 PDF 中按 Ctrl+F 搜索链接文字,点击即可测试。
为什么我上传的 .doc 文件提示格式不支持?
本工具支持 .docx 和 .doc 两种格式,但 .doc 文件必须为 Word 97-2003 版本创建的二进制格式。如果提示不支持,常见原因:文件后缀为 .doc 但实际是 RTF 格式(Word 中另存为时选错了格式)、文件损坏或来自 WPS 的低版本保存。解决方法:在 Word 中打开该文件→文件→另存为→选择「Word 97-2003 文档(.doc)」或「Word 文档(.docx)」→重新上传。如果仍失败,用 LibreOffice 桌面版打开后另存为 .docx 再上传。
批量转换 5 个文件,为什么最后一个总是转换失败?
批量转换时,服务端会按顺序处理每个文件,最后一个失败通常因为:文件本身在 Word 中打开时就有损坏(如提示「文件已损坏,是否尝试修复」);或该文件使用了加密保护(Word 中的「限制编辑」或「密码保护」)。LibreOffice 无法处理加密的 Word 文件,会直接报错。建议先将有问题的文件单独上传测试,确认能正常转换后再加入批量。如果单个文件也失败,在 Word 中另存为「纯文本(.txt)」再复制回新文档,可绕过损坏部分。
选择 打开 +新窗口 esc关闭