1

既存のPDFドキュメントをグラフィックでマークアップする必要があるアプリケーションがあります。私はiTextを使おうとしていますが、ほとんどの場合、それは機能します。ただし、[0、0]に基づくページ長方形またはトリミング長方形がないPDFドキュメントで問題が発生しています。これが私のコードの要約版です。

for (int i = 0; i < n; i++) {
    PdfImportedPage page = writer.getImportedPage(reader, i + 1);
    PdfCopy.PageStamp stamper = writer.createPageStamp(page);
    PdfContentByte cb = stamper.getOverContent();
    Rectangle cropRect = reader.getCropBox(i + 1);
    Rectangle pageRect = reader.getPageSize(i + 1);

    // construct the transform to place the crop rect of the original PDF into the new PDF
    // This transform is what places the original image content accurately on the page
    // construct a graphics2D object with the proper size (width, height of PDF in question)
    Graphics2D g = cb.createGraphics(2449, 1576);
    cb.saveState();

    // Crop Rectangle coordinates of PDF in question: [0, 24824]
    g.setTransform(AffineTransform.getTranslateInstance(cropRect.getLeft(), cropRect.getBottom()));

    cb.restoreState();
    g.setFont(new Font("Dialog", Font.BOLD, 48));
    g.setColor(Color.blue);
    g.drawString("Hello World", 1200, 800);
    g.dispose();

    stamper.alterContents();
    writer.addPage(page);
}

コメントで、切り抜き長方形のサイズと位置を指定しました(これもページ長方形と同じです)。また、アプリケーションは「Hello World」を描画していません。むしろ、Graphics2DオブジェクトがSwingパネルのpaintメソッドに渡されています。

前もって感謝します。

4

0 に答える 0