大量のPDFファイルを右綴じに変えたい
最近、スキャン対象が縦書きの本に突入してきた。右綴じにする方法がすごく大変。いちいちAcrobatのプロパティで変えるのはちょっと無理。
そこで、「pdf 綴じ方 変更」や「pdf 右綴じ scansnap」で探してみたが、定番のツールがあまりない。いくつかフリーソフトやシェアウエアが見つかったがどれも怪しい。
結合にはUbuntu上で pdftk を使ったが、これにも右綴じにする方法はない。
いやいや、実はそんな大したことではないはずだろうと思ってPDFの仕様書を見てみる。
CatalogのViewerPreferencesにDirectionでR2Lを指定すればいいらしい。
いろいろ試した結果、iTextを使う方が楽そうだったのでJavaで。R2Lにするのは実質3行。
import java.io.File; import java.io.FileOutputStream; import com.itextpdf.text.pdf.*; public class MainApp { public static final void main(final String[] args) { if (args == null || args.length == 0) { System.out.println("Usage > java -jar pdfr2l.jar (files)..."); } else { for (String i : args) { try { System.out.print("Prcessing : "+i); doIt(i); System.out.println(" OK"); } catch (Exception e) { e.printStackTrace(); } } } } private static final String tmpFilename = "_tmp.pdf"; private static void doIt(String file) throws Exception { File orgFile = new File(file); File tmpFile = new File(tmpFilename); //右綴じのコード PdfStamper st = new PdfStamper(new PdfReader(file),new FileOutputStream(tmpFile)); st.addViewerPreference(PdfName.DIRECTION, PdfName.R2L); st.close(); //ここまで if (!tmpFile.exists()) { throw new RuntimeException("Can not generate a PDF : "+file); } if (!orgFile.delete()) { throw new RuntimeException("Can not delete the original PDF file : "+file); } if (!tmpFile.renameTo(orgFile)) { throw new RuntimeException("Can not rename the generated PDF file : "+file+" <- "+tmpFilename); } } }
iTextのjarと一緒にコンパイルしてjarにして使ってる。pdftkみたいにgcjでバイナリにするともっと使いやすそう。
既存のPDFに何かちょっとした変更を加えるのは PdfStamper を使うよう。Stampだけでなくて、ページを追加したり結構いろいろ出来る。
PDFやるのならiTextで決まりなんだけど、歴史が長い分ちょっとドキュメントが古いところがある。