阅读PDF页面并提取列

时间:2019-05-21 13:12:33

标签: python python-3.x

请考虑以下PDF文件,该文件具有两个页面,如下所示:

第1页:

Page 1

第2页:

Page 2

我已经创建好了,以便用户可以提供百分比位置,并且脚本将相应地“裁剪”页面。例如:

RawData\/SignalSelect

这些位置将使页面上的列分别占33%和66%。 (最后一列将在右侧保留)。

我本质上想做的是创建一个像这样的JSON数组:

 pattern › RawData\/Sig

 Pattern matches no files

这是我当前的代码:

{"1":{"position":"33"}, "2":{"position":"66"}}'

因此,以上未返回所需的输出。它返回:

{  
   "1":[  
      {  
         "row":"Page 1 - Col 1."
      },
      {  
         "row":"Page 2 - Col 1."
      }
   ],
   "2":[  
      {  
         "row":"Page 1 - Col 2"
      },
      {  
         "row":"Page 2 - Col 2"
      }
   ],
   "3":[  
      {  
         "row":"Page 1 - Col 3"
      },
      {  
         "row":"Page 2 - Col 3"
      }
   ]
}

如您所见,我遇到了两个问题:

  1. 它不会向每行JSON输出添加“行”。
  2. 首先遍历每个页面,然后遍历该页面的所有列,然后转到下一页。我正在尝试使其将每一列添加到其各自的键(尽管内容位于哪个页面上)。

这个问题已经存在了几个小时,我似乎无法为如何将每列结果添加到其各自的键上而费解。 (所有页面上的第1列=>第1列和所有页面上的第2列=>第2列,依此类推。)

编辑:

我尝试对代码进行一些更改:

#npages = number of PDF pages.

page = defaultdict(list)

for n in range(npages):

    page[n + 1] = []
    path = pdf_file + str(n + 1) + '.pdf' #grab the current PDF page.

    for i, col in enumerate(COLUMNS):
        cmd = ['pdftotext', str(path), '-']
        proc = subprocess.Popen(
            cmd, stdout=subprocess.PIPE, bufsize=0, text=True)
        out, err = proc.communicate()

        page[n + 1].append(out)

    #Add the last column (rest of the page):
    path = pdf_name + str(n + 1) + '.pdf'
    cmd = ['pdftotext', str(path), '-']
    proc = subprocess.Popen(
         cmd, stdout=subprocess.PIPE, bufsize=0, text=True)
    out, err = proc.communicate()

    lastColumn = int(len(COLUMNS))
    page[int(lastColumn) + 1].append(out)

但是打印:

{  
   "1":[  
      "Page 1 Col 1.\n\nPage 1 Col 2\n\n\f",
      "Page 1 Col 3\n\n\f"
   ],
   "3":[  
      "\f",
      "\f"
   ],
   "2":[  
      "Page 2 Col 1.\n\nPage 2 Col 2\n\n\f",
      "Page 2 Col 3\n\n\f"
   ]
}

似乎只是每个页面的最后一次迭代。

0 个答案:

没有答案