【发布时间】:2020-04-09 09:16:11
【问题描述】:
我有一个 Python 程序,可以使用 ReportLab 生成 PDF 文件,我想生成另一个 PDF,该 PDF 的格式为将每一页切成两半,然后折叠并装订成一本小册子。
例如,如果我当前的文档包含页面 A、B、C、D、E、F、G 和 H,我希望新文档有两个可以双面打印的页面,如下所示:
BG|HA
DE|FC
我已经看到这个订单被称为 4-up 或 imposition。
我的打印机可以选择在每张纸上打印四页,但它不会重新排列页面。如果我使用该设置和双面打印当前文档,结果如下:
AB|EF
CD|GH
我的第一个偏好是生成一个每张纸有四页的 PDF,如图所示。如果我无法弄清楚,下一个最好的办法是生成一个带有重新排序页面的 PDF,以便我的打印机可以在每张纸上打印四页。换句话说,将页面重新排序为 B、G、D、E、H、A、F 和 C。
这是一个打印八页的代码示例:
from subprocess import call
from reportlab.lib import pagesizes
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import inch
from reportlab.platypus import SimpleDocTemplate, Paragraph
def main():
pdf_path = 'booklet.pdf'
doc = SimpleDocTemplate(pdf_path,
pagesize=pagesizes.letter,
topMargin=0.625*inch,
bottomMargin=0.625*inch)
styles = getSampleStyleSheet()
paragraph_style = styles['Normal']
print(paragraph_style.fontSize, paragraph_style.leading)
paragraph_style.fontSize = 300
paragraph_style.leading = 360
story = []
for text in 'ABCDEFGH':
flowable = Paragraph(text, paragraph_style)
story.append(flowable)
doc.build(story)
# call(["evince", pdf_path]) # launch PDF viewer
main()
【问题讨论】:
标签: python reportlab page-layout