从reportlab版本2.0开始鸭嘴兽有KeepInFrame
。来自CHANGES.txt
:
KeepInFrame:
Sometimes the length of a piece of text you'd like to include in a
fixed piece of page "real estate" is not guaranteed to be constrained to a
fixed maximum length. In these cases, KeepInFrame allows you to specify an
appropriate action to take when the text is too long for the space allocated
for it. In particular, it can shrink the text to fit, mask (truncate)
overflowing text, allow the text to overflow into the rest of the document, or
raise an error.
我能找到的关于如何使用它的唯一示例是在reportlab源代码中tests/
。这是我最终想出的工作示例:
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.pagesizes import letter, landscape
from reportlab.platypus import Paragraph, Frame, KeepInFrame
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import inch
c = Canvas('foo.pdf', pagesize=landscape(letter))
frame1 = Frame(0.25*inch, 0.25*inch, 4*inch, 4*inch, showBoundary=1)
styles = getSampleStyleSheet()
s = "foo bar " * 1000
story = [Paragraph(s, styles['Normal'])]
story_inframe = KeepInFrame(4*inch, 8*inch, story)
frame1.addFromList([story_inframe], c)
c.save()
以及版本字符串的完整性:
>python -c "import reportlab;print reportlab.Version"
2.7