如何在reportlab中使用Python创建不同页码大小的PDF文档

16 投票
2 回答
20558 浏览
提问于 2025-04-16 16:58

有没有办法用reportlab创建一个页面大小不一样的PDF文档?

我想做一个文档,第一页的大小和后面的页面不一样。有人能帮忙吗?

2 个回答

2

我的需求是想在PDF里创建一个很大的表格。因为表格太大了,所以在两边都被裁剪掉了。这是如何创建一个自定义大小的PDF的方法。我使用的是reportlab里的platypus。

from reportlab.platypus import  SimpleDocTemplate
from reportlab.lib.units import mm, inch

pagesize = (20 * inch, 10 * inch)  # 20 inch width and 10 inch height.
doc = SimpleDocTemplate('sample.pdf', pagesize=pagesize)
data =    [['sarath', 'indiana', 'usa'],
                            ['jose', 'indiana', 'shhs']]
table = Table(data)
elems = []
elems.append(table)
doc.build(elems)

这种方法的一个缺点是所有页面的大小都是一样的。不过对于想要创建所有页面大小相同的自定义PDF的人来说,这个方法还是很有帮助的。

21

是的,这个是可以做到的,因为PDF支持这种功能,关键在于如何在ReportLab中实现它。我自己没有做过,但下面的代码应该可以工作:

c = reportlab.pdfgen.canvas.Canvas("test.pdf")
# draw some stuff on c
c.showPage()
c.setPageSize((700, 500)) #some page size, given as a tuple in points
# draw some more stuff on c
c.showPage()
c.save()

这样,你的文档现在应该有两页,一页是默认大小,另一页是700点乘500点的大小。

如果你使用的是PLATYPUS,你也应该能做到类似的事情,不过可能需要在BaseDocTemplate的子类中进行一些复杂的操作来处理页面大小的变化。因为我觉得PageTemplate的机制本身并不支持这个功能,因为每个PageTemplate主要是用来改变每页上框架的布局。不过从技术上讲,这是可行的,只是没有详细的文档,你可能需要花一些时间去阅读和理解PLATYPUS的内部工作原理。

撰写回答