PythonでPDFを分割・結合しようとしたけど諦めた

なんか今まで分割や結合の用途で使ってたPDF編集ツールが会社のセキュリティの関係で使えなくなってしまったので、カッとなってPythonでやった。今は反省している。

結論から言えば、1時間ぐらいかけて頑張ってみたけども、うまくいかなかった。それだけで終わらせてしまうのはなんかアレなので、試した事ぐらいは遺しておこう。

easy_install pypdf2

まず、pythonでPDFを簡単に扱えるという噂のpypdf2をテキトーにぶっこむ。node.jsにしろpythonにしろ、いまどきはネットさえ繋がってれば、いろんなモジュールを簡単にインストールできていいわねぇ。依存関係も勝手に解決してくれるし。

Google先生を頼りにゴリゴリとコーディングしてみた結果、出来上がったのが下記のソースコードである。

今回はじめてArgumentParser使ってみたけど、sys.argv よりスッキリ書けるので、個人的に今後も使っていこう。引数の順番も気にしなくて良さそうだし、可変引数の指定も楽やね。

python pdf_edit.py -mode div -infile src.pdf -outdir E:\temp

modeを「div」にしたら分割モード。infileで指定したPDFを分解して、00.pdf 01.pdf … みたいな感じでoutdirで指定したフォルダにpdfファイルが出力される。

python pdf_edit.py -mode cat -infile src01.pdf src02.pdf src03.pdf -outdir E:\temp

modeを「cat」にしたら結合モード。infileで指定したPDFを結合して、cat.pdf がoutdirで指定したフォルダに出力される。

…はずだったのだが、読み込んだファイルによっては、下記のようなエラーログを吐いて死ぬ。

Traceback (most recent call last):
File "pdf_edit.py", line 26, in
dest_pdf.write(out)
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 8-9: ordinal not in range(256)

うーん、これはオタッシャ重点。「latin-1」ってなんか見覚えあると思ったら、お仕事でMySQL触ってた頃に、文字化けの原因をよく作ってくれてたアレだなぁ…。なんか文字コード関係は関わったら深淵に堕ちる気がしてきたので、これ以上は深追いせず諦めることにした。ちなみに、WEBページをPDF化したやつだとうまく動いて、WordをPDF化したやつだとエラー吐いてたので、PDFに含まれるフォントの文字コードがあかんかったのだろう。

結局、このあと他のPDF編集ツールを探してなんとかやり過ごした。Adobeさん純正のPDF Readerだと金払わないと編集できないからなー。世知辛いぜ。

One thought on “PythonでPDFを分割・結合しようとしたけど諦めた”

  1. このコードの根本的な解決はできませんでしたが
    pdfに変換→jpegに変換→再びpdfに変換→1つのpdfファイルに結合という順番で解決しました

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)