これなに
Python を使って、無料で PDF を編集する方法 を紹介します。
サンプルとして、各ページにページ番号を追加してみます。
インストール
下記を使用します。
- ReportLab: Python用、PDF生成ライブラリ。有料版と無料版がある。
- PyPDF2: Page単位のPDF編集ライブラリ。
- PdfFormFiller: PDFにテキストを挿入するライブラリ。
インストール
conda install -y reportlab
pip install PyPDF2 pdfformfiller
Anaconda を使っていない場合は、conda の代わりに pip を使ってください。
ページ番号を追加するサンプル
日本語フォントとして、IPAexGothic フォントを使っていますが、別のフォントでも構いません。
(Ubuntu では、apt-get install fonts-ipaexfont でインストールできます)
注意点として、用紙サイズを表す PyPDF2.pdf.PageObject.mediaBox の要素である FloatObject が Decimalを返すため、実数との加減演算でエラーになります。ここでは、無理やり、FloatObject が実数と加減演算できるように置き換えています。
addPage(入力ファイル, 出力ファイル) とすると、元のPDFに、ページ番号を追加したPDFを作成できます。
python
import PyPDF2
class FloatObject(PyPDF2.generic.FloatObject):
def __add__(self, other):
return self.as_numeric() + other
def __radd__(self, other):
return self.as_numeric() + other
def __sub__(self, other):
return self.as_numeric() - other
def __rsub__(self, other):
return -self.as_numeric() + other
PyPDF2.generic.FloatObject = FloatObject
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_CENTER
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from pdfformfiller import PdfFormFiller
def addPage(infile, outfile):
# Linuxでは、'/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf'など
pdfmetrics.registerFont(TTFont('IPAexGothic', 'c:/Windows/Fonts/ipaexg.ttf'))
sty = ParagraphStyle('sty', alignment=TA_CENTER, fontName='IPAexGothic', fontSize=9)
ff = PdfFormFiller(infile)
for i in range(ff.pdf.getNumPages()):
p = ff.pdf.getPage(i)
ff.add_text('ページ %d'%(i+1), i, (0,p.mediaBox[3]-30), p.mediaBox.getUpperRight(), sty)
ff.write(outfile)
- Windows, Ubuntu, Alpine-Linux で稼働確認しています。
追記
パッケージ化しました。
以上