栖霞酒店网站设计价格,广州网站建设在线,网站改版seo建议,企信网企业信息查询平台官网pdf 转 word
一、思路
直接调用LibreOffice 命令进行文档转换的命令行工具 使用的前系统中必须已经安装了
libreofficelibreoffice已翻译的用户界面语言包: 中文 (简体)libreoffice离线帮助文档: 中文 (简体)上传字体
重点#xff1a;重点#xff1a;重点#xff1a;
亲…pdf 转 word
一、思路
直接调用LibreOffice 命令进行文档转换的命令行工具 使用的前系统中必须已经安装了
libreofficelibreoffice已翻译的用户界面语言包: 中文 (简体)libreoffice离线帮助文档: 中文 (简体)上传字体
重点重点重点
亲测 7.1.8版本pdf 转word后正常 7.4.6版本转出来的样式有问题都挤在一页重叠在一起。
二、软件安装下载
1. windows安装
下载 LibreOffice | LibreOffice 简体中文官方网站 - 自由免费的办公套件 a.安装 直接一键默认安装 环境变量在path前加入libreoffice安装路径如D:\Program Files\LibreOffice\program
进入dos窗口输入soffice 如果弹出libreoffice界面则表示安装成功
b. 中文包 另外再下载安装下以中文包此处略过
libreoffice已翻译的用户界面语言包: 中文 (简体)libreoffice离线帮助文档: 中文 (简体)
soffice --infilterwriter_pdf_import --convert-to doc 11种绕过CDN查找真实IP 方法.pdf 21
2 certos7版本安装 CentOS系统环境
[rootlocalhost ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)7.1.8包下载地址Index of /libreoffice/old/7.1.8.1/rpm/x86_64
## 下载下面三个包
wget https://downloadarchive.documentfoundation.org/libreoffice/old/7.1.8.1/rpm/x86_64/LibreOffice_7.1.8.1_Linux_x86-64_rpm.tar.gz
wget https://downloadarchive.documentfoundation.org/libreoffice/old/7.1.8.1/rpm/x86_64/LibreOffice_7.1.8.1_Linux_x86-64_rpm_helppack_zh-CN.tar.gz
wget https://downloadarchive.documentfoundation.org/libreoffice/old/7.1.8.1/rpm/x86_64/LibreOffice_7.1.8.1_Linux_x86-64_rpm_langpack_zh-CN.tar.gz解压并安装
## 主包
tar -xvf LibreOffice_7.1.8.1_Linux_x86-64_rpm.tar.gz
yum install ./LibreOffice_7.1.8.1_Linux_x86-64_rpm/RPMS/*.rpm -y## 已翻译的用户界面语言包: 中文 (简体)
tar -xvf LibreOffice_7.1.8.1_Linux_x86-64_rpm_langpack_zh-CN.tar.gz
yum install ./LibreOffice_7.1.8.1_Linux_x86-64_rpm_langpack_zh-CN/RPMS/*.rpm -y## 离线帮助文档: 中文 (简体)
tar -xvf LibreOffice_7.1.8.1_Linux_x86-64_rpm_helppack_zh-CN.tar.gz
yum install ./LibreOffice_7.1.8.1_Linux_x86-64_rpm_helppack_zh-CN/RPMS/*.rpm -y3. Debian 版本安装
root4f14d865967a:/# cat /etc/issue
Debian GNU/Linux 11 \n \lDebian 系统从下面地址下载安装包Index of /libreoffice/old/7.1.8.1/deb/x86_64 7.1.8包下载地址
wget https://downloadarchive.documentfoundation.org/libreoffice/old/7.1.8.1/deb/x86_64/LibreOffice_7.1.8.1_Linux_x86-64_deb.tar.gz
wget https://downloadarchive.documentfoundation.org/libreoffice/old/7.1.8.1/deb/x86_64/LibreOffice_7.1.8.1_Linux_x86-64_deb_helppack_zh-CN.tar.gz
wget https://downloadarchive.documentfoundation.org/libreoffice/old/7.1.8.1/deb/x86_64/LibreOffice_7.1.8.1_Linux_x86-64_deb_langpack_zh-CN.tar.gz解压并安装
## 主包
tar -xvf LibreOffice_7.1.8.1_Linux_x86-64_deb.tar.gz
dpkg -i LibreOffice_7.1.8.1_Linux_x86-64_deb/DEBS/*.deb## 离线帮助文档: 中文 (简体)
tar -xvf LibreOffice_7.1.8.1_Linux_x86-64_deb_helppack_zh-CN.tar.gz
dpkg -i LibreOffice_7.1.8.1_Linux_x86-64_deb_helppack_zh-CN/DEBS/*.deb## 已翻译的用户界面语言包: 中文 (简体)
tar -xvf LibreOffice_7.1.8.1_Linux_x86-64_deb_langpack_zh-CN.tar.gz
dpkg -i LibreOffice_7.1.8.1_Linux_x86-64_deb_langpack_zh-CN/DEBS/*.deb使用帮助 测试是否安装成功libreoffice7.1 -help 根据使用的版本自己调整命令版本号查看版本
[rootlocalhost testPdf2word]# libreoffice7.1 -version
Warning: -version is deprecated. Use --version instead.
LibreOffice 7.1.8.1 e1f30c802c3269a1d052614453f260e49458c82c4. 安装字体
安装字体是为了防止中文乱码问题处理
1查看fonts目录cat /etc/fonts/fonts.conf | grep fon 得知字体存放位置/usr/share/fonts
[rootlocalhost Fonts]# cat /etc/fonts/fonts.conf | grep fon
!DOCTYPE fontconfig SYSTEM fonts.dtd
!-- /etc/fonts/fonts.conf file to configure system font access --
fontconfigproblems to the fontconfig bugzilla system located at fontconfig.orgNote that the normal make install procedure for fontconfig is toreplace any existing fonts.conf file with the new version. Placedir/usr/share/fonts/dirdir/usr/share/X11/fonts/Type1/dir dir/usr/share/X11/fonts/TTF/dir dir/usr/local/share/fonts/dirdir prefixxdgfonts/dirdir~/.fonts/dircachedir/usr/lib/fontconfig/cache/cachedircachedir prefixxdgfontconfig/cachedircachedir~/.fontconfig/cachedir
/fontconfig
2: 新建/usr/share/fonts/Fonts文件夹 mkdir /usr/share/fonts/Fonts
3把Windows下的字体C:\Windows\Fonts下的宋体即 simsun.ttc上传到linux服务器 /usr/share/fonts/Fonts/ 路径下即可
[rootlocalhost Fonts]# ll
总用量 17788
-rw-r--r--. 1 root root 18214472 4月 21 09:39 SIMSUN.TTC4: 查看刚指定的字体
[rootlocalhost Fonts]# fc-list :langzh
/usr/share/fonts/Fonts/SIMSUN.TTC: 新宋体,NSimSun:style常规,Regular
/usr/share/fonts/Fonts/SIMSUN.TTC: 宋体,SimSun:style常规,Regular5至此安装成功
三、实现PDF转word文档
pdf 转 word 2003
参数说明
## --outdir为 输出目标
## --convert-to 转换格式libreoffice7.1 --infilterwriter_pdf_import --convert-to doc ip.pdf --outdir ./ 21pdf 转 word 2007
libreoffice7.1 --infilterwriter_pdf_import --convert-to docx ip.pdf --outdir ./ 21四、制作自己的镜像 运行容器 基于cypress/browsersdocker run --namebrowsers -itd cypress/browsers 进入容器安装 LibreOffice_7.1.8.1软件 进入browsers容器 使用上面的Debian 版本安装方式安装好 打包镜像docker commit 4f14d865967a 10.10.11.145:8082/cypress/browsers_libreoffice7.1:latest 查看打好镜像
[rootcert-admin-api-service ~]# docker images | grep browsers_libreoffice7.1
10.10.11.145:8082/cypress/browsers_libreoffice7.1 latest 5d2e6f5dc95b 3 minutes ago 3.34GB
登录镜像仓库sudo docker login 127.0.0.1:8082 -u 用户名 -p 密码
6.推送到镜像仓库
docker push 127.0.0.1:8082/cypress/browsers_libreoffice7.1:latest
五、遇到的坑
1. 版本问题
亲测 7.1.8版本pdf 转word后正常 7.4.6版本转出来的样式有问题都挤在一页重叠在一起。 解决方法安装7.1.8版本安装7.1.8版本安装7.1.8版本
2. 字体重叠问题 解决方法
为因是 html 转的 pdf ,然后再用 pdf 转为 word 出现字体重叠问题是因为使用粗体导致所以 html css 样式不要使用font-weight: bold;
六、go代码实现
使用 golang 执行 cmd 命令调用 libreoffice7实现 pdf 转 word
/*参数说明## --outdir 为 输出目文件夹路径## --convert-to 转换格式 例 doc / docx /pdfsourcePdfPath pdf源文件路径 例 staitc/download/ip.pdfcreateWordPath 生成的word文件夹路径 例 static/download/usr/local/bin/libreoffice7.1 --infilterwriter_pdf_import --convert-to doc staitc/download/ip.pdf --outdir staitc/download 21
*/
//Pdf2Word pdf 转 wordfunc Pdf2Word(sourcePdfPath, createWordDirPath string) (filePath string, err error) {argStr : fmt.Sprintf(libreoffice7.1 --infilterwriter_pdf_import --convert-to doc %s --outdir %s, sourcePdfPath, createWordDirPath)cmd : exec.Command(/bin/sh, -c, argStr)log.Println(cmd:--, cmd.String())// 方法一//stderr, err : cmd.StderrPipe()//if err ! nil {// log.Println(stderr1:--, err.Error())// return//}//stdout, err : cmd.StdoutPipe()//if err ! nil {// log.Println(stderr2:--, err.Error())// return//}//if err cmd.Start(); err ! nil {// log.Println(stderr3:--, err.Error())// return//}//outErr, err : io.ReadAll(stderr)//if err ! nil {// log.Println(stderr4:--, err.Error())// return//}//out, err : io.ReadAll(stdout)//if err ! nil {// log.Println(stderr5:--, err.Error())// return//}//if err cmd.Wait(); err ! nil {// log.Println(stderr6:--, err.Error())// return//}//log.Printf(Result: %s, outErr: %s; /n, out, outErr)// 方法二var out bytes.Buffervar stderr bytes.Buffercmd.Stdout outcmd.Stderr stderrerr cmd.Run()//log.Println(cmd.Run() failed:, fmt.Sprint(err): stderr.String())if err ! nil {log.Println(cmd.Run() failed22:, fmt.Sprint(err): stderr.String())return}log.Println(pdf2Word success . Result: out.String())//获取文件名带后缀filenameWithSuffix : path.Base(sourcePdfPath)//获取文件后缀fileSuffix : path.Ext(filenameWithSuffix)//获取文件名filenameOnly : strings.TrimSuffix(filenameWithSuffix, fileSuffix)filePath createWordDirPath / filenameOnly .docreturn filePath, nil
}