ReportLab 和 pdfrw:导入扫描的 PDF

ReportLab and pdfrw: Importing Scanned PDF

使用下面的代码,我试图将 pdf 页面导入现有的 canvas 对象并保存为 PDF。这通常工作得很好,但我注意到当我尝试使用从扫描文档生成的 PDF 时,它会生成空白页。有接盘者吗?

from reportlab.pdfgen import canvas
from pdfrw import PdfReader
from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl

c = canvas.Canvas(Out_Folder+pdf_file_name)
c.setPageSize([11*inch, 8.5*inch])

page = PdfReader(folder+'2_VisionMissionValues.pdf',decompress=False).pages
p = pagexobj(page[0])
c.setPageSize([11*inch, 8.5*inch]) #Set page size (for landscape)
c.doForm(makerl(c, p))
c.showPage()
c.save()

提前致谢!

太...

一方面,我完全不知道为什么会这样,而且 现在没有太多时间调试它。

另一方面,我有一个解决方法(我尝试了 v0.3 以及当前 github master 上的解决方法,它 在这两种情况下对我都有效。

我首先验证了您的代码在您的页面上失败了,并且 它适用于另一个 PDF。然后我问自己“如果我使用会发生什么 我的水印示例创建一个带有您的页面作为水印的 PDF?” (因为它使用了一些相同形式的 XObject 代码)。那行得通, 所以然后我问自己“如果我通过我的 通过您的 reportlab 代码添加水印页面?

有趣的是,整个水印页面,包括您制作的图像 它通过。所以我修改了你的代码来做最少的事情 水印确实如此,最终将表单 XObject 放入表单中 XObject 传递给 reportlab 时。成功了。

这是我为此使用的您的代码的略微修改版本。

import sys

from reportlab.pdfgen import canvas
from pdfrw import PdfReader, PageMerge
from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl

inch = 72

fname, = sys.argv[1:]
page = PdfReader(fname,decompress=False).pages[0]
p = pagexobj(PageMerge().add(page).render())

c = canvas.Canvas('outstuff.pdf')
c.setPageSize([8.5*inch, 11.0*inch]) #Set page size (for portrait)
c.doForm(makerl(c, p))
c.showPage()
c.save()