バックグラウンド
SimpleDocTemplate
( )を使用して、ReportLabで共有ドキュメント「テンプレート」[共通のヘッダーとフッター]を設定するコードを書いていますreportlab.platypus.SimpleDocTemplate
。以下のコードスニペットは、またはパラメーターSimpleDocTemplate
build(...)
のいずれかの値としてメソッドに渡される関数です。onFirstPage
onLaterPages
def setup_header_and_footer(canvas, doc):
"""
...edited out...
"""
canvas.line(0 * mm, 174 * mm, 297 * mm, 174 * mm)
logo_filename = settings.STATIC_ROOT + os.sep + "images/huqas_logo.jpg"
canvas.drawImage(logo_filename, 20 * mm, 45 * mm)
canvas.drawRightString(287 * mm, 200 * mm, "<edited out>")
canvas.drawString(20 * mm, 15 * mm, "Generated on %s" % datetime.now().strftime("%A %d %B %Y %I:%M:%S %p"))
canvas.line(0 * mm, 20 * mm, 297 * mm, 20 * mm)
さらに詳しい情報
- ページ/キャンバスはA4横向きの寸法で設定されています
- logo_filenameが有効なパスであり、画像がファイルシステムのその場所に存在することを確認しました
- Reportlabは例外を発生させません
問題
- 行と文字列は正常にレンダリングされますが、結果のPDFに画像が表示されません
私はこの質問を見てきましたが、たとえばを呼び出すとキャンバスが「動作」するcanvas.line(0 * mm, 174 * mm, 297 * mm, 174 * mm)
のに、を呼び出すと失敗する理由がまだわかりませんcanvas.drawImage("file name", 20 * mm, 45 * mm)
。私はまた、ドキュメントを精査して無駄にしました。私は何が欠けていますか?
アップデート
canvas.drawImage(logo_filename, 20 * mm, 45 * mm)
からに変更canvas.drawInlineImage(logo_filename, 20 * mm, 45 * mm)
すると、[他のコード行を変更せずに]問題が「修正」されたように見えます。drawImage
なぜうまくいかなかったのか、私はまだ戸惑っています。