PDFBox - 插入图片
在上一章中,我们学习了如何从现有的PDF文档中提取文本。本章我们将讨论如何向PDF文档中插入图片。
向PDF文档插入图片
您可以使用PDImageXObject和PDPageContentStream类的createFromFile()和drawImage()方法将图片插入PDF文档。
以下是从现有PDF文档中提取文本的步骤。
步骤1:加载现有PDF文档
使用PDDocument类的静态方法load()加载现有PDF文档。此方法接受文件对象作为参数,由于这是一个静态方法,您可以使用类名调用它,如下所示。
File file = new File("path of the document") PDDocument doc = PDDocument.load(file);
步骤2:检索页面
选择PDF文档中的一个页面,并使用getPage()方法检索其页面对象,如下所示。
PDPage page = doc.getPage(0);
步骤3:创建PDImageXObject对象
PDFBox库中的PDImageXObject类表示一个图片。它提供执行与图片相关的操作所需的所有方法,例如插入图片、设置高度、设置宽度等。
我们可以使用createFromFile()方法创建此类的对象。此方法需要您传入要添加的图片路径(字符串形式)和需要添加图片的文档对象。
PDImageXObject pdImage = PDImageXObject.createFromFile("C:/logo.png", doc);
步骤4:准备内容流
您可以使用名为PDPageContentStream类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,通过传递在前面步骤中创建的这两个对象来实例化此类,如下所示。
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
步骤5:在PDF文档中绘制图片
您可以使用drawImage()方法在PDF文档中插入图片。对于此方法,您需要添加在上面步骤中创建的图片对象以及图片所需的尺寸(宽度和高度),如下所示。
contentstream.drawImage(pdImage, 70, 250);
步骤6:关闭PDPageContentStream
使用close()方法关闭PDPageContentStream对象,如下所示。
contentstream.close();
步骤7:保存文档
添加所需内容后,使用PDDocument类的save()方法保存PDF文档,如下面的代码块所示。
doc.save("Path");
步骤8:关闭文档
最后,使用PDDocument类的close()方法关闭文档,如下所示。
doc.close();
示例
假设我们在路径C:/PdfBox_Examples/下有一个名为sample.pdf的PDF文档,其中包含空白页面,如下所示。
此示例演示如何将图片添加到上述PDF文档的空白页面中。在这里,我们将加载名为sample.pdf的PDF文档并向其中添加图片。将此代码保存在名为InsertingImage.java的文件中。
import java.io.File; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; public class InsertingImage { public static void main(String args[]) throws Exception { //Loading an existing document File file = new File("C:/PdfBox_Examples/sample.pdf"); PDDocument doc = PDDocument.load(file); //Retrieving the page PDPage page = doc.getPage(0); //Creating PDImageXObject object PDImageXObject pdImage = PDImageXObject.createFromFile("C:/PdfBox_Examples/logo.png",doc); //creating the PDPageContentStream object PDPageContentStream contents = new PDPageContentStream(doc, page); //Drawing the image in the PDF document contents.drawImage(pdImage, 70, 250); System.out.println("Image inserted"); //Closing the PDPageContentStream object contents.close(); //Saving the document doc.save("C:/PdfBox_Examples/sample.pdf"); //Closing the document doc.close(); } }
使用以下命令从命令提示符编译并执行保存的Java文件。
javac InsertingImage.java java InsertingImage
执行后,上述程序会将图片插入到给定PDF文档的指定页面中,并显示以下消息。
Image inserted
如果您验证sample.pdf文档,您可以观察到其中插入了一张图片,如下所示。