IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP word转pdf -> 正文阅读

[PHP知识库]PHP word转pdf

方法一、使用phpword和tcpdf

1. 使用composer 安装 phpword和tcpdf

	composer require phpoffice/phpword
	composer require tecnickcom/tcpdf

2. 示例代码 (试例框架是laravel,以下文件默认是放置在public中)

//			你的初始文件地址
			$word = 'test.docx';
           \PhpOffice\PhpWord\Settings::setPdfRendererPath(base_path('vendor/tecnickcom/tcpdf'));
           //设置转换pdf的类库名(DomPDF、MPDF、TCPDF)需要下载对应的类库
           \PhpOffice\PhpWord\Settings::setPdfRendererName('TCPDF');
 //				加载word文件
           $wordPdf = \PhpOffice\PhpWord\IOFactory::load($word);
//			读取生成的docx文件 并且指明要生成的文件格式
           $pdfWriter = \PhpOffice\PhpWord\IOFactory::createWriter($wordPdf , 'PDF');
//			设置文字字体,文字大小
           $pdfWriter->SetFont('wryh','',20,'',false);
//			生成pdf文件 的保存地址
           $temp_path = 'test.pdf'
//			文件保存        
           $pdfWriter->save($temp_path);
            return $temp_path;

3. 中文乱码 - 设置字体

乱码一般是因为字体问题
  1. 从网上下载一个ttf文件,本文提供一个微软雅黑的字体供各位看官临时使用 字体下载链接
  2. 找到 /vendor/tecnickcom/tcpdf/tools 的位置,将字体文件放在这个文件夹下,在此处打开窗口执行命令
    php ./tcpdf_addfont.php -b -t wryh -i wryh.ttf
    之后就可以在 /vendor/tecnickcom/tcpdf/fonts/ 文件夹下找到三个同名的 wryh.ctg.z,wryh.php,wryh.z文件
  3. 然后你在执行代码时,设置
    $pdfWriter->SetFont(‘wryh’,’’,20,’’,false);
    指明使用该字体即可。

方法二、使用unoconv将 word转pdf (Centos 8)

1. 安装libreoffice

  1. 安装libreoffice
先为安装 libreoffice 创建一个文件夹,用以保存下载的压缩包 
	mkdir libreoffice
	cd libreoffice/
		# 下载 libreoffice 安装包
	wget https://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.3.1/rpm/x86_64/LibreOffice_7.3.1_Linux_x86-64_rpm.tar.gz
	wget https://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.3.1/rpm/x86_64/LibreOffice_7.3.1_Linux_x86-64_rpm_sdk.tar.gz
	wget https://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.3.1/rpm/x86_64/LibreOffice_7.3.1_Linux_x86-64_rpm_langpack_zh-CN.tar.gz
	# 解压安装包
	tar -zxvf LibreOffice_7.3.1_Linux_x86-64_rpm.tar.gz
	tar -zxvf LibreOffice_7.3.1_Linux_x86-64_rpm_sdk.tar.gz
	tar -zxvf LibreOffice_7.3.1_Linux_x86-64_rpm_langpack_zh-CN.tar.gz
	# 安装命令
	yum localinstall LibreOffice_7.3.1.3_Linux_x86-64_rpm/RPMS/*.rpm
	yum localinstall LibreOffice_7.3.1.3_Linux_x86-64_rpm_sdk/RPMS/*.rpm
	yum localinstall LibreOffice_7.3.1.3_Linux_x86-64_rpm_langpack_zh-CN/RPMS/*.rpm
  1. 为 libreoffice 配置全局变量
	注:要找到你安装的环境中的 libreoffice下的program的位置
	vi /etc/profile
	# 配置文件中插入
	export PATH=$PATH:/opt/libreoffice7.3/program (填写自己环境的位置)
	# 使环境变量生效
	source /etc/profile
  1. 检查是否安装成功 :
	 soffice --version
 能显示出来 libreoffice 的版本,则安装成功

2.安装 unoconv

  1. centos 8 中 使用 yum 安装 unoconv 无效,所有我么使用wegt 下载压缩包,解压之后安装
	wget https://github.com/unoconv/unoconv/archive/master.zip
	unzip master.zip
	cd unoconv-master/
	make install
  1. 使用命令执行,使得word文件转换格式为pdf
	解释: unoconv -f (你的格式) -o 新文件存储的位置 要转换的文件的位置;
		unoconv -f pdf -o /root/1.pdf /root/1.docx
	查看新文件是否存在,确认是否转换成功

3.安装字体 (若转换的文件出现)

  1. 创建字体目录,将自己的字体文件上传至该文件夹下
	mkdir -p /usr/share/fonts/win
  1. 执行以下命令,使字体生效
	mkfontscale
	mkfontdir
	sudo fc-cache -fv

4. 使用代码将文件转换

  /** 文件格式转换
     * @param $old_file 旧文件  当前项目绝对地址
     * @param $new_file 新文件  当前项目中的绝对地址
     * @param $file_format 指定转换的格式
     */
    protected static function  File_conversion($old_file,$new_file,$file_format='pdf')
    {
        $old_path = public_path($old_file);
        $new_path = public_path($new_file);
        shell_exec(" unoconv -f ".$file_format." -o ".$new_path." ".$old_path);
    }

总结

方法一:

  • 优点:操作较为简单,只需安装一些php的扩展就可以使用,
  • 弊端:但是该方法只适合一些word中内容比较简单的进行转义为pdf,因为数据格式负责之后,会容易发生文字错位的问题。

方法二:

  • 优点:支持word中任何格式的数据进行转换,且不容易出现错位

  • 弊端:需要在服务器中安装软件(本文已centos 8为例,讲解。)可以根据自己的需求,选择用那种方式。

  • 注意 :设置字体时,最好与转换前文件中的字体一致

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:20:14  更:2022-04-18 17:20:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 19:53:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码