スキップしてメイン コンテンツに移動

Python / PDFを右綴じに設定するスクリプトを書きました

2014/10/8頃のことです。

gentoo Linux環境下のlibreoffice writerで日本語縦書きPDFを出力したときのこと。

文書を右綴じに設定していたのですが、出力結果をacroreadで表示してみると、右綴じが効いていません。

探し回ってみたところ、下記のサイト様より情報を得ました。

技術日記@kiwanami 大量のPDFファイルを右綴じに変えたい

出力文書を見てみると、確かにViewerPreferences.DirectionがR2Lになっていません。

どうやら2014/10/8現在、lowriterではこの設定を出力する術はなさそうでしたので、スクリプトで対応することにしました。

前述のサイトではJavaを使用していましたが、個人的に使い慣れているPythonを使用しました。

PythonでPDFをハンドリングする方法ということで、ご覧ください。

さすがにPDFフォーマットをばらすのもの骨ですので、ライブラリを探したところ、

pdfrw

というのが使いやすそうだということになりました。

ただ、python3には未対応なようでpython2環境下でのみ動作確認しました。

次のようなコードになります。


def pdfR2L(a_src, a_dest):
    # --------------------------------------------------------------------------
    from pdfrw import PdfReader, PdfWriter
    from pdfrw.objects import PdfDict, PdfName
    # --------------------------------------------------------------------------
    src = PdfReader(a_src)
    dest = PdfWriter()

    dest.addpages(src.pages)

    dest.trailer = src

    if(dest.trailer.Root.ViewerPreferences):
        dest.trailer.Root.ViewerPreferences = PdfDict(Direction = PdfName.R2L)
    else:
        dest.trailer.Root.ViewerPreferences.Direction = PdfName.R2L

    dest.trailer.Root.PageLayout = PdfName.TwoColumnRight

    dest.write(a_dest)

PdfReader(a_src)の引数、a_srcは、open(...)したファイルハンドルなどread()が定義されているものなら何でも受け入れてくれます。

同様に、PdfWriter().write(a_dest)のa_destはwrite(...)が定義されているものを受け付けます。

これをまとめて、コマンドラインにしたものを、習作としてBitbucketにあげました。ライセンスはThe MIT License (MIT)です。ま、ご自由にどうぞということで。

https://bitbucket.org/hanepjiv/pdfr2l

自分はgitよりも、mercurial hgの方が性に合うのですが(それゆえBitbucketです)、練習ということでgitを使用しています。

Pythonのsetup.pyやら、コマンドライン引数解析のargparseやらも含んでいますが、1ファイルの小さなスクリプトです。ドキュメントは、--helpで表示される機械翻訳したものしかないのですが、動かしていただければわかるかと思います。

コメント

人気の投稿