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

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());

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

単一の空白ページを持つ新しいドキュメントを作成します。初期ページの寸法を指定する必要があります。一般的なサイズについては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から始まります。デフォルトでは、結果のグリッドページにスケーリングは適用されず、その寸法は含まれるページの合計になります。印刷用途では、グリッドページの寸法を含まれるページと同じサイズに戻すために、スケーリング値を適用することを推奨します。たとえば、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();