Python Dockerイメージ環境でapt 설치 wkhtml2pdfの問題解決

背景と課題

PDFファイル生成の必要性から、まずreportlabを採用しました。しかし、reportlabではPDF内容を1行ずつ描画する必要があり、テーブルの高さと幅の自動調整ができません。その結果、テーブル内容がはみ出してしまい、読体验很差。最终的にpdfkitを採用し、wkhtml2pdf依赖してHTMLファイルをPDFに変換することにしました。

1. wkhtmltopdfバイナリファイルのダウンロード

ダウンロードURL: https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

2. 解凍と環境変数の設定

Dockerfile内でのコマンド例を示します。别的スクリプトの場合はに応じて修改してください。

FROM python:3.6
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY . /app
RUN tar vxf /app/static/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz && cp /app/wkhtmltox/bin/wk* /usr/local/bin/

3. 日本語フォントのサポート

Dockerイメージでは、デスクトップOSと異なり、標準で日本語フォントがサポートされていません。PDF生成時に日本語を含める場合、フォントのインストールが必要です。

  • デスクトップOSがある場合、wkhtml2pdfは現在のOSのデフォルトフォントを使用します
  • デスクトップがない環境では、宋体(SimSun)のみがサポートされるようです
  • Windowsシステムからフォントファイルをコピーするか、网络からダウンロードしてください
  • フォントキャッシュの生成には、以下の手順を実行します
FROM python:3.6
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY . /app
RUN cp /app/static/宋体.ttc /usr/share/fonts/truetype/dejavu && fc-cache -fv

4. pdfkitを使用したHTMLからPDFへの変換

必要なライブラリをインストールします:

pip install pdfkit

変換の使用例:

# HTMLファイルからPDFへの変換
import pdfkit
pdfkit.from_file('test.html', 'test.pdf')
# 文字列からPDFへの変換
import pdfkit
pdfkit.from_string('テスト文字列', 'test.pdf')

Djangoでの使用例:

# ビュー関数での使用
import pdfkit
from django.shortcuts import render

def generate_pdf(request):
    context = {'key': 'value'}
    rendered = render(request, 'template.html', context)
    pdfkit.from_string(rendered.content.decode('utf8'), 'output.pdf')
# テンプレートローダーを使用する場合
import pdfkit
from django.template import loader

def create_pdf():
    template = loader.get_template('template.html')
    rendered_html = template.render({'key': 'value'})
    pdfkit.from_string(rendered_html, 'output.pdf')

以上の手順で、Python Docker環境에서도wkhtml2pdfを使用してHTMLからPDFへの変換が可能になります。

タグ: Python Docker wkhtmltopdf pdfkit pdf

5月14日 10:51 投稿