Skip to main content
Interwork Corporation
IDR Solutions Product Support Portal
PDF開発用語集 モードの切替 ダーク/ライト/自動 モードの切替 ダーク/ライト/自動 モードの切替 ダーク/ライト/自動

PDFファイルの操作

v2025.12

JPedalは、PDFファイルの操作、編集、作成を簡単に行うためのPdfManipulator クラスを提供しています。

機能

  1. JavaでPDFファイルを操作する
  2. ドキュメントの読み込みと書き込み
    1. 新しいPDF Manipulatorを作成する
    2. ドキュメントを読み込む
    3. 新しい空のドキュメントを作成する
    4. ドキュメントを書き込む
    5. ドキュメントを閉じる
  3. 操作の適用とリセット
    1. 操作を適用する
    2. 操作をリセットする
  4. 操作
    1. ページを追加する
    2. ページをコピーする
    3. ページを削除する
    4. ページをリスケールする
    5. ページのコンテンツをリスケールする
    6. ページをトリミングする
    7. ページを回転する
    8. テキストを追加する
    9. 画像を追加する
    10. 図形を追加する
    11. 注釈を追加する
    12. ファイルを埋め込む
    13. ファイルを添付する
    14. ページを分離する
    15. ページをN-upする
    16. ブックマークを追加する
    17. ブックマークを削除する
    18. ドキュメント情報を設定する
    19. ドキュメントメタデータを設定する
    20. メタデータを削除する
    21. 初期表示を設定する
    22. 目次を生成する
  5. クエリ
    1. ページのメディアボックスを取得する
    2. ページのクロップボックスを取得する
    3. ページ数を取得する
    4. ドキュメントにJavaScriptが含まれているか判定する
  6. サニタイゼーション
    1. JavaScriptを削除する
    2. 埋め込みファイルを削除する
    3. ハイパーリンクを削除する
    4. メタデータを削除する
    5. 注釈を削除する
    6. 初期表示を削除する

ドキュメントの読み込みと書き込み

新しいPDF Manipulatorを作成する

final PdfManipulator pdf = new PdfManipulator();

ドキュメントを読み込む

ドキュメントはFileまたはbyte[]から読み込むことができます

pdf.loadDocument(new File("inputFile.pdf"));
pdf.loadDocument(pdfBytes);

パスワード保護されたドキュメントも読み込むことができます

pdf.loadDocument(new File("inputFile.pdf"), "password".getBytes());
pdf.loadDocument(pdfBytes, "password".getBytes());

新しい空のドキュメントを作成する

1つの空ページを持つ新しいドキュメントを作成します。初期ページの寸法を指定する必要があります。一般的なサイズについてはPaperSize Javadoc を参照してください。

pdf.newDocument(PaperSize.A4_LANDSCAPE);

ドキュメントを書き込む

ドキュメントはFileまたはbyte[]に書き込むことができます

pdf.writeDocument(new File("outputFile.pdf"));
final byte[] pdfBytes = pdf.writeDocument();

ドキュメントを閉じる

リソースを解放するために、操作が終わったらドキュメントを閉じる必要があります

pdf.closeDocument();

操作の適用とリセット

操作を適用する

操作はPdfManipulatorが保持するキューに追加されます。追加された順序で適用されます。操作はapply()が呼び出された後もキューに残ります。

pdf.apply();

操作をリセットする

PdfManipulatorは操作のキューを保持するため、各操作をやり直すことなく、同じ編集を多くのドキュメントに適用できます。ただし、新しい編集を開始するためにキューをクリアしたい場合は、reset()を使用できます。

pdf.reset();

操作

ページを追加する

指定されたインデックスにドキュメントに1つまたは複数のページを挿入します。ページインデックスは1から始まります。初期ページの寸法を指定する必要があります。一般的なサイズについてはPaperSize Javadoc を参照してください。

pdf.addPage(1, PaperSize.A4_LANDSCAPE);
pdf.addPage(new PageRanges("1-10"), PaperSize.LEGAL_PORTRAIT);

ページをコピーする

ページをコピーし、新しいコピーをドキュメント内の任意の場所に配置します。ページインデックスは1から始まります。

pdf.copyPage(1, 2);

ページを削除する

ドキュメントから1つまたは複数のページを削除します。ページインデックスは1から始まります。

pdf.removePage(1);
pdf.removePage(new PageRanges("1-10"));

ページをリスケールする

1つまたは複数のページをリサイズします。ページインデックスは1から始まります。係数によるスケーリングまたは目標寸法へのスケーリングが可能です。ScaleMode Javadoc を参照してください。

pdf.scalePage(1, 0.5f, 0.5f);
pdf.scalePage(new PageRanges("1-10"), 2.0f, 1.0f);
pdf.scalePage(new PageRanges("1,3,4"), 400, 500, ScaleMode.SCALE_TO_DIMENSION);

ページのコンテンツをリスケールする

ページの寸法はそのままに、1つまたは複数のページのコンテンツをリサイズします。ページインデックスは1から始まります。スケーリングされたページコンテンツを移動するための変換値を指定できます。PDFの原点は左下なので、10, 10の変換はコンテンツを左下隅から10単位離れた位置に移動します。ページ中央や右側などのプリセット変換については、ScalePageContent Javadoc を参照してください。

pdf.scalePageContent(1, 0.5f, 0.5f, 0.0f, 0.0f);
pdf.scalePageContent(new PageRanges("1-10"), 0.5f, 0.5f, ScalePageContent.RIGHT);

ページをトリミングする

1つまたは複数のページをトリミングします。ページインデックスは1から始まります。係数によるスケーリングまたは目標寸法へのスケーリングが可能です。ScaleMode Javadoc を参照してください。ページがどのようにトリミングされるかを決定するためのアンカーを指定できます。Anchor Javadoc を参照してください。

pdf.cropPage(1, 0.5f, 0.5f);
pdf.cropPage(new PageRanges("1-10"), 2.0f, 1.0f);
pdf.cropPage(new PageRanges("1,3,4"), 400, 500, ScaleMode.SCALE_TO_DIMENSION);
pdf.cropPage(1, 0.5f, 0.5f, ScaleMode.SCALE_BY_FACTOR, Anchor.CENTER);

ページを回転する

1つまたは複数のページを回転します。ページインデックスは1から始まります。角度は度数で指定し、90の倍数である必要があります。現在の回転に基づいてページを回転させるか、ページの回転を特定の角度に設定できます。

pdf.rotatePage(1, -90);
pdf.setPageRotation(1, 180);

テキストを追加する

1つまたは複数のページにテキストを追加します。ページインデックスは1から始まります。PDFの基本フォントの1つを使用する必要があります。これらの値については、BaseFont Javadoc を参照してください。

pdf.addText(1, "Hello World", 10, 10, BaseFont.HelveticaBold, 12, 1, 0.3f, 0.2f);

画像を追加する

1つまたは複数のページに画像を追加します。ページインデックスは1から始まります。BufferedImageを読み取れるライブラリが必要です。JDeli を推奨します。画像の原点と寸法を定義する矩形を指定する必要があります。

final BufferedImage img = new BufferedImage();
pdf.addImage(1, img, new float[] {0, 0, 100, 100});

図形を追加する

1つまたは複数のページに図形を追加します。ページインデックスは1から始まります。Shape を実装する任意の図形を指定できます。出力を制御するためにDrawParameters のインスタンスを指定する必要があります。デフォルトの描画モードでは出力が生成されないため、少なくともsetFillRule(int)を使用して塗りつぶしルールを設定する必要があります。

final Shape shape = new Rectangle2D.Float(56.7f, 596.64f, 131.53f, 139.25f);
final DrawParameters params = new DrawParameters();
params.setStrokeColor(new float[] {1, 0, 0});
params.setFillRule(DrawParameters.STROKE);
pdf.addShape(1, shape, params);

注釈を追加する

1つまたは複数のページに注釈を追加します。ページインデックスは1から始まります。以下の注釈タイプがサポートされています:

  • Text
  • Link
  • FreeText
  • Line
  • Square
  • Circle
  • Polygon
  • PolyLine
  • Highlight
  • Underline
  • Squiggly
  • StrikeOut
  • Caret
  • Stamp
  • Ink
  • FileAttachment - ファイルを添付する を参照

詳細については、Annotation Javadoc を参照してください。

final Annotation[] annotations = new Annotation[2];
// サイズ12のTimesNewRomanフォント、赤色、中央揃えテキストのテキストボックス注釈。
annotations[0] = new FreeText(new float[] {400, 600, 500, 700}, "hello!", new float[] {1.0f, 0.0f, 0.0f}, BaseFont.TimesRoman, 12, Quadding.CENTRED);
// 青色のハイパーリンク注釈。
annotations[1] = new Link(new float[] {200, 600, 300, 700}, new float[] {0.0f, 0.0f, 1.0f}, "https://idrsolutions.com/");
pdf.addAnnotation(1, annotations);

PDFコンテンツストリームの知識がある場合、XObjectを使用してカスタムAPストリームを設定することもできます。

詳細については、XObject Javadoc を参照してください。

final Annotation annotation = new Annotation();
final XObject x = new XObject();
x.draw("q\n 0 0 1 rg\n 0 0 1 RG\n 1 1 199 199 re\n B\n Q\n");
annotation.setNormalAppearance(x);
annotation.setRolloverAppearance(x);
annotation.setDownAppearance(x);

ファイルを埋め込む

PDFドキュメントに任意のファイルを埋め込みます。

pdf.embedFile(new File("embed.png"), "embedded-image");

ファイルを添付する

PDFドキュメントに任意のファイルを埋め込み、1つまたは複数のページにFileAttachment注釈を追加します。ページインデックスは1から始まります。注釈の原点と寸法を定義する矩形を指定する必要があります。注釈の色を指定する必要があり、グレー、RGB、またはCMYK(1、3、または4成分)が使用できます。

pdf.attachFile(1, new File("embed.png"), "embedded-image", 
        new float[] {10.0f, 10.0f, 100.0f, 100.0f}, new float[] {0.7f, 0.3f, 0.4f});

ページを分離する

ドキュメント内のページを分離します(他のすべてのページを削除します)。ページインデックスは1から始まります。

pdf.isolatePage(new PageRanges("1-2"));

ページをN-upする

ページのサブセットを1つまたは複数のページ上にグリッド形式で配置します。ページインデックスは1から始まります。デフォルトでは、結果のグリッドページにスケーリングは適用されず、その寸法は含まれるページの合計になります。印刷で使用する場合は、グリッドページの寸法を含まれるページと同じサイズに戻すために、スケーリング値を適用することをお勧めします。たとえば、2x2グリッドでは、元の寸法を保持するために0.5のスケーリング係数が必要です。

// ページ1-10を2x2グリッドに必要な数だけのページを使用して配置します。
pdf.nUp(new PageRanges(1, 10), 2, 2);
// ページ1-10を2x2グリッドに必要な数だけのページを使用し、スケーリング係数を0.5にして配置します。
pdf.nUp(new PageRanges(1, 10), 2, 2, 0.5f);

ブックマークを追加する

ドキュメントに任意に複雑なブックマークを追加します。ブックマークの挿入はまだサポートしていないため、このメソッドを呼び出すと、ドキュメントから既存のブックマークが削除されます。各ブックマークはページにリンクする必要があります。ページインデックスは1から始まります。

詳細については、Bookmarks Javadoc を参照してください。

final Bookmarks root = new Bookmarks();
final Bookmark b = root.addChild("1", 1)
        .addChild("1.1", 2)
        .addChild("1.1.1", 3);
b.addChild("1.1.1.a", 4);
b.addChild("1.1.1.b", 5);
b.addChild("1.1.1.c", 6);
Bookmark b2 = b.addChild("1.1.1.d", 7);
b2.addChild("1.1.1.d.A", 8);
b2.addChild("1.1.1.d.B", 9);
root.addChild("2", 11)
        .addChild("2.1", 13);
pdf.addBookmarks(root);

ブックマークを削除する

ドキュメントから既存のすべてのブックマークを削除します。

pdf.removeBookmarks();

ドキュメント情報を設定する

ドキュメントの以下の情報を設定します:

  • Title(タイトル)
  • Author(作成者)
  • Subject(件名)
  • Keywords(キーワード)
  • Creator(作成アプリケーション)
  • Producer(PDF作成プログラム)
  • CreationDate(作成日)
  • ModDate(変更日)

詳細については、DocumentInfo Javadoc を参照してください。

final DocumentInfo docInfo = pdf.getDocumentInfo();
docInfo.setTitle("My PDF");
docInfo.setCreationDate(Instant.now());
pdf.setDocumentInfo(docInfo);

PDF 2.0以降では、代わりにXMPメタデータストリームを使用することを推奨します。ドキュメントメタデータを設定する を参照してください。

ドキュメントメタデータを設定する

ドキュメントのカスタムXMPメタデータを設定するか、DocumentInfoオブジェクトから作成します。

final DocumentInfo docInfo = pdf.getDocumentInfo();
docInfo.setTitle("My PDF");
docInfo.setCreationDate(Instant.now());
pdf.setDocumentMetadata(docInfo.toXMP());

メタデータを削除する

メタデータを削除する を参照してください。

初期表示を設定する

ドキュメントの初期表示を設定します。初期表示は、互換性のあるPDFビューアで最初に開かれたときに、ドキュメントがどのように表示されるかを記述します。初期ページ、ページレイアウト、その他のビューア設定を指定できます。ページインデックスは1から始まります。

詳細については、SetInitialView Javadoc およびViewerPreferences Javadoc を参照してください。

ViewerPreferences vp = new ViewerPreferences();
vp.setDisplayDocTitle(false);
pdf.setInitialView(3, new Destination.Fit(), PageLayout.TWO_PAGE_LEFT, PageMode.USE_NONE, vp);

目次を生成する

ドキュメントのブックマークから目次を生成し、指定されたページの前に挿入します。ページインデックスは1から始まります。目次ページの寸法を指定する必要があります。一般的なサイズについては、PaperSize Javadoc を参照してください。PDFの基本フォントの1つを使用する必要があります。これらの値については、BaseFont Javadoc を参照してください。

pdf.addTableOfContents(1, PaperSize.A4_PORTRAIT, BaseFont.Helvetica, 12, new float[] {0, 0, 0});

クエリ

ページのメディアボックスを取得する

指定されたページのメディアボックスを取得します。ページインデックスは1から始まります。

final float[] mediabox = pdf.getPageMediaBox(1);

ページのクロップボックスを取得する

指定されたページのクロップボックスを取得します。ページインデックスは1から始まります。

final float[] cropbox = pdf.getPageCropBox(1);

ページ数を取得する

ドキュメント内のページ数を取得します。

final int pages = pdf.getPageCount();

ドキュメントにJavaScriptが含まれているか判定する

ドキュメントにJavaScript(ECMAScript)が含まれているかどうかを判定します。

final boolean javascript = pdf.containsJavaScript();

サニタイゼーション

JavaScriptを削除する

ドキュメントからJavaScript(ECMAScript)を削除します。このメソッドはドキュメントにJavaScriptが含まれていない場合は何もせずに戻るため、事前にcontainsJavaScript()を呼び出す必要はありません。

pdf.removeJavaScript();

埋め込みファイルを削除する

ドキュメントから埋め込み/添付ファイルを削除します。

pdf.removeEmbeddedFiles();

ハイパーリンクを削除する

ドキュメントからリンクを削除します。

pdf.removeLinks();

メタデータを削除する

以下のドキュメント情報を削除します:

  • Title(タイトル)
  • Author(作成者)
  • Subject(件名)
  • Keywords(キーワード)
  • Creator(作成アプリケーション)
  • Producer(PDF作成プログラム)
  • CreationDate(作成日)
  • ModDate(変更日)
  • Trapped(トラップ設定)

また、XMP/XMLメタデータストリームも削除します。

pdf.removeMetadata();

注釈を削除する

ドキュメントまたは特定のページから注釈を削除します。ページインデックスは1から始まります。

pdf.removeAnnotations();
pdf.removeAnnotations(new PageRanges("1-3,5"));

初期表示を削除する

ドキュメントから初期表示を削除します。

pdf.removeInitialView();