python实战-pdf文件转txt

背景:最近刚好需要将一个pdf的内容打出来,这是个比较枯燥的内容,而且pdf里面的文字明显是规范的,所以想写个脚本读取内容,直接复制粘贴。刚好,python的理念就是不重复造轮子,这样的包自然是有的,这个脚本最主要的包就是pdfminer3k。

1.思路

解析出文档,按页存储进txt文件即可。

2.完整代码

from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
from pdfminer.pdfparser import PDFParser, PDFDocument


def parse_pdf(filepath):
    # 创建文件流
    fp = open(filepath, 'rb')
    # 从文件中获取数据,得到一个解析对象
    parser = PDFParser(fp)
    # 连接文档和分析器
    pdoc = PDFDocument()
    parser.set_document(pdoc)
    pdoc.set_parser(parser)

    # 没有密码,初始化密码为空
    pdoc.initialize()
    # 检测文档是否提供文本提取
    if not pdoc.is_extractable:
        raise PDFTextExtractionNotAllowed
    else:
        # 创建PDf资源管理器对象来管理共享资源,catching=False表示不缓存
        pm = PDFResourceManager(caching=False)
        # 创建一个PDF参数分析器
        laparams = LAParams()
        # 创建页面聚合对象
        device = PDFPageAggregator(pm, laparams=laparams)
        # 创建一个PDF解析器对象
        interpreter = PDFPageInterpreter(pm, device)
        # 获取page列表
        pages = pdoc.get_pages()
        # 循环遍历page列表,按页处理
        for page in pages:
            # 使用页面解释器来读取
            interpreter.process_page(page)
            # 使用聚合器获取内容
            layout = device.get_result()
            # 这里layout是一个LTPage对象 里面存放着解析出的各种对象
            for item in layout:
                # 获取文本
                if isinstance(item, LTTextBoxHorizontal):
                    rst = item.get_text()
                    with open("test.txt", 'a', encoding='utf-8') as f:
                        f.write(rst)


if __name__ == '__main__':
    filepath = 'test.pdf'
    parse_pdf(filepath)

3.错误可能

我在写脚本时遇到了一个问题,这个问题还比较常见。

 pdfminer.pdfparser.PDFEncryptionError: Unknown algorithm: param={'CF': {'StdCF': {'AuthEvent': /DocOpen, 'CFM': /V2, 'Length':16}},'Filter':/Standard,'Length':128,'O':b':\r\x18\xf4\xe7i\x1ca\x80\xc9UqX\xdb\xdf\xa4\xaa\x0e\x80J,Xqra\xac\xe8\r\xf1\xb94\xf5','P':-3392,'R':4,'StmF':/StdCF,'StrF':/StdCF,'U':b'\xbc7/j\xc4\xc2)\xe6g\xebX\xc2\x81\x10n\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'V': 4}

这段错误的原因主要是默认现在的pdf文件就算你打开就能看,但是其实还是设置了一个空密码,而pdfminer3k是不认的,它认为就算需要密码,这里可以随便找个在线网站处理一下空密码解锁pdf文件。

其实这样的空密码加密表面上对读者没有影响,但是其实是为了防止复制粘贴而已。

4.源文件

5. 运行结果

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周先森爱吃素

你的鼓励是我坚持创作的不懈动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值