基于列和坐标的PDF文档裁剪

2024-04-25 08:08:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个真正的PDF文件(未扫描),在那里我需要能够动态转换为文本内容的PDF文件。你知道吗

我正在尝试这样做,所以我可以定义列(在下面的图像中,有3)和坐标(突出显示的区域)。你知道吗

所以考虑下面的图片,我在这里试图完成的是这样的输出:

{
"1":[
  {"row": "Pay In"}], 
"2": [
  {"row": "Invoice Online Download PDF Questions about this invoice?"}],
"3": [
  {"row": "Contact us"}]
}

enter image description here

如您所见,我有两个列分隔符(这将创建三个列),并且我还定义了一个需要裁剪的区域。你知道吗

我已经看到我可以使用pdftotext从PDF文件中提取文本。你知道吗

我使用PyPDF2获取PDF矩形对象,如下所示:

from PyPDF2 import PdfFileReader

# Get PDF file dimension. (Only first page)
MyPDF = PdfFileReader(open(pdf_file, 'rb'))

x = MyPDF.getPage(0).mediaBox[0]
y = MyPDF.getPage(0).mediaBox[1]
W = MyPDF.getPage(0).mediaBox[2]
H = MyPDF.getPage(0).mediaBox[3]
width = ((W * 96) / 72)
height = ((H * 96) / 72)

col = COLUMNS[str(1)]

for i, col in enumerate(COLUMNS):
    col = COLUMNS.get(str(col))

    os.system('pdftotext -x 0 -y 0 -W 0 -H 0 my.pdf my' + str(i+1) + '.txt -layout')

现在heightwidth包含pts中的维度,例如:

print(MyPDF.getPage(0).mediaBox)

提供:

RectangleObject([0, 0, 612, 792])

我正在尝试这样做,这样我就可以以百分比的形式提供列分隔符的位置,例如:

{"1":{"position":"10"}, "2":{"position": "90"}}

现在我被困在这里了。我不知道我是否能用pdftotext -x -y -W -H命令获得我想要的输出。你知道吗

我当时想的是根据百分比来计算页面上的位置。因此,例如,第一个分隔符(10%)将包含从左边到10%的“进入页面”的所有文本。你知道吗

有谁能指导我在这样的计算上正确的方向吗?你知道吗


Tags: columns文件文本区域定义pdfcolrow