7

私はdjangoビュー内でreportlabを使用してpdfを書いています。それらは非常に単純で、ヘッダー、コンテンツ、フッターです。

私はSimpleDocTemplateを使用していますが、これは非常によく合います。コンテンツにテーブルを描画するために、フッターとヘッダーは以下を使用して描画されます:

build([data], onFirstPage=drawPageFrame, onLaterPages=drawPageFrame).

私の質問は、Canvas.drawImage(...) を使用するように画像を描画するにはどうすればよいですか? 「フローティング」画像が必要です...テキストの上に配置したい場所に配置します.SimpleDocTemplateでは、これを行うためのCanvasオブジェクトがありません。

検索するとこんなのが見つかりました:

カモノハシのレイアウトは、フロー可能なものを使用します。パッカーは、通常、フロー可能オブジェクトがラップ、分割、または描画されるとき、つまり、wrap、split、draw メソッドの周りに canv 属性を設定します。これらのメソッド内では、self の canv 属性を使用してキャンバスにアクセスできます。

これはどのように使用できますか?

うーん、さらにテストするもの:

flowables.Macro
flowables.CallerMacro
# -*- コーディング: utf-8 -*-
reportlab.lib.pagesizes からインポート A4、横向き、縦向き
reportlab.lib.styles から getSampleStyleSheet をインポート
reportlab.platypus から import Table、Flowable、SimpleDocTemplate、Paragraph、Spacer、Image
reportlab.libからランダムテキストをインポート
reportlab インポート カモノハシから

インポートOS、ランダム

スタイル = getSampleStyleSheet()
パス = os.path.realpath(os.path.dirname(__file__))

def drawPageFrame (キャンバス、ドキュメント):
    canvas.saveState()
    canvas.drawImage(パス+"/ujiPDF.jpg",50,50,57,57)
    canvas.restoreState()

doc = SimpleDocTemplate("salida.pdf",pagesize=A4)

エレメント = []

com = 'canvas.drawImage("'+パス+'/ujiPDF.jpg",100,100,57,57)'
プリントコム
elementos.append(platypus.flowables.Macro('canvas.saveState()'))
print platypus.flowables.Macro(com)
elementos.append(platypus.flowables.Macro(com))
elementos.append(platypus.flowables.Macro('canvas.restoreState()'))

para = Paragraph(randomtext.randomText(randomtext.PYTHON,20), styles["Normal"])
elementos.append(パラ)

doc.build(elementos,onFirstPage=drawPageFrame, onLaterPages=drawPageFrame)

これはマクロ アプローチです...クリーンな終了ですが、2 番目のイメージはありません。

4

3 に答える 3

6

カモノハシには Image クラスがあります。使用するだけfrom reportlab.platypus import Image で、このクラスにアクセスできます。内部の他のクラスと同様に機能smth.append(Image(filename))し、pdf に組み込む必要があるオブジェクトに画像を追加します。タイラー・レスマンの個人ウェブサイトで設立

于 2012-12-25T10:29:21.717 に答える
3

最善のオプションは、SimpleDocTemplateまたはBaseDocTemplateのサブクラスを作成することです。buildメソッドでは、キャンバスにアクセスできます。SimpleDocTemplateが行うすべてのことを利用したい場合は、から直接コピーしてみてくださいsite-packages/reportlab/platypus/doctemplate.py

于 2011-03-19T15:14:14.920 に答える