pdf 转 word
pdf 转 word
一、思路
- 直接调用LibreOffice 命令进行文档转换的命令行工具
使用的前系统中必须已经安装了
- libreoffice
- libreoffice已翻译的用户界面语言包: 中文 (简体)
- libreoffice离线帮助文档: 中文 (简体)
- 上传字体
重点:
重点:
重点:
亲测 7.1.8版本pdf 转word后正常 ,
7.4.6版本转出来的样式有问题,都挤在一页,重叠在一起。
二、软件安装下载
1. windows安装
https://zh-cn.libreoffice.org/download/libreoffice/
a.安装
直接一键默认安装
环境变量:在path前加入libreoffice安装路径(如:D:\Program Files\LibreOffice\program)
进入dos窗口输入soffice 如果弹出libreoffice界面则表示安装成功
b. 中文包
另外再下载安装下以中文包,此处略过
- libreoffice已翻译的用户界面语言包: 中文 (简体)
- libreoffice离线帮助文档: 中文 (简体)
soffice --infilter="writer_pdf_import" --convert-to doc 11种绕过CDN查找真实IP 方法.pdf 2>&1
2 certos7版本安装
- CentOS系统环境:
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
## 下载下面三个包
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 -y
3. Debian 版本安装
root@4f14d865967a:/# cat /etc/issue
Debian GNU/Linux 11 \n \l
- 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 (根据使用的版本自己调整命令版本号)
- 使用帮助
- 查看版本
[root@localhost testPdf2word]# libreoffice7.1 -version
Warning: -version is deprecated. Use --version instead.
LibreOffice 7.1.8.1 e1f30c802c3269a1d052614453f260e49458c82c
4. 安装字体
安装字体是为了防止中文乱码问题处理
1:查看fonts目录:cat /etc/fonts/fonts.conf | grep fon
得知字体存放位置:/usr/share/fonts
[root@localhost Fonts]# cat /etc/fonts/fonts.conf | grep fon
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- /etc/fonts/fonts.conf file to configure system font access -->
<fontconfig>
problems to the fontconfig bugzilla system located at fontconfig.org
Note that the normal 'make install' procedure for fontconfig is to
replace any existing fonts.conf file with the new version. Place
<dir>/usr/share/fonts</dir>
<dir>/usr/share/X11/fonts/Type1</dir> <dir>/usr/share/X11/fonts/TTF</dir> <dir>/usr/local/share/fonts</dir>
<dir prefix="xdg">fonts</dir>
<dir>~/.fonts</dir>
<cachedir>/usr/lib/fontconfig/cache</cachedir>
<cachedir prefix="xdg">fontconfig</cachedir>
<cachedir>~/.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/
路径下即可
[root@localhost Fonts]# ll
总用量 17788
-rw-r--r--. 1 root root 18214472 4月 21 09:39 SIMSUN.TTC
4: 查看刚指定的字体
[root@localhost Fonts]# fc-list :lang=zh
/usr/share/fonts/Fonts/SIMSUN.TTC: 新宋体,NSimSun:style=常规,Regular
/usr/share/fonts/Fonts/SIMSUN.TTC: 宋体,SimSun:style=常规,Regular
5:至此安装成功
三、实现PDF转word文档
pdf
转 word 2003
参数说明
## --outdir为 输出目标
## --convert-to 转换格式
libreoffice7.1 --infilter="writer_pdf_import" --convert-to doc ip.pdf --outdir ./ 2>&1
pdf
转 word 2007
libreoffice7.1 --infilter="writer_pdf_import" --convert-to docx ip.pdf --outdir ./ 2>&1
四、制作自己的镜像
运行容器 基于
cypress/browsers
docker run --name=browsers -itd cypress/browsers
进入容器安装
LibreOffice_7.1.8.1
软件
进入browsers容器 使用上面的Debian 版本安装方式安装好打包镜像
docker commit 4f14d865967a 10.10.11.145:8082/cypress/browsers_libreoffice7.1:latest
查看打好镜像
[root@cert-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 /pdf
sourcePdfPath pdf源文件路径 例 staitc/download/ip.pdf
createWordPath 生成的word文件夹路径 例 static/download
/usr/local/bin/libreoffice7.1 --infilter="writer_pdf_import" --convert-to doc staitc/download/ip.pdf --outdir staitc/download 2>&1
*/
//Pdf2Word pdf 转 word
func Pdf2Word(sourcePdfPath, createWordDirPath string) (filePath string, err error) {
argStr := fmt.Sprintf(`libreoffice7.1 --infilter="writer_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.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err = 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 + ".doc"
return filePath, nil
}
参考相关文档:
linux安装参考官网
https://zh-cn.libreoffice.org/get-help/install-howto/linux/
官网命令行说明
https://help.libreoffice.org/latest/zh-CN/text/shared/guide/convertfilters.html?DbPAR=SHARED#bm_id541554406270299
Libreoffice命令行实现office转pdf(Windows、Linux)
https://blog.csdn.net/CheneyKing/article/details/122323156
Go语言中 如何实现PDF转word文档 ?
https://zhuanlan.zhihu.com/p/619789117
3分钟带你通过 Go 语言实现 PDF 转 Word!
https://baijiahao.baidu.com/s?id=1761721549111346526&wfr=spider&for=pc
pdf 转 word的更多相关文章
- 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理
http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...
- 一款免费支持PDF、word、excel、PPT、jpeg之间互转线上软件
偶然发现的一款免费支持PDF.word.excel.PPT.jpeg之间互转,支持合并pdf.加密解密PDF的线上软件,首先声明,不是广告党,我自己试用过,确实是目前我用过最好用的,如果有朋友有更好的 ...
- pdf转word
一.刚需 pdf转word,这个需求肯定是有的.但是大家都知道,pdf是用来排版打印的,所以编辑起来会比较麻烦,所以,大家都会尝试将pdf的内容转成word,然后再进行编辑. 二.方法 1.用offi ...
- 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
PDF是一种文件格式,包含文本,图像,数据等,这是独立于操作系统的文件类型.它是一个开放的标准,压缩,另一方面DOC文件和矢量图形是由微软文字处理文件.该文件格式将纯文本格式转换为格式化文档.它支持几 ...
- iText导出pdf、word、图片
一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...
- PDF转WORD工具 Solid Converter PDF v9.1.6744
Solid Converter PDF中文破解版(pdf转换成word转换器)是一款功能强大的PDF格式转换软件.Solid Converter PDF允许用户将PDF转换为Word(PDF to W ...
- pdf转换为word小工具,挺好
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFwZW5nMDExMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- 如何保存PDF、Word和Excel文件到数据库中
在项目中,有时候我们很需要把PDF.Word和Excel文档等等上传到数据库,以便日后使用.今天这篇文章向大家讲解如何将这些文件保存到数据库的. 详细步骤 第一步:打开数据库,单击新建查询,创建一个名 ...
- 判断pdf、word文档、图片等文件类型(格式)、大小的简便方法
判断pdf.word文档.图片等文件类型(格式).大小的简便方法 很久没发文了,今天有时间就写一下吧. 关于上传文件,通常我们都需要对其进行判断,限制上传的类型,如果是上传图片,我们甚至会把图片转化成 ...
- 某pdf转word v6.3.0.2算法分析
某pdf转word v6.3.0.2算法分析 [文章标题]某pdf转word v6.3.0.2算法分析 [文章作者]jieliuhouzi[原版下载]www.pdfcword.cn [保护方式]序列号 ...
随机推荐
- Charles笔记
Charles 预览模式 Structure 以域名对请求进行分组,可以很方便地预览同一域名下的请求数据,也方便于日常开发中对某一服务接口的分析和处理 Sequence Sequence以时间顺序显示 ...
- __declspec(dllimport) 和 __declspec(dllexport)的使用详解、以及 XX_API 的含义
1. C++代码里调用别人的库.或者写库给别人用.大概有如下的方法(只讨论windows系统的情况): ---- a) 提供头文件 h . 静态库 lib -- > 静态链接 ---- b) ...
- C++ || const_cast 将const变量转为非const
点击查看代码 #include <iostream> using namespace std; int main() { int a =5; const int* p=&a;//需 ...
- day47-Mysql初识
1.数据库的演变过程-- 文件存储(不同用户之间数据格式不一致,杂乱)==> 软件开发目录规范(限定了储存的具体位置,不能网络通信)==>数据库 数据库就是一款基于网络通信操作文件的应用程 ...
- 02 docker的基本用法
本章内容 1.OCI 2.docker核心组件--Cgroup与runC 3.docker的架构 4.docker的基本操作 5.安装docker环境 6.创建第一个容器 6.docker容器的状态变 ...
- 基于5G边缘网关的智慧公交站台应用
发展智能物联网,有利于提高城市运行效率,优化居民生活体验,促进城市迸发活力.智能物联网已经融合进生活的方方面面,例如最常见.分布最广泛的公交站台,也能够通过物联网实现升级换代,为居民提供更丰富.更便捷 ...
- js 字符串和16进制的互相转换(转)
字符串转16进制 function strToHexCharCode(str) { if(str === "") return ""; var hexCharC ...
- Kibana+X-pack安装使用
安装Kibana 下载解压安装包,一定要装与ES相同的版本 下载地址: https://www.elastic.co/downloads/kibana wget https://artifacts.e ...
- freopen函数
C/C++ 输入输出到文件 freopen("in.txt","r",stdin); freopen("out.txt","w&q ...
- Pytorch-UNet-master>utils>data_loading.py
模块,包 在package_runoob同级目录下,用test.py调用package_runoob包中内容 参考链接: Python 模块 | 菜鸟教程 (runoob.com) Dataset ...