如何在reportlab中使用Python创建不同页码大小的PDF文档
有没有办法用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的内部工作原理。