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)
我的直觉是它是一种仿射变换,但我也无法使其发挥作用。
我创建了一个新问题,它允许传递转换,这将在 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)