2020/08/26

【Python】img2pdfを使って複数画像をPDFに変換する

前回からだいぶ時間が経ちましたが、目標である「漫画などの固定レイアウトEpubを目次付きPDFに変換するプログラムを作る」を達成するため、今回は前段階として、Pythonで連番を付けた複数画像ファイルをPDFに変換する方法を検討しました。

PythonのPDF関連のライブラリは、多い様で、PyPDF2ReportLabなどを使用した例の記事が多数ヒットしますが、これらのライブラリの更新はしばらく行われていない様です。

img2pdf

最近、img2pdfというライブラリが手軽かつ画像の再変換無しに使えるということで、日本語の紹介記事が多数書かれています。img2pdfでは、pdfの処理にpikepdfpdfrwが用いられている様です。またpikepdfは、Python3.8にも対応するなど積極的に更新されています。

参考リンク


ただ、簡単に変換するという目的以外の細かい設定を解説しているサイトが見つからなかったので、少し細かい設定を試してみました。
画像ファイルは、左からゼロ埋めしたファイル名になったもの(001.png, 002.png, ...)を使用しました。
img2pdfを用いてタイトル、作成者、およびキーワードなどのプロパティを設定したPDFが作成可能です。

また、見開きや表示倍率、フルスクリーン表示などの設定もできます。

img2pdfをコマンドラインから使う際は、見開きなどの設定ができますが、img2pdf(version 0.4.0)のconvert関数を使うと上手くいかず手こずりました。

上記の通り、parse_layout関数を通すなどすると動きました。
恐らくバグだと思いますが誰もこの機能を使っていない為、指摘されていないのかも知れません。

問題点:TwoPageRight、TwoPageLeftに対応していない

ページレイアウトは、現在(img2pdf version 0.4.0)では
single:「単一ページ」に相当
onecolumn:「連続ページ」に相当
twocolumnright:「連続見開きページ(表紙)」に相当
twocolumnleft:「連続見開きページ」に相当
にしか対応していません。

img2pdf.py(「PageLayout」に関する部分)を少し書き換えれば、
TwoPageRight: 「見開きページ(表紙)」に相当
TwoPageLeft: 「見開きページ」に相当
にも対応されることができます。

問題点:R2L (右綴じ)に対応していない


pdfrwは対応している様なので、こちらとの併用が必要になるかと思います。

追記:2022/12/09
pikepdfで右綴じ変換のプログラムを作成されている方がいらっしゃったので、リンクを貼ります。

続き

2020/08/17

【Python】Google People API でGoogle連絡先と住所録CSVを同期する

前々回前回とサラミした記事になってしましましたが、Google People APIを使って住所録のcsvをGoogle連絡先に同期するプログラムが完成したので公開します。
これまで作成したコードを利用していますので、仕様が分からない時は、これまでの記事を参照下さい。

sample.csvについて

Fake Name Generator疑似個人情報データ生成サービスで作成した偽個人情報です。
たまたま実在する人物になっている可能性は低いと思いますが、利用の際はご留意ください。
Google CSV形式に近づけてありますが、微妙に間違っているかもしれません。create_contact_bodyの関数を弄れば、好きなCSV形式に対応できます。

同期方法について

userDefinedに修正日と住所録内のidを設定することで、更新差分を判定しています。

問題点:credentials.jsonの流用

credentials.jsonがQuickstart.pyのものを流用したプログラムとなっているので、アプリケーション名などが正しく設定できていません。今後、設定の仕方が分かれば更新したいと思います。
とりあえず動かす分には現状で問題ないはず...

【関連記事】