ReportLab 和 pdfrw:导入扫描的 PDF

Dan*_*rty 3 reportlab pdf-reader pdfrw

使用下面的代码,我试图将 pdf 页面导入现有的画布对象并保存为 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()
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Pat*_*pin 5

呜……

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

另一方面,我为您提供了一个解决方法(并且我在 v0.3 以及当前的 github master 上尝试了该解决方法,并且在这两种情况下都对我有用)。

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

有趣的是,整个带水印的页面,包括您的图像都通过了。所以我修改了你的代码来做水印所做的最少的事情,当它传递给reportlab时,它最终将一个表单XObject放在一个表单XObject中。那奏效了。

这是我用于此的代码的稍微修改版本。

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()
Run Code Online (Sandbox Code Playgroud)