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版本安装

3. Debian 版本安装

复制代码
root@4f14d865967a:/# cat /etc/issue
Debian GNU/Linux 11 \n \l

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文档

pdfword 2003

复制代码
参数说明
## --outdir为 输出目标
## --convert-to 转换格式


libreoffice7.1 --infilter="writer_pdf_import" --convert-to doc ip.pdf --outdir ./ 2>&1

pdfword 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

  5. 登录镜像仓库
    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,实现 pdfword

复制代码
/*
  参数说明
  ## --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
}
相关推荐
温轻舟9 小时前
Python自动办公工具05-Word表中相同内容的单元格自动合并
开发语言·python·word·自动化办公·温轻舟
亮子AI17 小时前
如何做一个类似Word的编辑器?要有修改标记功能
编辑器·word
低调电报19 小时前
在WPS可以显示图片,word中不能显示的原因及解决
经验分享·word·wps
shouchaobao1 天前
免费PDF工具:PDF转Word/Excel/图片+AI总结+合并拆分+OCR识别,多端无广告!
pdf·word·excel
南风微微吹2 天前
2026年最新国考《行测》《申论》历年真题及答案PDF电子版(2000-2025年)
pdf·国考
q***01772 天前
SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD
spring boot·后端·pdf
嗯、.2 天前
使用Itext9生成PDF水印,兼容不同生成引擎的坐标系(如: Skia、OpenPDF)
java·pdf·itextpdf·openpdf·坐标变换矩阵
拓端研究室2 天前
专题:2025AI产业全景洞察报告:企业应用、技术突破与市场机遇|附920+份报告PDF、数据、可视化模板汇总下载
大数据·人工智能·pdf
南风微微吹2 天前
2026年新大纲普通话考试真题题库50套PDF电子版
pdf·普通话
JHC0000002 天前
Python PDF 相关操作
开发语言·python·pdf