ReportLabで既存のPDFに文字を上書きする


press
ReportLabで既存のPDFに文字を上書きする

テンプレート用の既存PDFの上から文字を上書きしてダウンロードする方法です。

attachmentをつけるとリンクを押したら即ダウンロードが始まります。

from io import BytesIO
from reportlab.pdfgen import canvas
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.pdfbase import pdfmetrics
from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.lib.pagesizes import A4
from reportlab.lib.colors import pink, black, red, blue, green

def sampleSheet(request):
    packet = BytesIO()
    can = canvas.Canvas(packet, pagesize=A4) # A4のPDFを生成
    fontname = "HeiseiMin-W3" # フォントを指定
    pdfmetrics.registerFont (UnicodeCIDFont (fontname_g))
    can.setFont(fontname_g,11) # フォントサイズを指定
    can.setFillColor(green) # 文字の色を指定

    can.drawString(300, 300, "Hello world")

    can.save()

    packet.seek(0)
    new_pdf = PdfFileReader(packet)
    existing_pdf = PdfFileReader(open("sample.pdf", "rb")) # 既存のPDFを指定
    output = PdfFileWriter()
    page = existing_pdf.getPage(0)
    page.mergePage(new_pdf.getPage(0))
    output.addPage(page)

    # attachmentをつけると即ダウンロードが始まる
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"'
    output.write(response)
    packet.close()

    return response

株式会社ファントムへのお問い合わせ

群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。




    Show Comments (0)

    Comments

    Related Articles

    Django

    Djangoの国際化(i18n)で多言語化(後半)

    Djangoの国際化(i18n)で多言語化(後半) 前回からの続きです。 コードはGitHubリポジトリにあげています。 上記コードを実行すると、locale/en/LC_MESSAGES/django.poが生成されま […]

    Posted on by press
    Django

    PyCharmでPostgreSQLをGUIから操作する設定

    PyCharmでPostgreSQLをGUIから操作する設定 PyCharmでDjangoのPostgreSQLをGUIで操作するための設定方法です。Djangoには管理サイトが用意されていますが、プログラムの実行中にデ […]

    Posted on by press