Ich verwende PDFBox, um Berichte in Java zu generieren. Eine meiner Anforderungen besteht darin, ein PDF-Dokument zu erstellen, das das Firmenlogo oben auf der Seite enthält. Ich bin nicht in der Lage, den Weg zu finden, dies zu erreichen. Ich habe die folgende Methode in einer Java-Klasse:wie man Bild an den Anfang der PDF-Seite mit Hilfe von Apache PDFBox verschieben
public void createPdf() {
PDDocument document = null;
PDPage page = null;
ServletContext servletContext = (ServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext();
try {
File f = new File("Afiliado_2.pdf");
if (f.exists() && !f.isDirectory()) {
document = PDDocument.load(new File("Afiliado_2.pdf"));
page = document.getPage(0);
} else {
document = new PDDocument();
page = new PDPage();
document.addPage(page);
}
PDImageXObject pdImage = PDImageXObject.createFromFile(
servletContext.getRealPath("/resources/images/logo.jpg"),
document);
PDPageContentStream contentStream = new PDPageContentStream(
document, page, AppendMode.APPEND, true);
contentStream.drawImage(pdImage, 0, 0);
// Make sure that the content stream is closed:
contentStream.close();
// Save the results and ensure that the document is properly closed:
document.save("Afiliado_2.pdf");
document.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Das Bild wird derzeit im unteren Teil der PDF angezeigt. Ich weiß, dass die Zeile, die ich ändern muss, contentStream.drawImage(pdImage, 0, 0);
ist, aber welche Koordinaten muss ich angeben, damit sie oben auf der Seite angezeigt wird?
Vielleicht hat 'AppendMode.APPEND' etwas damit zu tun? – UDKOX
Zusätzlich zu Maruans Antwort - für vorhandene Dateien kann es sicherer sein, den PDPageContentStream-Konstruktor mit dem 5. Parameter (resetContext) zu verwenden. –