无涯教程-PDFBox - 添加多行

330 阅读4分钟

在上一章提供的示例中,无涯教程讨论了如何在PDF页面中添加文本,但是通过此程序,您只能添加适合单行的文本。如果尝试添加更多内容,则不会显示所有超出行间距的文本。

如,如果您在上一章中通过传递以下字符串来执行上述程序,则仅显示其中一部分。

String text="This is an example of adding text to a page in the pdf document. we can
   add as many lines as we want like this using the showText() method of the 
   ContentStream class";

用上述字符串替换上一章中示例的字符串文本并执行它。执行后,您将收到以下输出。

Single line extended

如果仔细观察输出,您会注意到仅显示了字符串的一部分。

为了向PDF添加多行,您需要使用 setLeading()方法设置行距,并在完成每一行后使用 newline()方法移至新行。

以下是创建空文档并将内容添加到其中的步骤。

步骤1 - 加载现有文档

您可以使用PDDocument类的 load()方法加载现有文档。因此,化该类并加载所需的文档,如下所示。

File file=new File("Path of the document"); 
PDDocument doc=PDDocument.load(file);

步骤2 - 获取所需的页面

您可以使用 getPage()方法在文档中获取所需的页面。通过将所需页面的索引传递给此方法来检索所需页面的对象,如下所示。

PDPage page=doc.getPage(1);

步骤3 - 准备内容流

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

PDPageContentStream contentStream=new PDPageContentStream(doc, page);

步骤4 - 开始文字

在PDF文档中插入文本时,您可以使用 PDPageContentStream 类,如下所示。

contentStream.beginText(); 
……………………….. 
code to add text content 
……………………….. 
contentStream.endText(); 

因此,使用 beginText()方法开始文本,如下所示。

contentStream.beginText();

步骤5 - 设置文本的位置

使用 newLineAtOffset()方法,可以在页面中的内容流上设置位置。

//设置Line行的位置
contentStream.newLineAtOffset(25, 700);

步骤6 - 设置字体

您可以使用 PDPageContentStream 类的 setFont()方法将文本的字体设置为所需的样式,如下所示,此方法需要传递类型和大小的字体。

contentStream.setFont( font_type, font_size );

步骤7 - 设置文本开头

您可以使用 setLeading()方法设置文本开头,如下所示。

contentStream.setLeading(14.5f);

步骤8 - 使用newline()插入多个字符串

您可以使用 PDPageContentStream 类的 ShowText()方法插入多个字符串,方法是使用 newline()方法将每个字符串分开,如下所示下面。

contentStream. ShowText(text1); 
contentStream.newLine(); 
contentStream. ShowText(text2);

步骤9 - 结束文字

插入文本后,您需要使用 PDPageContentStream 类的 endText()方法结束文本,如下所示。

contentStream.endText();

步骤10 - 关闭内容流

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

contentstream.close();

步骤11 - 保存文档

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

doc.save("Path");

步骤12 - 关闭文档

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

doc.close();

完整示例

本示例演示了如何使用PDFBox在PDF中添加多行。将该程序保存在名为 AddMultipleLines.java。的文件中。

import java.io.File;
import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDType1Font;

public class AddMultipleLines { public static void main(String args[]) throws IOException {

  </span><span class="com">//加载现有文档</span><span class="pln">
  </span><span class="typ">File</span><span class="pln"> file </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">File</span><span class="pun">(</span><span class="str">"C:/PdfBox_Examples/my_pdf.pdf"</span><span class="pun">);</span><span class="pln">
  </span><span class="typ">PDDocument</span><span class="pln"> doc </span><span class="pun">=</span><span class="pln"> document</span><span class="pun">.</span><span class="pln">load</span><span class="pun">(</span><span class="pln">file</span><span class="pun">);</span><span class="pln">
   
  </span><span class="com">//创建PDF文档</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">1</span><span class="pun">);</span><span class="pln">  
   
  </span><span class="typ">PDPageContentStream</span><span class="pln"> contentStream </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">//开始内容流</span><span class="pln">
  contentStream</span><span class="pun">.</span><span class="pln">beginText</span><span class="pun">();</span><span class="pln"> 
   
  </span><span class="com">//将字体设置为内容流</span><span class="pln">
  contentStream</span><span class="pun">.</span><span class="pln">setFont</span><span class="pun">(</span><span class="pln"> </span><span class="typ">PDType1Font</span><span class="pun">.</span><span class="pln">TIMES_ROMAN</span><span class="pun">,</span><span class="pln"> </span><span class="lit">16</span><span class="pln"> </span><span class="pun">);</span><span class="pln">
   
  </span><span class="com">//设置Lead</span><span class="pln">
  contentStream</span><span class="pun">.</span><span class="pln">setLeading</span><span class="pun">(</span><span class="lit">14.5f</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//设置Line的位置</span><span class="pln">
  contentStream</span><span class="pun">.</span><span class="pln">newLineAtOffset</span><span class="pun">(</span><span class="lit">25</span><span class="pun">,</span><span class="pln"> </span><span class="lit">725</span><span class="pun">);</span><span class="pln">

  </span><span class="typ">String</span><span class="pln"> text1 </span><span class="pun">=</span><span class="pln"> </span><span class="str">"This is an example of adding text to a page in the pdf document.
     we can add as many lines"</span><span class="pun">;</span><span class="pln">
  </span><span class="typ">String</span><span class="pln"> text2 </span><span class="pun">=</span><span class="pln"> </span><span class="str">"as we want like this using the ShowText()  method of the
     ContentStream class"</span><span class="pun">;</span><span class="pln">

  </span><span class="com">//以字符串的形式添加文本</span><span class="pln">
  contentStream</span><span class="pun">.</span><span class="pln"> </span><span class="typ">ShowText</span><span class="pun">(</span><span class="pln">text1</span><span class="pun">);</span><span class="pln">
  contentStream</span><span class="pun">.</span><span class="pln">newLine</span><span class="pun">();</span><span class="pln">
  contentStream</span><span class="pun">.</span><span class="pln"> </span><span class="typ">ShowText</span><span class="pun">(</span><span class="pln">text2</span><span class="pun">);</span><span class="pln">
  </span><span class="com">//结束内容流</span><span class="pln">
  contentStream</span><span class="pun">.</span><span class="pln">endText</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">"Content added"</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//关闭内容流</span><span class="pln">
  contentStream</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="kwd">new</span><span class="pln"> </span><span class="typ">File</span><span class="pun">(</span><span class="str">"C:/PdfBox_Examples/new.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 AddMultipleLines.java 
java AddMultipleLines

执行后,上述程序将给定的文本添加到文档中并显示以下消息。

Content added

如果您在指定路径中验证PDF文档 new.pdf ,则可以看到给定的内容以多行添加到文档中,如下所示。

Adding multiplelines

参考链接

www.learnfk.com/pdfbox/pdfb…