需求:向已有的PDF文件中的指定位置写入一张图片。
问题:图片写入成功,但是图片所在的页的文字全部消失了,只剩下写入后的图片。
已知:写入图片的位置有足够大的空白处。
期望:写入图片不会影响到原有的内容。
public class Test {
public static void main(String[] args) throws Exception {
File file = new File("D:\\1\\test.pdf");
PDDocument doc = PDDocument.load(file);
PDPage myPage = doc.getPage(0);
String imgFileName = "D:\\1\\test.jpg";
PDImageXObject pdImage = PDImageXObject.createFromFile(imgFileName, doc);
int iw = pdImage.getWidth();
int ih = pdImage.getHeight();
float offset = 20f;
try (PDPageContentStream cont = new PDPageContentStream(doc, myPage)) {
cont.drawImage(pdImage, offset, offset, iw, ih);
}
doc.save("D:\\1\\test2.pdf");
}
}
找到了解决办法,使用追加而不是默认的覆盖方式。
PDPageContentStream cont = new PDPageContentStream(doc, myPage,PDPageContentStream.AppendMode.APPEND,false,false);
推荐Free Spire.PDF for Java,它也能够支持将图片插入到PDF文档中的指定位置,代码操作简单,效果也很好,有需要的可以试试。https://www.e-iceblue.cn/pdf_java_image_shapes/add-image-in-pdf-file-using-java.html 此链接是他们官网上的对应代码教程,写得很详细,同时还有很多其他操作PDF文档的功能和示例。