pdf2docx:Python实现PDF转Word
本文简介作者写的一个PDF转Word的Python库pdf2docx
,包括基本思路、功能、使用方法及样例。
https://github.com/dothinking/pdf2docx
1 基本思路
PDF文档遵循一定的规范1,例如精确定位了每个字符出现在页面上的坐标、根据坐标绘制的各种形状(线、矩形、曲线等)。所以,用PDF格式传输和打印文档可以保证格式的一致性,不会像Word那样因为渲染引擎的不同而出现格式错乱、多页少页等问题。
Word文档则是一种流式布局,元素之间的相对距离决定了其呈现在页面上的最终位置。因此适合编辑内容,前文内容的修改自动促发后续文档布局的更新。
PDF转Word是一个古老的话题,其难点在于建立从PDF基于元素位置的格式到Word基于内容的格式的映射。例如,PDF中实际并不存在段落
、表格
的概念,仅仅是在给定位置上有一些文本、直线,PDF转Word要做的就是将“横、竖线条围绕着文本”解析为“表格”,将“文本及下方的一条横线”解析为“文本下划线”,等等。
具体实现离不开对PDF文档的版式分析,可以是传统的文档元素位置和内容分析,也可以是机器学习/计算机视觉方法训练模型(尤其是针对扫描的PDF文档)。pdf2docx
采用的是前者,基本思路:
- 利用
PyMuPDF
获取页面元素,例如文本和形状及其位置; - 利用元素间的相对位置关系推断内容;
- 使用
python-docx
将上一步解析的内容元素重建为docx格式的Word文档。
以上技术路线也决定了pdf2docx
的局限:
- 无法识别和重建PDF扫描件。
- 根据有限的、确定的规则建立PDF与docx元素之间的映射并非完全可靠,也就是说仅能处理常见的规范的格式,而非百分百还原。
2. 功能
段落及文本样式
- 段落对齐方式(左/右/居中/分散)及段间距
- 水平(自左向右)或竖直(自底向上)方向的文本
- 字体样式(颜色、字体、大小、粗/斜体)
- 文本样式(高亮、下划线、删除线、超链接)
- 列表样式
图片
- 段落内嵌入型图片
- 衬于文本下方的浮动型图片
- 支持Gray/RGB/CMYK等颜色模式及透明背景图片
表格及其样式
- 边框样式(粗细、颜色)
- 单元格背景色
- 合并的单元格
- 隐藏部分边框的表格(例如三线表)
- 嵌套表格
支持多进程并行处理
3. 快速上手
pdf2docx
支持Windows和Linux平台,要求Python版本>=3.6
。
首先,通过pip
安装:
$ pip install pdf2docx
作为Python库使用
from pdf2docx import Converterpdf_file = '/path/to/sample.pdf'
docx_file = 'path/to/sample.docx'# convert pdf to docx
cv = Converter(pdf_file)
cv.convert(docx_file, start=0, end=None)
cv.close()
其中,start
和end
参数指定转换页码的范围(下标默认从0开始),默认从第一页到最后一页;也可以通过pages
指定不连续的页面,例如pages=[1,3,5]
。
作为命令行工具使用
pdf2docx
也可以作为一个命令行工具,直接在命令窗口中使用:
$ pdf2docx convert /path/to/pdf /path/to/docx
同理可以通过--start
、--end
或者--pages
指定页面范围。
更多说明参考文档2。
4. 样例
首先看一个综合样例,涉及段落、文本样式、表格样式及图片。
基本表格 (第一行标题存在一点瑕疵,不过可以手动回车调整)
复杂一些的表格 (椭圆章上旋转角度的字都丢掉了,目前无能为力,仅支持水平、竖直的文字;密码区同上一例,第三行字符“49”后面需要手动加一个软回车)
最后,看一个浮动图片的例子
PDF Reference 1.7 ↩︎
pdf2docx documentation ↩︎
pdf2docx:Python实现PDF转Word相关推荐
- python实现pdf转word详解_手把手|20行Python代码教你批量将PDF文件转为Word格式(包教包会)...
在日常工作或学习中,经常会遇到这样的无奈: "小任,你把这个PDF中的文件码出来发我" 倒霉,2M的PDF12点也完不了啊! 很多时候在学习时发现许多文档都是PDF格式,PDF格式 ...
- Python办公自动化(八)|使用Python转换PDF,Word/Excel/PPT/md/HTML都能转
Word转PDF Word转PDF应该是最常见的需求了,毕竟使用PDF格式可以更方便展示文档,虽然在Word中可以直接导出为PDF格式,但是使用Python可以批量转换,更加高效. 目前在Python ...
- 6行代码!用Python将PDF转为word
pdf转word应该算是一个很常见的需求了网上有些免费的转换工具,一方面不安全,有文件泄露风险,另一方面有免费转换的次数限制. 今天向大家分享一个很好用的工具:pdf2docx 安装 $ pip in ...
- 用Python把PDF转为Word方法总结
先讲一下为啥要写这个文章,网上其实很多这种PDF转化的代码和软件.我一直想用Python做,但是网上搜到的代码很多都不能用,很多是2.7版本的代码,再就是PDF需要用到的库在导入的时候,很多的报错,解 ...
- pdf转word python_【python】python实现PDF转word
又是美好的一天,如果大家因为PDF转word而烦恼的话可以尝试用用Python的PDFMiner3K,这是一个非常好用的库,下面是把任意PDF读成字符串,然后用stingio转化成文件对象: #!/u ...
- 文末福利|使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!
往期精选 Python办公自动化|从Word到Excel Python办公自动化|从Excel到Word Python办公自动化|对比文件,光速完成 Python办公自动化|Excel表格,自动更新 ...
- python读取pdf内容转word_【python】python实现PDF转word
又是美好的一天,如果大家因为PDF转word而烦恼的话可以尝试用用Python的PDFMiner3K,这是一个非常好用的库,下面是把任意PDF读成字符串,然后用stingio转化成文件对象: #!/u ...
- 使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!
同一个操作执行两次,就要考虑自动化! 大家好,又到了Python办公自动化专题. 今天讲的是各位一定会接触到的PDF转换,关于各种格式的文件转换为PDF有很多第三方工具与网站可以实现,但是使用Pyth ...
- python把excel变成ppt_【转】使用Python转换PDF,Word/Excel/PPT/md/HTML都能转!
今天讲的是各位一定会接触到的PDF转换,关于各种格式的文件转换为PDF有很多第三方工具与网站可以实现,但是使用Python的好处不仅可以批量转换,同时一旦脚本写完了以后就可以一键执行,彻底解放双手,那 ...
- Python转换PDF,Word/Excel/PPT都能转!
今天讲的是各位一定会接触到的PDF转换,关于各种格式的文件转换为PDF有很多第三方工具与网站可以实现,但是使用Python的好处不仅可以批量转换,同时一旦脚本写完了以后就可以一键执行,彻底解放双手,那 ...
最新文章
- CUDA从入门到精通(三):必备资料
- 开放对静态资源的访问
- php soecket服务器搭建_PHP socket 服务器框架集
- 《人月神话》阅读体会(三)
- C++17 Any类
- 毕设一:python 爬取苏宁的商品评论
- 安捷伦or是德信号源+频谱仪操作: 从程控到自动测试 (三)互调检测的程控实现
- 为什么不要随便点击下载链接:过时的远程病毒灰鸽子木马示范
- 图的深度优先遍历和广度优先遍历算法流程图
- 按发动机排量征收汽车消费税是不合理的,应该按燃烧室容积征税
- stylegan2报错“undefined symbol: _ZN10tensorflow12OpDefBuilder6OutputESs”的解决方案
- 从软件工程师到有赞新零售技术负责人,34岁李星专访
- Shopnc之nginx配置
- Adobe Acrobat Pro DC 缩小文件大小
- (C#)Windows Shell 外壳编程系列总结
- Windows位图文件格式[转]
- 1.1 命题逻辑 笔记
- 雾霾太重?深度神经网络教你如何图像去雾
- 微信小程序 识别身份证,银行卡
- echarts饼图在缩放是label显示省略号的问题