いわゆる自炊した文書をスキャンニングしてPDF化した際、その文章フォーマットに関わらず、そのファイルは左綴じの文書として処理されます。見開きで表示すると、左側に奇数ページ、右側に偶数ページの順に配置されます。
日本語のような縦書き文書の場合、右綴じの文書として処理され、見開き表示では右に奇数ページ、左に偶数ページを配置してほしいところです。
単一のファイルを操作する場合、このための設定変更はファイルのプロパティを変更します。Adobe Acrobatの場合でいうと、トップ画像の赤丸の部分を操作することになる。
一度に複数のファイルについて同様の操作を施す場合、何とか効率化したいところです。ここでは次のツールを活用して、対応方法を紹介します。
VB.Net (Visual Studio 2017 Community)
iText 7
長くなるため、次のエントリーに分割して紹介します。
- 調査:PDFファイルの変更箇所
- 操作:変更操作に対応するiText 7のコード
- 実装1:Visual Studio 2017へのiText 7導入
- 実装2:Visual Studio 2017での実装
この投稿では、「操作:変更操作に対応するiText 7のコード」を扱います。
iText 7はJオープンソースのPDF操作ライブラリです。Java、.Netから利用できます。利用可能なAPIは、こちらから参照することができます。
iText 7 7.0.4 API
今回の操作ではPdfDocumentクラスを利用します。iText 5までのPdfStamperクラスに相当します。次のチュートリアルが参考になるでしょう。
developers.itextpdf.com
Directionの操作は、PdfViewerPreferencesクラスを参照します。次のチュートリアルが参考になるでしょう。
developers.itextpdf.com
PdfViewerPreferencesクラスにあるSetDirectionを通じて、Directionへ定数RIGHT_TO_LEFTを代入することになります。
次の手順の操作を想像します。
- 変更元となるPDFファイルを用意する。
- 変更元ファイルのコピーを変更先PDFファイルとする。
- DirectionにR2Lを定義する。
- Directionを変更先PDFファイルへ反映する。
iText 7では、この手順を次のコードで実装することになります。VB.Netでの記述例です。
Dim myReader As New PdfReader(変更元ファイルのパス) Dim myWriter As New PdfWriter(変更先ファイルのパス) Dim myPDF As New PdfDocument(myReader, myWriter) Dim myPreference As New PdfViewerPreferences myPreference.SetDirection(PdfViewerPreferences.PdfViewerPreferencesConstants.RIGHT_TO_LEFT) myPDF.GetCatalog().SetViewerPreferences(myPreference) myPDF.Close() myWriter.Close() myReader.Close()
このコードをメインロジックとして、プログラムを実装します。
impsbl.hatenablog.jp