ReportLab和pdfrw:导入扫描的PDF

时间:2017-05-04 03:38:15

标签: reportlab pdf-reader pdfrw

使用下面的代码,我尝试将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()

提前致谢!

1 个答案:

答案 0 :(得分:2)

...的sooo

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

另一方面,我有一个解决方法(我试过了 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()