自炊した画像データが入ったPDFを、以下のようにしたいことがあると思います。
- ビューアで開いた時に、見開き表示にする
- その際、表紙だけは独立したページで表示する
- またその際、右綴じとして表示する
Acrobatで開いて「プロパティ」から操作しても良いのですが、数が多いと面倒くさいですし、自動化したい需要もあると思います。そんな時に、自動化する方法を以下に示します。
方法
perlと「PDF::API2」モジュールを使います。
use PDF::API2; use PDF::API2::Basic::PDF::Utils; $filename = $ARGV[0]; $newfilename = $ARGV[1]; $pdf = PDF::API2->open($filename); $newpdf = PDF::API2->new(-file => $newfilename); $newpdf->preferences(-righttoleft => 1); $newpdf->{'catalog'}->{'PageLayout'} = PDFName('TwoPageRight'); $pagenumber = $pdf->pages; for ($i=1; $i<=$pagenumber; $i++) { $newpdf->importpage($pdf, $i); } $newpdf->update;
10行目で、閉じ方向を右綴じにします。
12行目で、Acrobatでいうところの「ページレイアウト」を「見開きページ(表紙)」に設定します。
PDFの仕様
「右綴じ」にするには、CatalogのViewerPreferencesにDirectionとしてR2Lを指定します。(PDF 1.2以上)
ページレイアウトを「見開きページ(表紙)」にするには、CatalogにTwoPageRightを指定します。(PDF 1.5以上)
PageLayoutと綴じ方向の関係は、以下のようになります。
- TwoColumnLeft: 「連続見開きページ」に相当。左綴じでは「12」「34」という表示。右綴じでは「21」「43」という表示。
- TwoColumnRight: 「連続見開きページ(表紙)」に相当。左綴じでは「1」「23」「45」という表示。右綴じでは「1」「32」「54」という表示。
- TwoPageLeft: 「見開きページ」に相当。TwoColumnLeftと同じ表示で、連続表示しない(1画面では1見開きのみ表示する)。
- TwoPageRight: 「見開きページ(表紙)」に相当。TwoColumnRightと同じ表示で、連続表示しない。
PDF::API2の使い方
R2Lを指定するには、preferencesに「-righttoleft=>1」を指定します(10行目)。ドキュメントには書いていませんが、ソースでは実装されています。
TwoPageLeft, TwoPageRightを指定する機能はありません。ので、PDF::API2のソースを見て、TwoColumnLeftの指定方法をまねて、同じ方法で指定します(12行目)。