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)
提前致谢!
呜……
一方面,我完全不知道为什么会发生这种情况,而且现在没有太多时间调试它。
另一方面,我为您提供了一个解决方法(并且我在 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)
| 归档时间: |
|
| 查看次数: |
1986 次 |
| 最近记录: |