Python3-识别两个文件之间的布局更改

时间:2019-06-25 17:30:11

标签: python python-3.x pdf pdftotext

我目前正在尝试创建PDF文件表解析器,用户可以在其中定义PDF文件中的表状列,然后在“列坐标”中提取PDF文本。

要提取整个PDF文件的文本,我使用 pdftotext ,例如:(示例 invoice.pdf 文件)

pdftotext -f 1 -l 1 invoice.pdf -layout -l

生成:

Invoice #100                                           
Document Date:         26/05 - 2019
                       www.domain.com

要提取页面的特定部分(根据我的列坐标),我使用:

pdftotext -f 1 -l 1 -x 0 -y 100 -W 200 -H 300 invoice.pdf -layout -

以下所有内容的坐标是什么

Invoice #100
Document Date: 

因此上述命令将生成:

26/05 - 2019
www.domain.com

如您所见,上面的作品。它成功地从我的pdf文件中提取了文本(以及坐标中的文本)。

如果我运行pdftotext命令而没有 -x -y -W -H坐标,则会保留格式,但是如果使用坐标,它不会保留整个文档格式(这会使,因为它只查看页面的特定部分。

但是,我试图为文本输出创建文本解析器,为此,我需要保留格式。

正如您在我的原始PDF文件中看到的那样,26/05 - 2019行实际上从第2行开始-但是当我使用坐标提取文本时,输出将在第一行显示它。

我想知道是否有解决办法?

我正在考虑将原始文本输出与具有坐标的输出进行比较,然后从原始文本输出中获取格式设置属性(换行符)并将其添加到第二个文本输出。

当前,这是在我的Python脚本中生成输出的代码:

    column = defaultdict(list)
    COLUMNS = [...]

    for i, col in enumerate(COLUMNS):

         cmd = ['pdftotext', ...]

         proc = subprocess.Popen(
         cmd, stdout=subprocess.PIPE, bufsize=0, text=True)
         out, err = proc.communicate()

    for line in out.splitlines():
        column[0].append({"row": str(line)})

基本上只是将每一行添加到列表中。

0 个答案:

没有答案