3

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

提前致谢!

4

1 回答 1

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()
于 2017-05-05T02:29:23.153 回答