私は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 番目のイメージはありません。