9

ダイナミック テキストを含む PDF を生成する必要があり、ReportLab を使用しています。テキストは動的なので、PDF の特定の領域に収まるようにサイズを変更する方法はありますか?

4

2 に答える 2

8

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.

それを使用する方法について私が見つけることができた唯一の例は、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
于 2014-01-22T21:29:43.060 に答える
1

はい。ReportLab のマニュアルを参照してください。やりたいことの(短い)説明に基づいて、ページレイアウト内でフレームを使用することを検討する必要があるように思えます(プラティパスを使用していると仮定すると、これを強くお勧めします)。

于 2012-08-18T18:33:46.537 に答える