PythonのPDFライブラリ「ReportLab」の使い方(用紙サイズ、向き、文字出力、改ページ)

Pythonで使えるPDFライブラリ「ReportLab」をUbuntuで使えるようになりました。
Ubuntu 11.04 + Python + ReportLabで日本語を含むPDFファイルを生成する

すぐ忘れる脳のため、使い方を調べた内容をメモしておきます。



基本的な形




# -*- coding:utf-8 -*-
import os, sys

#zipアーカイブからファイルを読み込むため。通常は必要ないはず。
sys.path.insert(0, 'reportlab.zip')

from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

fontname = "IPA Gothic"

#フォントファイルを指定して、フォントを登録
pdfmetrics.registerFont(TTFont(fontname, './reportlab.zip/reportlab/fonts/ipag.ttf'))
c = canvas.Canvas("hello.pdf")
c.setFont(fontname, 10)
c.drawString(100, 675, u"日本語でこんにちは!")
c.showPage()
c.save()

print "ok."




生成されるPDF

17_001_20110505112939.png





用紙サイズの指定



デフォルトでは、A4縦になります。
用紙サイズを指定するには、reportlab.lib.pagesizesで定義されている用紙サイズを
Canvas作成時に指定します。

定義済みの用紙サイズは以下のとおり。


A6
A5
A4
A3
A2
A1
A0

B6
B5
B4
B3
B2
B1
B0

LETTER
LEGAL
ELEVENSEVENTEEN






用紙サイズにA0を指定してみました。


# -*- coding:utf-8 -*-
import os, sys

#zipアーカイブからファイルを読み込むため。通常は必要ないはず。
sys.path.insert(0, 'reportlab.zip')

from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A0

fontname = "IPA Gothic"

#フォントファイルを指定して、フォントを登録
pdfmetrics.registerFont(TTFont(fontname, './reportlab.zip/reportlab/fonts/ipag.ttf'))

#用紙サイズにA0を指定
c = canvas.Canvas("hello.pdf", pagesize=A0)
c.setFont(fontname, 10)
c.drawString(100, 675, u"日本語でこんにちは!")
c.showPage()
c.save()

print "ok."




ちょっと分かりにくいですが、用紙が大きくなっていることが確認できました。

17_002_20110505112938.png






用紙向きの指定



用紙の向きを変更するには、reportlab.lib.pagesizesにあるlandscapeとportraitを使います。


landscape:横向き
portrait:縦向き




A4横でPDFを作成するサンプルはこんな感じになります。


# -*- coding:utf-8 -*-
import os, sys

#zipアーカイブからファイルを読み込むため。通常は必要ないはず。
sys.path.insert(0, 'reportlab.zip')

from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A4, landscape, portrait

fontname = "IPA Gothic"

#フォントファイルを指定して、フォントを登録
pdfmetrics.registerFont(TTFont(fontname, './reportlab.zip/reportlab/fonts/ipag.ttf'))
c = canvas.Canvas("hello.pdf", pagesize=landscape(A4))
c.setFont(fontname, 10)
c.drawString(100, 375, u"日本語でこんにちは!")
c.showPage()
c.save()

print "ok."




出力されたPDFは以下のとおり。

17_003.png





文字の出力



Canvasに対して、drawStringを実行します。
座標の意味ですが・・・


c.drawString(0, 0, u"日本語でこんにちは!")



17_004.png




c.drawString(100, 0, u"日本語でこんにちは!")



17_005.png




c.drawString(0, 100, u"日本語でこんにちは!")



17_006.png



用紙左下を原点として、第一引数がX(横)、第二引数がY(縦)の指定となります。


用紙の左上を原点としたい場合には、Canvas作成時、bottomup=Falseを指定します。
まず、bottomup=True(デフォルト)の場合


# -*- coding:utf-8 -*-
import os, sys

#zipアーカイブからファイルを読み込むため。通常は必要ないはず。
sys.path.insert(0, 'reportlab.zip')

from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A4, landscape, portrait

fontname = "IPA Gothic"

#フォントファイルを指定して、フォントを登録
pdfmetrics.registerFont(TTFont(fontname, './reportlab.zip/reportlab/fonts/ipag.ttf'))
c = canvas.Canvas("hello.pdf", bottomup=True)
c.setFont(fontname, 10)
c.drawString(100, 100, u"日本語でこんにちは!")
c.showPage()
c.save()

print "ok."




左下が原点です。
17_007.png


次に、bottomup=Falseを指定してみます。


# -*- coding:utf-8 -*-
import os, sys

#zipアーカイブからファイルを読み込むため。通常は必要ないはず。
sys.path.insert(0, 'reportlab.zip')

from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A4, landscape, portrait

fontname = "IPA Gothic"

#フォントファイルを指定して、フォントを登録
pdfmetrics.registerFont(TTFont(fontname, './reportlab.zip/reportlab/fonts/ipag.ttf'))
c = canvas.Canvas("hello.pdf", bottomup=False)
c.setFont(fontname, 10)
c.drawString(100, 100, u"日本語でこんにちは!")
c.showPage()
c.save()

print "ok."




左上が原点になりました。
17_008.png





改ページ



showPageで、それまでにCanvasに対して行った操作を確定し、ページ作成。
saveでPDFファイルの実体を作成となります。

簡単な改ページのサンプルはこんな感じ。


# -*- coding:utf-8 -*-
import os, sys

#zipアーカイブからファイルを読み込むため。通常は必要ないはず。
sys.path.insert(0, 'reportlab.zip')

from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A4, landscape, portrait

fontname = "IPA Gothic"

#フォントファイルを指定して、フォントを登録
pdfmetrics.registerFont(TTFont(fontname, './reportlab.zip/reportlab/fonts/ipag.ttf'))
c = canvas.Canvas("hello.pdf")

#1ページ目開始
c.setFont(fontname, 10)
c.drawString(100, 700, u"1ページ")
#1ページ目を確定
c.showPage()

#2ページ目開始
c.setFont(fontname, 10)
c.drawString(100, 700, u"2ページ")
#2ページ目を確定
c.showPage()

#pdfファイル生成
c.save()

print "ok."




実行してみると、ちゃんと改ページされています。

17_009.png

17_010.png



2ページ目を開始するとき、

#2ページ目開始
c.setFont(fontname, 10)


としてフォントを再指定していますが、これを行わないと、

17_011.png

2ページ目だけ、文字化けしてしまいます。
showPageを実行した後、フォントを再指定する必要があるようです。



関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ