Itext-shrinking-the-content

提供:Dev Guides
移動先:案内検索

iText-コンテンツの縮小

この章では、iTextライブラリを使用してPDFドキュメントの画像を拡大縮小する方法を説明します。

PDFのコンテンツを縮小する

以下は、iTextライブラリを使用してPDFページのコンテンツを縮小する手順です。

ステップ1:PdfWriterおよびPdfReaderオブジェクトの作成

*PdfWriter* クラスは、PDFのDocWriterを表します。 このクラスは、パッケージ *com.itextpdf.kernel.pdf* に属します。 このクラスのコンストラクターは、PDFが作成されるファイルのパスを表す文字列を受け入れます。

以下に示すように、文字列値(PDFを作成する必要があるパスを表す)をコンストラクターに渡すことにより、PdfWriterクラスをインスタンス化します。

//Creating a PdfWriter object
String dest = "C:/itextExamples/shrinking.pdf";
PdfWriter writer = new PdfWriter(dest);

既存のPDFからデータを読み取るには、以下に示すように PdfReader オブジェクトを作成します。

//Creating a PdfReader
String src = "C:/itextExamples/pdfWithImage.pdf";
PdfReader reader = new PdfReader(src);

ステップ2:PdfDocumentオブジェクトの作成

*PdfDocument* クラスは、iTextでPDFドキュメントを表すクラスです。 このクラスは、パッケージ *com.itextpdf.kernel.pdf* に属します。 (書き込みモードで)このクラスをインスタンス化するには、クラス *PdfWriter* のオブジェクトをコンストラクターに渡す必要があります。

以下に示すように、 PdfWriter および PdfReader オブジェクトをコンストラクターに渡すことにより、ソースおよび宛先PDFドキュメントを作成します。

//Creating a PdfDocument objects
PdfDocument destpdf = new PdfDocument(writer);
PdfDocument srcPdf = new PdfDocument(reader);

ステップ3:既存のPDFからページを開く

*PdfPage* クラスの* getPage()*メソッドを使用して、ソースPDFからページを取得します。 このオブジェクトを使用して、以下に示すように、ソースドキュメントのページのサイズを取得します。
//Opening a page from the existing PDF
PdfPage origPage = srcPdf.getPage(1);

//Getting the page size
Rectangle orig = origPage.getPageSizeWithRotation();

ステップ4:ソースPDFの内容を縮小する

以下に示すように、 AffineTransform クラスの* getScaleInstance()*メソッドを使用して、ソースドキュメントのページのコンテンツを縮小します。

//Shrink original page content using transformation matrix
AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
   page.getPageSize().getWidth()/orig.getWidth()/2,
   page.getPageSize().getHeight()/orig.getHeight()/2);

ステップ5:ページのコピー

以下に示すように、前の手順で作成された* affine変換マトリックス*を、宛先PDFドキュメントの canvas オブジェクトのマトリックスに連結します。

//Concatenating the affine transform matrix to the current matrix
PdfCanvas canvas = new PdfCanvas(page);
canvas.concatMatrix(transformationMatrix);

次に、以下に示すように、コピー先PDFの canvas オブジェクトにページコピーをソースドキュメントに追加します。

//Add the object to the canvas
PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf);
canvas.addXObject(pageCopy, 0, 0);

ステップ6:Documentオブジェクトの作成

パッケージ com.itextpdf.layoutDocument クラスは、自給自足のPDFを作成する際のルート要素です。 このクラスのコンストラクターの1つは、クラスPdfDocumentのオブジェクトを受け入れます。

以下に示すように、クラス PdfDocument のオブジェクトを渡すことにより、 Document クラスをインスタンス化します。

//Creating a Document
Document document = new Document(destpdf);

ステップ7:ドキュメントを閉じる

以下に示すように、 Document クラスの* close()*メソッドを使用してドキュメントを閉じます。

//Closing the document
document.close();

次のJavaプログラムは、iTextライブラリを使用してPDFページのコンテンツを縮小する方法を示しています。 shrinkingPDF.pdf という名前のPDFドキュメントを作成し、pdf内の画像を縮小し、パス C:/itextExamples/ に保存します

このコードを ShrinkingPDF.java という名前のファイルに保存します。

import com.itextpdf.kernel.geom.AffineTransform;
import com.itextpdf.kernel.geom.Rectangle;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;

import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import com.itextpdf.layout.Document;

public class ShrinkPDF {
   public static void main(String args[]) throws Exception {
     //Creating a PdfWriter object
      String dest = "C:/itextExamples/shrinking.pdf";
      PdfWriter writer = new PdfWriter(dest);

     //Creating a PdfReader
      String src = "C:/itextExamples/pdfWithImage.pdf";
      PdfReader reader = new PdfReader(src);

     //Creating a PdfDocument objects
      PdfDocument destpdf = new PdfDocument(writer);
      PdfDocument srcPdf = new PdfDocument(reader);

     //Opening a page from the existing PDF
      PdfPage origPage = srcPdf.getPage(1);

     //Getting the page size
      Rectangle orig = origPage.getPageSizeWithRotation();

     //Adding a page to destination Pdf
      PdfPage page = destpdf.addNewPage();

     //Scaling the image in a Pdf page
      AffineTransform transformationMatrix = AffineTransform.getScaleInstance(
         page.getPageSize().getWidth()/orig.getWidth()/2,
         page.getPageSize().getHeight()/orig.getHeight()/2);

     //Shrink original page content using transformation matrix
      PdfCanvas canvas = new PdfCanvas(page);
      canvas.concatMatrix(transformationMatrix);

     //Add the object to the canvas
      PdfFormXObject pageCopy = origPage.copyAsFormXObject(destpdf);
      canvas.addXObject(pageCopy, 0, 0);

     //Creating a Document object
      Document doc = new Document(destpdf);

     //Closing the document
      doc.close();

      System.out.println("Table created successfully..");
   }
}

次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-

javac ShrinkingPDF.java
java ShrinkingPDF

実行時に、上記のプログラムはPDFドキュメントを作成し、次のメッセージを表示します。

Table created successfully..

指定されたパスを確認すると、以下に示すように作成されたPDFドキュメントを見つけることができます。

縮小