使用 PDFBox 2.X 在所有页面的特定位置覆盖 PDF

Out*_*der 5 java pdf pdfbox java-8

我试图将 PDF 覆盖在 PDF 中所有页面的顶部,即每个页面的左上角。PDF 的大小不同。PDF 叠加层的大小是恒定的,小于 PDF 的所有页面。

我似乎只能让 PDFBox 将覆盖层放在 PDF 的中间。

我不想将 PDF 覆盖转换为位图 (PDImageXObject) 并将其插入到页面上。这是我正在使用的一些粗略代码:-

public static void main(String[] args) throws Exception {
    String overlayPath = "C:\\OverlayPdf.pdf";
    String overlayOnMePath = "C:\\ToBeOverlayedOn.pdf";       
    PDDocument overlayOnMe = PDDocument.load(new File(overlayOnMePath)); //Document to write to.
    overlayPath = overlayPath + "Anno.pdf";

    HashMap<Integer, String> overlayGuide = new HashMap<>();
    for (int i = 0; i < overlayOnMe.getNumberOfPages(); i++) {
        overlayGuide.put(i + 1, overlayPath);
    }
    Overlay overlay = new Overlay();
    overlay.setInputPDF(overlayOnMe);
    overlay.setOverlayPosition(Overlay.Position.FOREGROUND);
    overlay.overlay(overlayGuide);

    overlayOnMe.save(new File(overlayOnMePath + "_OVERLAYED.pdf"));
    overlay.close();
}
Run Code Online (Sandbox Code Playgroud)

我的直觉是它是一种仿射变换,但我也无法使其发挥作用。

Til*_*err 3

我创建了一个新问题,它允许传递转换,这将在 2.0.10 或更高版本中出现。calculateAffineTransform这将通过扩展覆盖类来完成。要将图章放在左上角,新方法将如下所示:

protected AffineTransform calculateAffineTransform(PDPage page, PDRectangle overlayMediaBox)
{
    AffineTransform at = new AffineTransform();
    PDRectangle pageMediaBox = page.getMediaBox();
    at.translate(0, pageMediaBox.getHeight() - overlayMediaBox.getHeight());
    return at;
}
Run Code Online (Sandbox Code Playgroud)