Python PyPDF2 合并页面
我有一个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]
来获取这个值。