pdf 转 word

pdf 转 word

一、思路

  1. 直接调用LibreOffice 命令进行文档转换的命令行工具
    使用的前系统中必须已经安装了
  • libreoffice
  • libreoffice已翻译的用户界面语言包: 中文 (简体)
  • 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 --infilter="writer_pdf_import" --convert-to doc 11种绕过CDN查找真实IP 方法.pdf 2>&1

2 certos7版本安装

    1. CentOS系统环境:
[root@localhost ~]# cat   /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
    1. 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
    1. 解压并安装
## 主包
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
    1. Debian 系统从下面地址下载安装包
      Index of /libreoffice/old/7.1.8.1/deb/x86_64
    1. 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
    1. 解压并安装
## 主包
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
    1. 使用帮助
      测试是否安装成功:
    libreoffice7.1 -help (根据使用的版本自己调整命令版本号)
    
    1. 查看版本
[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.orgNote that the normal 'make install' procedure for fontconfig is toreplace 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

四、制作自己的镜像

  1. 运行容器 基于cypress/browsers
    docker run --name=browsers -itd cypress/browsers

  2. 进入容器安装 LibreOffice_7.1.8.1软件
    进入browsers容器 使用上面的Debian 版本安装方式安装好

  3. 打包镜像
    docker commit 4f14d865967a 10.10.11.145:8082/cypress/browsers_libreoffice7.1:latest

  4. 查看打好镜像

[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
  1. 登录镜像仓库
    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版本转出来的样式有问题,都挤在一页,重叠在一起。

image

解决方法:
安装7.1.8版本
安装7.1.8版本
安装7.1.8版本

2. 字体重叠问题

image

解决方法

为因是 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 --infilter="writer_pdf_import" --convert-to doc staitc/download/ip.pdf --outdir staitc/download 2>&1
*/
//Pdf2Word pdf 转 wordfunc 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.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 + ".doc"return filePath, nil
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/44893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter:webview_flutter和flutter_inappwebview的简单使用

前言 最近在研究如何在应用程序中嵌入Web视图&#xff0c;发现有两个库不错。 一个是官方维护、一个是第三方维护。因为没说特别的需求&#xff0c;就使用了官方库&#xff0c;实现一些简单功能是完全ok的 webview_flutter 不建议使用&#xff0c;因为效果不怎么样&#xf…

网站老域名跳转到新域名有哪些方法?内网穿透内网主机让外网访问

在网站服务器变更及本地主机搭建时&#xff0c;我们经常会遇到老域名地址跳转到新URL的配置&#xff0c;一些朋友还会面对无公网IP让外网访问的问题。今天我们来了解下网站老域名跳转到新域名有哪些方法&#xff0c;以及如何通过内网穿透实现内网主机让外网访问。 网站老域名跳…

js ajax 国内快速 映像

ajax 快速 映像 https://www.bootcdn.cn/ axios入门和axios基本请求方式 https://blog.csdn.net/m0_68997646/article/details/127438174 使用 jsDelivr CDN: <script src"https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>因为我们国…

关于vant2 组件van-dropdown-item,在IOS手机上,特定条件下无法点击问题的探讨

情景重现 先贴有问题的代码 <template><div :class"showBar ? homeContain : homeContain-nobar"><div class"contant" id"content"><van-dialog v-model"loading" :before-close"onBeforeClose" :…

git merge规则

参考文档&#xff1a;https://juejin.cn/post/7129333439299321887 丹尼尔&#xff1a;Hi&#xff0c;蛋兄&#xff0c;周杰伦都出新专辑了&#xff0c;你咋还不更新啊&#xff0c;真的打算半年一更啊&#xff1f; 蛋先生&#xff1a;好像确实是这样&#xff0c;要不&#xff0…

不要着急购买iPhone 15,先看看这5点再做决定吧!

人们对下个月可能推出的iPhone 15感到兴奋,这是有充分理由的——有传言称,新机型正在做出一些重大改变,尤其是在iPhone 15 Pro机型方面。从四款新iPhone都采用USB-C,到iPhone 15 Pro Max采用潜望镜式长焦镜头以实现更好的变焦,听起来有很多功能值得兴奋。 当然,除非你没…

OpenCV图片校正

OpenCV图片校正 背景几种校正方法1.傅里叶变换 霍夫变换 直线 角度 旋转3.四点透视 角度 旋转4.检测矩形轮廓 角度 旋转参考 背景 遇到偏的图片想要校正成水平或者垂直的。 几种校正方法 对于倾斜的图片通过矫正可以得到水平的图片。一般有如下几种基于opencv的组合方…

探索Chevereto图床:使用Docker Compose快速搭建个人图床

家人们!图片在今天的社交媒体、博客和论坛中扮演着至关重要的角色。然而&#xff0c;随着图片数量的增加&#xff0c;寻找一个可靠的图片托管解决方案变得越来越重要。Chevereto图床是一个备受赞誉的解决方案&#xff0c;而使用Docker Compose搭建它更是一种高效、可维护的方法…

UE4中关于利用粒子系统做轨迹描绘导致系统流畅性下降的问题

UE4中关于利用粒子系统做轨迹描绘导致系统流畅性下降的问题 文章目录 UE4中关于利用粒子系统做轨迹描绘导致系统流畅性下降的问题前言假设及验证1. 过多的粒子发射器影响仿真系统2. 粒子数目太多&#xff0c;降低粒子发射频率&#xff0c;同时增大粒子显示范围3. 把信息输出到屏…

matlab 点云最小二乘拟合空间直线(方法一)

目录 一、算法原理1、空间直线2、最小二乘法拟合二、代码实现三、结果展示四、可视化参考本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、空间直线 x

基于 Vercel TiDB Serverless 的 chatbot

作者&#xff1a; shiyuhang0 原文来源&#xff1a; https://tidb.net/blog/7b5fcdc9 # 前言 TiDB Serverless 去年就有和 Vercel 的集成了&#xff0c;同时还有一个 bookstore template 方便大家体验。但个人感觉 bookstore 不够炫酷&#xff0c;借 2023 TiDB hackthon 的…

07_缓存预热缓存雪崩缓存击穿缓存穿透

缓存预热&缓存雪崩&缓存击穿&缓存穿透 一、缓存预热 提前将数据从数据库同步到redis。 在程序启动的时候&#xff0c;直接将数据刷新到redis懒加载&#xff0c;用户访问的时候&#xff0c;第一次查询数据库&#xff0c;然后将数据写入redis 二、缓存雪崩 发生情…

【排排站:探索数据结构中的队列奇象】

本章重点 队列的概念及结构 队列的实现方式 链表方式实现栈接口 队列面试题 一、队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#x…

“RFID与光伏板的完美融合:探索能源科技的新时代!“

随着科技的不断发展&#xff0c;人类创造出了许多令人惊叹的发明。其中&#xff0c;RFID&#xff08;Radio Frequency Identification&#xff09;技术的应用在各个领域日益广泛。最近的研究表明&#xff0c;将RFID技术应用于光伏板领域&#xff0c;不仅可以提高光伏板的效率&a…

JVM中分代回收机制

为什么要分为新生代和老年代&#xff1f; 分为新生代&#xff08;Young Generation&#xff09;和老年代&#xff08;Old Generation&#xff09;是为了更有效地管理和优化内存的使用。 新生代主要存放生命周期较短的对象&#xff0c;例如方法的局部变量、临时变量等。由于这…

【Golang系统开发】搜索引擎(2) 压缩词典

写在前面 这篇文章我们就给出一系列的数据结构&#xff0c;使得词典能达到越来越高的压缩比。当然&#xff0c;和倒排索引记录表的大小相比&#xff0c;词典只占据了非常小的空间。那么为什么要对词典进行压缩呢&#xff1f; 这是因为决定信息检索系统的查询响应时间的一个重…

李沐pytorch学习-卷积网络及其实现

一、卷积概述 1.1 基本定义 卷积计算过程如图1所示&#xff0c;即输入矩阵和核函数&#xff08;filter&#xff09;对应的位置相乘&#xff0c;然后相加得到输出对应位置的数。 图1. 卷积计算过程 该过程可以形象地从图2中展现。 图2. 二维卷积示意图 1.2 实现互相关运算的代…

Python tkinter Notebook标签添加关闭按钮元素,及左侧添加存储状态提示图标案例,类似Notepad++页面

效果图展示 粉色框是当前页面&#xff0c;橙色框是鼠标经过&#xff0c;红色框是按下按钮&#xff0c;灰色按钮是其他页面的效果&#xff1b; 存储标识可以用来识别页面是否存储&#xff1a;例如当前页面已经保存用蓝色&#xff0c;未保存用红色&#xff0c;其他页面已经保存用…

2023最新版本~KEIL5使用C++开发STM32

先看效果 开始教学 因为是第一次写这个配置教程 我会尽量详细些 打开一个Keil工程 移除本地core 添加在线core 第一次编译代码 不会有报错 修改main.c文件类型为C 点击魔术棒 把ARM编译器修改为V6 第二次编译会报错语法不兼容 我把汇编部分的这些代码做了…

基于IMX6ULLmini的linux裸机开发系列九:时钟控制模块

时钟控制模块 核心 4个层次配置芯片时钟 晶振时钟 PLL与PFD时钟 PLL选择时钟 根时钟/外设时钟 系统时钟来源 RTC时钟源&#xff1a;32.768KHz 系统时钟&#xff1a;24MHz&#xff0c;作为芯片的主晶振使用 PLL和PFD倍频时钟 7路锁相环电路&#xff08;每个锁相环电路…