广告位联系
返回顶部

使用PHP将Word文件转换为PDF文件的三种方式

php 来源:互联网 作者:佚名 发布时间:2026-10-02 10:53:00 人浏览
摘要

环境准备: 服务器:CentOS 7.8 PHP:7.2 一、 使用 PHPWord + Dompdf(纯 PHP,无需系统软件,推荐轻量场景) 或使用mpdf或者tcpdf都可以,原理就是获取word文件的内容,并转换为html,并将html转换成p

环境准备:

服务器:CentOS 7.8

PHP:7.2

一、 使用 PHPWord + Dompdf(纯 PHP,无需系统软件,推荐轻量场景)

或使用mpdf或者tcpdf都可以,原理就是获取word文件的内容,并转换为html,并将html转换成pdf。适合简单 Word 文档(.docx),无复杂格式、图片、表格。对于复杂word文件,不推荐此种方式。

1. 安装依赖

1

2

composer require phpoffice/phpword

composer require dompdf/dompdf

2. 转换代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpWord\IOFactory;

use Dompdf\Dompdf;

// 输入 Word 路径

$wordPath = 'test.docx';

// 输出 PDF 路径

$pdfPath = 'output.pdf';

try {

    // 1. 读取 Word

    $phpWord = IOFactory::load($wordPath);

    // 2. 先渲染为 HTML

    $htmlWriter = IOFactory::createWriter($phpWord, 'HTML');

    $html = $htmlWriter->getContent();

    // 3. 使用 Dompdf 转 PDF

    $dompdf = new Dompdf();

    $dompdf->loadHtml($html);

    $dompdf->setPaper('A4', 'portrait');

    $dompdf->render();

    // 4. 保存 PDF

    file_put_contents($pdfPath, $dompdf->output());

    echo "转换成功!PDF 已保存到:$pdfPath";

} catch (Exception $e) {

    echo "转换失败:" . $e->getMessage();

}

二、调用 LibreOffice 命令(最稳定,支持复杂 Word,生产环境首选)

适合复杂 Word(带图片、表格、样式、公式、.doc/.docx),格式还原度最高。Windows/Linux 服务器都能用。

1. 安装 LibreOffice:

1.1 使用EPEL库安装

1

sudo yum install epel-release

安装 LibreOffice

1

sudo yum install libreoffice

1.2 使用 RPM Fusion 仓库

导入 RPM Fusion 的 GPG 密钥并安装仓库配置:

1

sudo rpm --import https://rpmfusion.org/keys?action=AttachFile&do=get&target=RPM-GPG-KEY-rpmfusion-free-centos-8

1

sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %centos).noarch.rpm

安装LibreOffice

1

sudo yum install libreoffice-core

1.3 使用官方 LibreOffice 仓库

下载并安装 LibreOffice 的 YUM 仓库配置文件:

1

sudo rpm -Uvh https://download.documentfoundation.org/libreoffice/stable/6.4.7/rpm/x86_64/libreoffice6.4.7-lp180103.x86_64.rpm

安装LibreOffice

1

sudo yum install libreoffice-core

1.4 使用 Snap 包管理器(如果你)

使用的是 CentOS 8 或更高版本,CentOS 版本支持 Snap

启用 EPEL 和 PowerTools 仓库

1

2

3

sudo yum install epel-release

sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

sudo yum install centos-release-powertools

安装 Snapd‌:

1

2

sudo yum install snapd

sudo systemctl enable --now snapd.socket

安装LibreOffice

1

sudo snap install libreoffice --classic

2. 转换代码

确保 PHP 能执行 exec/shell_exec 函数???????

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<?php

// Word 路径

$wordFile = __DIR__ . '/test.docx';

// 输出目录

$outputDir = __DIR__;

// Windows 下 LibreOffice 安装路径(改成你自己的)

$libreOffice = 'C:\Program Files\LibreOffice\program\soffice.exe';

// Linux 路径

// $libreOffice = '/usr/bin/libreoffice';

// 转换命令

$command = sprintf(

    '"%s" --headless --convert-to pdf --outdir "%s" "%s"',

    $libreOffice,

    $outputDir,

    $wordFile

);

// 执行转换

exec($command, $output, $status);

if ($status === 0) {

    echo "转换成功!PDF 保存在:$outputDir";

} else {

    echo "转换失败";

    print_r($output);

}

格式还原度 99%,支持 .doc/.docx/wps 文档

三、使用 SphinxSearch 扩展(UNIX 系统专用,性能强)

适合Linux 服务器,大量文档批量转换。需要安装 unoconv + LibreOffice。

1. 安装unoconv

在 CentOS 上安装unoconv和它的依赖项,通常需要使用一些额外的软件包,因为 CentOS 默认的仓库中不包含 unoconv,可以通过以下步骤安装:

1.1 安装 EPEL 仓库

参考 方法二 安装 LibreOffice

1.2 安装unoconv

一旦安装了 EPEL 仓库和 LibreOffice,你就可以通过 pip 安装 unoconv 了。首先,确保你的系统已经安装了 Python 和 pip。你可以通过以下命令安装 pip(如果尚未安装):

1

sudo yum install python3-pip

然后使用pip安装unoconv:

1

pip3 install unoconv

1.3 确认安装

1

unoconv --version

如果这个命令返回了版本信息,那么 unoconv 就已经成功安装了。

2. 转换代码

安装成功后,就可以开始转换文件了,转换命令:

1

unoconv -f pdf -o 转换后的pdf文件地址 word文件地址

1

2

3

4

5

6

7

<?php

$word = 'test.docx';

$pdf = 'output.pdf';

exec("unoconv -f pdf $pdf $word");

if (file_exists($pdf)) {

    echo "转换成功";

}

3. 中文乱码解决

CentOS系统默认是不安装中文字体的,如果系统中没有中文字体,word转换成pdf文件后,中文会显示为乱码,需要安装中文字体来解决。

‌3.1 下载中文字体‌

从互联网上下载你需要的中文字体文件(通常是 .ttf 或 .otf 文件)。

这里已经为大家准备好了一些字体,里面有我自己用的,也有网上分享的:https://pan.quark.cn/s/051c9ef67a4f

大家也可以自己到网上搜索一些免费字体使用。

3‌.2 将字体文件复制到字体目录‌

将下载的字体文件复制到系统的字体目录中,通常是 /usr/share/fonts/ 或 /usr/share/fonts/chinese/。如下图所示:

3?.2 将字体文件复制到字体目录?

‌3.3 更新字体缓存‌

更新字体缓存,使系统能够识别新安装的字体:

1

sudo fc-cache -fv

字体库安装之后,再次转换,中文就会显示正常。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • PHP中图像处理的利器GD库的操作流程
    在 PHP 开发中,GD 库是处理图像的核心利器:生成验证码、制作缩略图、添加水印、绘制简单图表 这些高频需求都能通过 GD 库轻松实现。
  • 使用PHP将Word文件转换为PDF文件的三种方式

    使用PHP将Word文件转换为PDF文件的三种方式
    环境准备: 服务器:CentOS 7.8 PHP:7.2 一、 使用 PHPWord + Dompdf(纯 PHP,无需系统软件,推荐轻量场景) 或使用mpdf或者tcpdf都可以,原理就是
  • phpenv搭建PHP多版本管理工具
    phpenv是一个简单易用的PHP版本管理工具,帮助开发者轻松管理多个PHP版本并实现快速切换。如果你需要在同一台机器上测试不同版本的PHP应
  • phpenv安装和配置指南
    1. 项目基础介绍和主要编程语言 项目介绍 phpenv 是一个用于简化管理多个 PHP 版本的开源项目。它允许开发者在同一台机器上安装和管理多个
  • PHP二维数组按某字段排序怎么写
    用usort()配合匿名函数是最直接的写法 PHP 没有内置的「按字段名排序二维数组」函数,usort()是最常用也最可控的方式。它允许你自定义比较
  • 如何正确处理 PHP 后端脚本的错误响应(以 Tele
    本文详解如何在 ajax 表单提交中准确捕获并响应php后端(如 telegram bot api 调用)的真实错误状态,避免 `fopen()` 静默失败问题,通过 curl +
  • PHP调用Workerman5.0实现一对一聊天
    要实现一对一聊天功能,使用 Workerman 5.0 作为后端,前端可以使用 WebSocket 进行通信。以下是实现步骤和代码示例。 1. 安装 Workerman 首先,确
  • PHP跨文件传递参数的8种常见方法
    以下是 PHP 中跨文件传递参数的8 种常见方法,按场景和安全性分类整理,附详细说明和示例代码: 一、超全局变量(适合请求间数据共享)
  • PHP+HTML实现流式输出效果的示例

    PHP+HTML实现流式输出效果的示例
    效果演示 后端代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 ?php // 关闭输出缓冲 ini_set(output_bu
  • 在PHP中使用__dir__的详细介绍
    __DIR__ 可以用来获取当前代码工作目录。它从PHP 5.3版本开始引入。它类似于使用 dirname(__FILE__)。通常用于包含其他文件,这些文件存在于一
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计