Python PyPDF2 合并页面

1 投票
2 回答
1880 浏览
提问于 2025-04-18 12:09

我有一个PDF文件,里面有一个很大的表格,但是这个表格被分成了好几页。所以我需要把每一页的表格合并成一个大的表格,放在一页上。

请问用PyPDF2或者其他库可以做到吗?

谢谢!

2 个回答

0

我理解这个问题比较复杂。可以参考这里这里

问题在于,PDF中的表格并不是很好表示,它们实际上是由绝对定位的线条组成的(可以查看上面的第一个链接)。

这里有两个可能的解决办法(不确定是否适合你):

  • 你可以把多页内容打印在一页上,并缩放页面以便于阅读……
  • 用Inkscape或类似的软件打开PDF。一旦解散组合,你就可以访问构成表格的各个元素,并按照你需要的方式将它们组合起来。

补充说明

可以看看LibreOffice Draw,这是另一个矢量图形软件。我刚刚在里面打开了一个PDF,似乎能保留一些PDF的结构,并且可以编辑各个元素。

补充说明 2

可以看看pdftables,这可能会有帮助。

PDFTables可以帮助从PDF文件中提取表格。

不过我还没试过……可能稍后有时间看看能否让它工作。

2

我正在做一个类似的项目,它可以处理输入的PDF文件,并通过一个配置文件来设置每一页的最终排版。

我使用了PyPDF2这个库,但它在处理某些PDF文件时还是有一些问题(我还需要进一步研究)。你可以在这里找到相关的代码:https://github.com/Lageos/pdf-stitcher

基本上,把一页添加到另一页旁边的操作是这样的:

import PyPDF2

with open('input.pdf', 'rb') as input_file:
    # load input pdf
    input_pdf = PyPDF2.PdfFileReader(input_file)

    # start new PyPDF2 PageObject
    output_pdf = input_pdf.getPage(page_number)

    # get second page PyPDF2 PageObject
    second_pdf = input_pdf.getPage(second_page_number)

    # dimensions for offset from loaded page (adding it to the right)
    offset_x = output_pdf.mediaBox[2]
    offset_y = 0

    # add second page to first one
    output_pdf.mergeTranslatedPage(second_pdf, offset_x, offset_y, expand=True)

    # write finished pdf
    with open('output.pdf', 'wb') as out_file:
            write_pdf = PyPDF2.PdfFileWriter()
            write_pdf.addPage(output_pdf)
            write_pdf.write(out_file)

如果想把一页添加到另一页的下面,就需要一个叫做offset_y的参数。你可以通过offset_y = first_pdf.mediaBox[3]来获取这个值。

撰写回答