Pythonでjavascriptが埋め込まれたPDFファイルを作成する実験
pythonでPDFを扱うにはreportlabが必要になるので
それをpythonからpipコマンドでインストールする。
pip install reportlab
普通にPDFに文字や画像を貼り付けたり、
四角とか書いたり出来ます。
仕組み的には他の言語で絵を書く場合とほぼ同じです。
キャンバスを作る
from reportlab.pdfgen import canvas
canvas = canvas.Canvas('./new5.pdf')
PDFの属性を指定
canvas.setAuthor('みは')
canvas.setTitle('PythonによるPDF生成のサンプル')
canvas.setSubject('PG1')
線の色と塗りつぶしの色指定
canvas.setStrokeColorRGB(0, 0, 100) #線の色
canvas.setFillColorRGB(100, 0, 0) #塗りつぶしの色
四角を描く
canvas.rect(0*cm, 0*cm, 2*cm, 3*cm, stroke=1, fill=1)
canvas.rect(2*cm, 3*cm, 4*cm, 6*cm, stroke=1, fill=0)
canvas.rect(4*cm, 6*cm, 6*cm, 9*cm, stroke=0, fill=1)
線の太さ
canvas.setLineWidth(2)
線を描く
canvas.line(10*cm, 15*cm, 21*cm, 15*cm)
canvas.line(10*cm, 16*cm, 21*cm, 16*cm)
canvas.line(10*cm, 17*cm, 21*cm, 17*cm)
フォントの指定
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5'))
canvas.setFont('HeiseiKakuGo-W5', 12)
文字を描く
canvas.drawString(10*cm, 15*cm, '久しぶりの休みだー12')
画像を描く GIFファイル
image =Image.open('74HC74.gif')
canvas.drawInlineImage(image,0,15*cm)
PDFファイルを保存
canvas.save()
という感じです。
次にjavascriptを埋め込むんですが以下の感じです。
URLを指定してブラウザを開く
pdfdoc.PDFCatalog.OpenAction = '<>'
印刷
pdfdoc.PDFCatalog.OpenAction = '<>'
alertを表示する
pdfdoc.PDFCatalog.OpenAction = '<>'
alertを2回表示する
pdfdoc.PDFCatalog.OpenAction = '<>'
今回の実行結果
今回のソース
# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.lib.units import cm
from reportlab.pdfbase import pdfdoc
from PIL import Image
canvas = canvas.Canvas('./new5.pdf')
canvas.saveState()
canvas.setAuthor('みは')
canvas.setTitle('PythonによるPDF生成のサンプル')
canvas.setSubject('PG1')
canvas.setPageSize((21.0*cm, 29.7*cm)) # A4
# canvas.setPageSize((18.2*cm, 25.7*cm)) # A5
#
#座標の指定は左下が0
#
canvas.setStrokeColorRGB(0, 0, 100) #線の色
canvas.setFillColorRGB(100, 0, 0) #塗りつぶしの色
#開始X,開始Y,幅,高さ,枠線有無,塗りつぶし有無
canvas.rect(0*cm, 0*cm, 2*cm, 3*cm, stroke=1, fill=1)
canvas.rect(2*cm, 3*cm, 4*cm, 6*cm, stroke=1, fill=0)
canvas.rect(4*cm, 6*cm, 6*cm, 9*cm, stroke=0, fill=1)
canvas.setFillColorRGB(0, 100, 0)
canvas.setLineWidth(2)
canvas.line(10*cm, 15*cm, 21*cm, 15*cm)
canvas.line(10*cm, 16*cm, 21*cm, 16*cm)
canvas.line(10*cm, 17*cm, 21*cm, 17*cm)
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5'))
canvas.setFillColorRGB(100, 0, 0)
canvas.setFont('HeiseiKakuGo-W5', 12)
canvas.drawString(10*cm, 15*cm, '久しぶりの休みだー12')
canvas.setFillColorRGB(100, 100, 0)
canvas.setFont('HeiseiKakuGo-W5', 24)
canvas.drawString(10*cm, 16*cm, '久しぶりの休みだー24')
canvas.setFillColorRGB(100, 0, 100)
canvas.setFont('HeiseiKakuGo-W5', 48)
canvas.drawString(10*cm, 17*cm, '久しぶりの休みだー48')
image =Image.open('74HC74.gif')
canvas.drawInlineImage(image,0,15*cm)
#印刷するアクション
#pdfdoc.PDFCatalog.OpenAction = '<>'
#ページ表示のアクション
pdfdoc.PDFCatalog.OpenAction = '<>'
#alert
#pdfdoc.PDFCatalog.OpenAction = '<>'
#alert x 2
#pdfdoc.PDFCatalog.OpenAction = '<>'
canvas.restoreState()
canvas.save()