カテゴリー
PC

PDFの「右綴じ、見開きページ(表紙)」を自動化する

自炊した画像データが入った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行目)。

参考文献