当前位置: 首页 > news >正文

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
}

相关文章:

pdf 转 word

pdf 转 word 一、思路 直接调用LibreOffice 命令进行文档转换的命令行工具 使用的前系统中必须已经安装了 libreofficelibreoffice已翻译的用户界面语言包: 中文 (简体)libreoffice离线帮助文档: 中文 (简体)上传字体 重点&#xff1a;重点&#xff1a;重点&#xff1a; 亲…...

【数据结构OJ题】设计循环队列

原题链接&#xff1a;https://leetcode.cn/problems/design-circular-queue/ 1. 题目描述 2. 循环队列的概念和结构 为充分利用向量空间&#xff0c;克服"假溢出"现象的方法是&#xff1a;将向量空间想象为一个首尾相接的圆环&#xff0c;并称这种向量为循环向量。…...

Java 中创建对象有哪些方式?

目录 面试回答 使用 new 关键字 使用反射机制 使用 Class 类的 newInstance() 方法 使用 Constructor 类的 newInstance 方法 使用 clone 方法 使用反序列化 使用方法句柄 使用 Unsafe 分配内存 面试回答 使用 new 关键字 这是我们最常用的、也是最简单的创建对象的方…...

Kafka 消息发送和消费流程

发送消息 流程如下&#xff1a; Producer 端直接将消息发送到 Broker 中的 Leader 分区中Broker 对应的 Leader 分区收到消息会先写入 Page Cache&#xff0c;定时刷盘进行持久化&#xff08;顺序写入磁盘&#xff09;Follower 分区拉取 Leader 分区的消息&#xff0c;并保持…...

UVa10048 Audiophobia(floyd)

题意 给出一个图&#xff0c;图中的边表示从点u到点v路径上的噪音。给出q个查询&#xff0c;问从u到v所经路径上的最小噪音 思路 在使用floyd计算点对之间的路径时&#xff0c; D u , v k m i n { D u , v k − 1 , m a x { D u , k k − 1 , D k , v k − 1 } } D_{u, v}^…...

​Redis概述

目录 Redis - 概述 使用场景 如何安装 Window 下安装 Linux 下安装 docker直接进行安装 下载Redis镜像 Redis启动检查常用命令 Redis - 概述 redis是一款高性能的开源NOSQL系列的非关系型数据库,Redis是用C语言开发的一个开源的高键值对(key value)数据库,官方提供测试…...

MsrayPlus多功能搜索引擎采集软件

MsrayPlus多功能搜索引擎采集软件 摘要&#xff1a; 本文介绍了一款多功能搜索引擎软件-MsrayPlus&#xff0c;该软件能够根据关键词从搜索引擎中检索相关数据&#xff0c;并提供搜索引擎任务、爬虫引擎任务和联系信息采集三大功能。我们将分析该软件在不同领域的应用&#xf…...

机器学习之概率论

最近&#xff0c;在了解机器学习相关的数学知识&#xff0c;包括线性代数和概率论的知识&#xff0c;今天&#xff0c;回顾了概率论的知识&#xff0c;贴上几张其他博客的关于概率论的图片&#xff0c;记录学习过程。...

【深度学习 | 数据可视化】 视觉展示分类边界: Perceptron模型可视化iris数据集的决策边界

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…...

【计算机视觉】相机基本知识(还在更新)

1.面阵工业相机与线阵工业相机 1.1 基本概念区别 面阵相机则主要采用的连续的、面状扫描光线来实现产品的检测&#xff1b; 线阵相机即利用单束扫描光来进行物体扫描的工作的。 1.2 优缺点 &#xff08;1&#xff09;面阵CCD工业相机&#xff1a; 优点&#xff1a;应用面…...

C++ (友元)(类嵌套时,成员函数以及类声明定义的顺序)小demo

#include<iostream> using namespace std; class Building; //1.因为Goodgay类需要声明Building类变量&#xff0c; //所以Building类必须Goodgay类之前声明&#xff08;前向声明&#xff09;&#xff1b; class GoodGay { public:GoodGay();void visit(); private:Build…...

前端实习第五周周记

前言 每一天做了什么还是要记录一下&#xff0c;不然过两天后就会发现&#xff0c;慢慢遗忘自己的收获与做过的东西。 这周做的是医学检验系统的样本库部分。由于是公司的代码所以不能交代具体&#xff0c;那么久聊一下每天具体做了些什么以及我的一些收获。 周一 周一上午…...

【图论】Floyd算法

一.简介 Floyd算法&#xff0c;也称为Floyd-Warshall算法&#xff0c;是一种用于解决所有节点对最短路径问题的动态规划算法。它可以在有向图或带权图中找到任意两个节点之间的最短路径。 Floyd算法的基本思想是通过中间节点逐步优化路径长度。它使用一个二维数组来存储任意两…...

ceph数据分布

ceph的存储是无主结构&#xff0c;数据分布依赖client来计算&#xff0c;有两个条主要路径。 1、数据到PG 2、PG 到OSD 有两个假设&#xff1a; 第一&#xff0c;pg的数量稳定&#xff0c;可以认为保持不变&#xff1b; 第二&#xff0c; OSD的数量可以增减&#xff0c;OSD的…...

mysql的两张表left join 进行关联后,索引进行优化案例

一 mysql的案例 1.1 不加索引情况 1.表1没加索引 2.表2没加索引 3.查看索引 1.2 添加索引 1.表1添加索引 2.表2添加索引 3.查看...

2018年3月全国计算机等级考试真题(语言二级C)

2018年3月全国计算机等级考试真题&#xff08;语言二级C&#xff09; 第1题 设有定义&#xff1a;char s[81]&#xff1b;int i0&#xff1b;以下不能将一行带有空格的字符串正确读入的语句或语句组是 A. while((s[i]getchar())!\n);s[i]\0; B. scanf("%s",s); C.…...

java.util.Timer简介以及简单使用示例

一、简介 定时器&#xff08;Timer&#xff09;是一个工具类&#xff0c;用于安排任务&#xff08;java.util.TimerTask&#xff09;在指定时间后执行或以指定的时间间隔重复执行。它可以用于执行定时任务、定时调度和时间延迟等操作。 定时器&#xff08;Timer&#xff09;可以…...

C语言笔试训练【第12天】

文章目录 1、请阅读以下程序&#xff0c;其运行结果是&#xff08; &#xff09;2、假设编译器规定 int 和 short 类型长度分别为32位和16位&#xff0c;若有下列C语言语句&#xff0c;则 y 的机器数为&#xff08; &#xff09;3、下列程序的输出结果是什么&#xff08; &…...

外网连接局域网的几种方式?快解析内网穿透安全便利吗?

外网连接局域网是一项网络连接中的关键技术&#xff0c;它能够让远程用户通过互联网访问内部局域网中的资源和服务。外网连接局域网为企业提供了更大的灵活性和便捷性&#xff0c;但也需要严格的安全措施来防止未经授权的访问。 外网连接局域网的几种方式 在将外网连接到局域…...

基于互斥锁的生产者消费者模型

文章目录 生产者消费者 定义代码实现 / 思路完整代码执行逻辑 / 思路 局部具体分析model.ccfunc&#xff08;消费者线程&#xff09; 执行结果 生产者消费者 定义 生产者消费者模型 是一种常用的 并发编程模型 &#xff0c;用于解决多线程或多进程环境下的协作问题。该模型包含…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...

k8s从入门到放弃之Pod的容器探针检测

k8s从入门到放弃之Pod的容器探针检测 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;容器探测是指kubelet对容器执行定期诊断的过程&#xff0c;以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时&#xff0c;未明确定义编译时特性标志。以下是详细解释和解决方案&#xff1a; ‌问题原因‌&#xff1a; 该标志是Vue 3.4引入的编译时特性标志&#xff0c;用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...