我正在使用这段代码:https://www.tutorialspoint.com/pdfbox/pdfbox_inserting_image.htm,帮助我向现有的PDF文件中添加图片。问题在于它创建的文件是只有图片的空白页面。
以下是我的代码:
据我所知,我的做法应该是有效的,而且没有任何错误提示,那问题出在哪里呢?
以下是我的代码:
public void signPDF(PdfDTO pdfDTO) throws IOException{
//Loading an existing document
File file = new File(getAbsolutePdfPath(pdfDTO));
PDDocument doc = PDDocument.load(file);
//Retrieving the page
PDPage page = doc.getPage(0);
//a test to ensure the doc is loading correctly
PDDocument testDoc = new PDDocument();
testDoc.addPage(page);
testDoc.save("C:" + File.separator + "Users" + File.separator + "kdotson" + File.separator + "Documents" + File.separator + "test.pdf");
testDoc.close(); //this file is good so I know the doc is loading correctly
//Creating PDImageXObject object
PDImageXObject pdImage = PDImageXObject.createFromFile("C://test_images/signature.pdf", doc);
//creating the PDPageContentStream object
PDPageContentStream contents = new PDPageContentStream(doc, page);
//Drawing the image in the PDF document
contents.drawImage(pdImage, 0, 0);
//Closing the PDPageContentStream object
contents.close();
//Saving the document
doc.save(new File(getSignedPdfLocation(pdfDTO))); //the created file has the image on it, so I know the image is loading correctly
//Closing the document
doc.close();
}
据我所知,我的做法应该是有效的,而且没有任何错误提示,那问题出在哪里呢?
new PDPageContentStream(doc,page)
而导致失败,解决方法是使用至少具有第三个(append)参数的构造函数。您链接的问题中的问题是由于使用了new PDPageContentStream(doc,page,true,true)
而导致失败,解决方法是使用具有第五个(resetContext)参数的构造函数。可以考虑为所有关于使用哪个PDPageContentStream
构造函数的问题创建一个规范答案。 - mkl