pdf2docx库 | 转文件格式,支持抽取文件中的表格数据

腾讯课堂 | Python网络爬虫与文本分析(戳一戳)~~

今天在知乎看到

如何免费地、完整地把 PDF 转换为 Word?

近几年【pdf转word】在百度指数中呈上升趋势,

由于pdf文件本身特殊性,想要百分百地将其转回word格式基本上是不可能的。我尝试着在github上搜了下,找到一个pdf2docx库可以实现批量转换功能。

特性

支持的pdf转docx的功能有

  1. 解析并重新创建段落

  • [x] 水平方向上的文字:从左到右

  • [x] 垂直方向的文字:从下到上

  • [x] 字体样式,例如 字体名称,大小,粗细,斜体和颜色

  • [x] 文字格式,例如 突出显示,下划线,删除线

  • [x] 文字对齐方式,例如 左/右/中心/对齐

  • [x] 段落布局:水平对齐和垂直间距

  1. 解析并重新创建图像

  • [x] 内嵌图片

  • [x] 灰度/ RGB / CMYK模式下的图像

  • [x] 透明图像

  1. 解析并重新创建表

  • [x] 边框样式,例如 宽度,颜色

  • [x] 底纹样式,即背景色

  • [x] 合并单元格

  • [x] 垂直方向单元

  • [x] 边框部分隐藏的桌子

  • [x] 使用多处理解析页面

由于还分析了表内容和格式/样式,因此它也可用作提取表内容的工具。

不足

  1. 仅限于纯文本的pdf,图片格式的pdf不行的

  2. pdf内不能有浮动的图片

  3. 其他

安装

pip3 install pdf2docx

数据

在项目文件夹中有data文件夹,我们看一下data文件夹内的实验文件

import os

os.listdir('data')
['demo-table.pdf',
 'demo-image.pdf',
 'demo-table-lattice.pdf',
 'demo-table-close-underline.pdf',
 'demo-path-transformation.pdf',
 'demo-text-scaling.pdf',
 'demo-text-alignment.pdf',
 'demo-text-unnamed-fonts.pdf',
 'demo-table-shading-highlight.pdf',
 'demo-table-lattice-one-cell.pdf',
 'demo.pdf',
 'demo-image-cmyk.pdf',
 'demo-text.pdf',
 'demo-table-weird.pdf',
 'demo-image-vector-graphic.pdf',
 'demo-image-transparent.pdf',
 'demo-table-nested.pdf',
 'demo-blank.pdf',
 'demo-table-shading.pdf',
 'demo-table-border-style.pdf',
 'demo-table-bottom.pdf',
 'demo-table-align-borders.pdf',
 'demo-table-stream.pdf']

转docx

将pdf转为docx,结果存到项目文件夹output中

parse(pdf_file, docx_file, start, end, pages)

  • pdf_file pdf文件路径(输入)

  • docx_file docx文件路径(输出)

  • start 开始转换的页面数,可不设置,默认为0

  • end 结束的页面数,可不设置,默认为None

  • pages 待转换的页面数列表,可不设置,默认为None

测试demo-text.pdf打开样式如下图


from pdf2docx import parse

pdf_file = 'data/demo-text.pdf'
docx_file = 'output/demo-text.docx'

# 将pdf里第一页转为docx
parse(pdf_file, docx_file, start=0, end=1)
Processing Pages: 1/1...
--------------------------------------------------
Terminated in 0.11046225800009779s.

抽取表格

extract_tables(pdf_file, docx_file, start, end, pages)

  • pdf_file pdf文件路径(输入)

  • docx_file docx文件路径(输出)

  • start 开始转换的页面数,可不设置,默认为0

  • end 结束的页面数,可不设置,默认为None

  • pages 待转换的页面数列表,可不设置,默认为None

测试demo-table.pdf如下图


from pdf2docx import extract_tables

pdf_file = 'data/demo-table.pdf'

tables = extract_tables(pdf_file, start=0, end=1)
for table in tables:
    print(table)



Run


    Processing Pages: 1/1...
    [[' ', 'Method / Attribute ', 'Description '], 
    ['1 ', 'Document.pageCount ', 'the number of pages (int) \nthe metadata (dict) '], 
    ['2 ', 'Document.metadata ', None], 
    ['3 ', 'Document.getTo\nC() \nDocument.loadP\nage() \nread a Page read \na Page read a \nPage read a \nPage read a \nPage read a \nPage read a \nPage read a \nPage read a \nPage ', None], 
    ['4 ', None, None]]
    
    [['Input ', None, None, None, None, None], 
    ['Description A ', 'mm ', '30.34 ', '35.30 ', '19.30 ', '80.21 '], 
    ['Description B ', '1.00 ', '5.95 ', '6.16 ', '16.48 ', '48.81 '], 
    ['Description C ', '1.00 ', '0.98 ', '0.94 ', '1.03 ', '0.32 '], 
    ['Description D ', 'kg ', '0.84 ', '0.53 ', '0.52 ', '0.33 '], 
    ['Description E ', '1.00 ', '0.15 ', None, None, None], 
    ['Description F ', '1.00 ', '0.86 ', '0.37 ', '0.78 ', '0.01 ']]这块可能对pdf中报表变量抽取有一些帮助,可以做的可能有很多吧,比如
结合pandas,将pdf中提取的表格存到excel中,后期分析识别pdf中有多少个表格。。。。。。
近期文章Python网络爬虫与文本数据分析
bsite库 | 采集B站视频信息、评论数据

爬虫实战 | 采集&可视化知乎问题的回答
rpy2库 | 在jupyter中调用R语言代码
tidytext | 耳目一新的R-style文本分析库
reticulate包 | 在Rmarkdown中调用Python代码
plydata库 | 数据操作管道操作符>>
plotnine: Python版的ggplot2作图库

七夕礼物 | 全网最火的钉子绕线图制作教程

读完本文你就了解什么是文本分析

文本分析在经管领域中的应用概述  
综述:文本分析在市场营销研究中的应用

plotnine: Python版的ggplot2作图库
小案例: Pandas的apply方法  
stylecloud:简洁易用的词云库 
用Python绘制近20年地方财政收入变迁史视频  
Wow~70G上市公司定期报告数据集

漂亮~pandas可以无缝衔接Bokeh  
YelpDaset: 酒店管理类数据集10+G  


“分享”和“在看”是更好的支持!
代码项目文件下载链接:https://pan.baidu.com/s/1Wkkz1z8VRHQmvTS8qv2sJQ  密码:4omx
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值