1.2.7 用紙の向きを揃える

images/RotatePage-top.png

狙い・効果

A4縦とA4横のページが混在したPDF文書のページの向きを回転ページの向きをA4横に揃えます。

処理の概要

各ページの幅と高さを取得して、

ページの高さ>ページの幅 => A4縦

ページの幅>ページの高さ => A4横

と判別し、その後、A4縦となっている部分を90度回転して、A4横に揃えます。

『PDF Tool API』の主な機能

この例では次の機能を使っています。

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class RotatePage {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 3)
        {
            System.out.println("usage: java RotatePage in-pdf-file out-pdf-file 回転方向");
            System.out.println("回転方向:\n 0: 右に回転させて合わせる  1: 左に回転させて合わせる");
            return;
        }
        String rotateDirection = args[2];
        switch (rotateDirection) {
        case "0":
        case "1":
            break;
        default:
            System.err.println("回転方向を正しく指定してください。");
            System.err.println("usage: java RotatePage in-pdf-file out-pdf-file 回転方向");
            System.err.println("回転方向:\n 0: 右に回転させて合わせる  1: 左に回転させて合わせる");
            return;
        }


        ...【AppendPages.javaと同じ処理のため省略
             ・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード
             ・PtlParamOutputを用いて出力PDF名を指定】...


        ...【RemovePages.javaと同じ処理のため省略
             ・doc.getPages()メソッドを用いてPtlPages pagesにページコンテナを取得
             ・ページコンテナが空だった場合にエラーを出力して終了】...

                int numPages = doc.getPageCount();
                for(int i = 0; i < numPages; i++)
                {
                    try (PtlPage page = pages.get(i); //ページオブジェクトの取得
                         PtlSize sizeOfPage = page.getSize()) //ページサイズの取得
                    {
                        float width = sizeOfPage.getWidth();
                        float height = sizeOfPage.getHeight();

                        //回転させるかどうかを判定(仮)
                        //縦の方が横より長いもの(縦長のもの)を回転させる
                        if(height > width)
                        {
                            // 回転角度設定(0, 90, 180, 270)
                            switch (rotateDirection) {
                            case "0":
                                page.setRotate(90);
                                break;
                            case "1":
                                page.setRotate(270);
                                break;
                            }
                        }
                    }
                }
            }


        ...【AppendPages.javaと同じ処理のため省略
             ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力
             ・PtlException, Exception, Error を catchするエラー処理
             ・finally文で"--完了--"と表示する処理】...

    }
}

サンプルファイル名

RotatePage.java

入出力操作の例

C:\samples>java cookbook.RotatePage 
usage: java RotatePage in-pdf-file out-pdf-file 回転方向
回転方向:
 0: 右に回転させて合わせる  1: 左に回転させて合わせる

C:\samples>java cookbook.RotatePage sample1.pdf sample-rotated.pdf 0 
-- 完了 --

処理前のページ一覧と処理後のページ一覧の比較です。処理後は縦向きページが横向きになっています。

images/RotatePage-compare.png

図1・7 比較:用紙の向きを揃える