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