无涯教程-PDFBox - 插入图像

152 阅读3分钟

在上一章中,无涯教程已经看到了如何从现有的PDF文档中提取文本。在本章中将讨论如何将图像插入PDF文档。

您可以使用类 PDImageXObjectPDPageContentStreamcreateFromFile()drawImage()方法将图像插入PDF文档。

以下是从现有PDF文档提取文本的步骤。

步骤1 - 加载现有文档

使用 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 - 创建图像对象

PDFBox库中的类 PDImageXObject 表示图像。它提供了执行与图像相关的操作所需的所有必需方法,如插入图像,设置其高度,设置其宽度等。

无涯教程可以使用方法 createFromFile()创建此类的对象。对于此方法需要以字符串的形式传递要添加的图像的路径以及需要向其添加图像的文档对象。

PDImageXObject pdImage=PDImageXObject.createFromFile("C:/logo.png", doc);

步骤4 - 准备内容流

您可以使用名为 PDPageContentStream 的类的对象插入各种数据元素。您需要将文档对象和页面对象传递给此类的构造函数,因此,通过传递在先前步骤中创建的这两个对象来化此类,如下所示。

PDPageContentStream contentStream=new PDPageContentStream(doc, page);

步骤5 - 绘制图像

您可以使用 drawImage()方法在PDF文档中插入图像。对于此方法,您需要添加在上述步骤中创建的图像对象以及所需的图像尺寸(宽度和高度)。

contentstream.drawImage(pdImage, 70, 250);

步骤6 - 关闭内容流

如下所示,使用 close()方法关闭 PDPageContentStream 对象。

contentstream.close();

步骤7 - 保存文档

添加所需的内容后,使用 PDDocument 类的 save()方法保存PDF文档,如以下代码块所示。

doc.save("Path");

步骤8 - 关闭文档

最后,使用 PDDocument 类的 close()方法关闭文档,如下所示。

doc.close();

完整示例

假设无涯教程在路径C:/ PdfBox_Examples /中有一个名为sample.pdf的PDF文档,其空页面如下所示。

Sample document

本示例演示如何将图像添加到上述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 { //加载现有文档 File file = new File("C:/PdfBox_Examples/sample.pdf"); PDDocument doc = PDDocument.load(file);

  </span><span class="com">//检索页面</span><span class="pln">
  </span><span class="typ">PDPage</span><span class="pln"> page </span><span class="pun">=</span><span class="pln"> doc</span><span class="pun">.</span><span class="pln">getPage</span><span class="pun">(</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
   
  </span><span class="com">//创建PDImagexobject对象</span><span class="pln">
  </span><span class="typ">PDImageXObject</span><span class="pln"> pdImage </span><span class="pun">=</span><span class="pln"> </span><span class="typ">PDImageXObject</span><span class="pun">.</span><span class="pln">createFromFile</span><span class="pun">(</span><span class="str">"C:/PdfBox_Examples/logo.png"</span><span class="pun">,</span><span class="pln">doc</span><span class="pun">);</span><span class="pln">
   
  </span><span class="com">//创建PDPageContentStream对象</span><span class="pln">
  </span><span class="typ">PDPageContentStream</span><span class="pln"> contents </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">PDPageContentStream</span><span class="pun">(</span><span class="pln">doc</span><span class="pun">,</span><span class="pln"> page</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//在PDF文档中绘制图像</span><span class="pln">
  contents</span><span class="pun">.</span><span class="pln">drawImage</span><span class="pun">(</span><span class="pln">pdImage</span><span class="pun">,</span><span class="pln"> </span><span class="lit">70</span><span class="pun">,</span><span class="pln"> </span><span class="lit">250</span><span class="pun">);</span><span class="pln">

  </span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Image inserted"</span><span class="pun">);</span><span class="pln">
  
  </span><span class="com">//关闭PDPageContentStream对象</span><span class="pln">
  contents</span><span class="pun">.</span><span class="pln">close</span><span class="pun">();</span><span class="pln">		
	
  </span><span class="com">//保存文档</span><span class="pln">
  doc</span><span class="pun">.</span><span class="pln">save</span><span class="pun">(</span><span class="str">"C:/PdfBox_Examples/sample.pdf"</span><span class="pun">);</span><span class="pln">
        
  </span><span class="com">//关闭文件</span><span class="pln">
  doc</span><span class="pun">.</span><span class="pln">close</span><span class="pun">();</span><span class="pln">
 

} }

使用以下命令从命令提示符处编译并执行保存的Java文件。

javac InsertingImage.java 
java InsertingImage

执行后,上述程序将图像插入给定PDF文档的指定页面,并显示以下消息。

Image inserted

如果您验证文档 sample.pdf ,则可以看到其中插入了图像,如下所示。

Inserting image

参考链接

www.learnfk.com/pdfbox/pdfb…