はじめに
PDFファイルに色々追記するプログラムを作っていた時の話です。
いくつかの手持ちのPDFに文字やら何やらを追記していたところ、一部のPDFに期待の角度から90°、270°回転して文字が書き込まれていました。さらに詳しく調べると、どうやら通常は左下にある始点(プログラムによって異なる)の位置がPDFによってはずれてしまっていることが分かりました。
AdobeのPDF readerやMacOSX のプレビューアプリでメタデータを覗いたが分からず、"PDFの仕様は難しいので各種アプリが仕様通りに実装されていない場合もある"とブログに書く人もいるので、何を信じて良いかが分からなくなりました。結局、PDFをエディタで開いてみて、原因を見つけることができたので備忘録として残します。
結論: Page object に /Rotate が設定されている。
問題のPDFのページにはRotateが設定されていました。
<< /Type /Page /Parent <省略> /Resources <省略> /Contents <省略> /MediaBox [0 0 842.04 595.44]
/Rotate 270 >>
pypdf の transfer_rotation_to_content 関数(Apply the rotation of the page to the content and the media/crop/… boxes.) を実行することで、始点をページの左下に設定し直すことができました。
ちなみに、複合機が作成したPDFにRotateが設定されていることが多かったです。
以上です。