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()