首页 > 解决方案 > 从pdf中提取文本到文件

问题描述

这个问题可能是重复的,但类似问题中的答案都没有帮助我。我正在寻找一种简单的方法,将 pdf 文件中的文本提取到任何其他类型的文件或结构中,让我使用它。我要提取的文本出现在第 78-79 页。在流程结束时,我想将表格中的每个单元格写入.txt文件的不同行中。例如,我想把表格中的第一行从这里开始:

在此处输入图像描述

对此:

0x00
Channel standby
CH_7
CH_6
CH_5
CH_4
CH_3
CH_2
CH_1
CH_0
0x00
RW

我正在使用 Visual Studio 2017,但我也可以在 Pycharm 上工作。

我已尝试使用此问题此处建议的所有选项

但我在 Windows 10 操作系统上安装所需的库时遇到问题。我也不确定这些库是否仍在使用和支持。如果有人可以向我推荐有关此主题的一些更新材料或将我推荐给相关图书馆,我将不胜感激。

谢谢你。

标签: pythonvisual-studiofile

解决方案


这是使用 PyMuPDF ( pip install pymupdf) 的东西。

在此示例中,get_document_bytes只需在您提供的 URL 处请求 PDF 资源(使用第三方requests模块),并返回 PDF 字节。我们使用字节来通过参数main创建一个fitz.Document实例。stream您也可以手动下载 PDF 文件并提供 afilename而不是字节流,但我不想这样做。我们从文档中获取特定页面并打印该页面上的所有文本:

def get_document_bytes():
    import requests

    url = "https://www.mouser.co.il/datasheet/2/609/AD7768-7768-4-1502035.pdf"

    headers = {
        "user-agent": "Mozilla/5.0"
    }

    response = requests.get(url, headers=headers)
    response.raise_for_status()

    return response.content


def main():

    import fitz

    desired_page = 78

    doc = fitz.Document(stream=get_document_bytes(), filetype="PDF")
    page = doc.loadPage(page_id=desired_page-1)

    print(page.getText())
    
    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

输出:

AD7768/AD7768-4 
Data Sheet
 
Rev. B | Page 78 of 105 
AD7768 REGISTER MAP DETAILS (SPI CONTROL) 
AD7768 REGISTER MAP 
See Table 63 and the AD7768-4 Register Map Details (SPI Control) section for the AD7768-4 register map and register functions. 
Table 37. Detailed AD7768 Register Map  
Reg. 
Name 
Bit 7 
Bit 6 
Bit 5 
Bit 4 
Bit 3 
Bit 2 
Bit 1 
Bit 0 
Reset RW 
0x00 
Channel standby 
CH_7 
CH_6 
CH_5 
CH_4 
CH_3 
CH_2 
CH_1 
CH_0 
0x00 
RW 
...

我知道您想要两页的文本,而不仅仅是一页 - 而且您也不想要这些页面中的所有文本,只想要表格中的内容。这只是为了让您入门-我可能会对此进行更多修改,并稍后更新我的帖子。


推荐阅读