Pdfbox 简明教程

PDFBox - Adding Multiple Lines

在上一章提供的示例中,我们讨论了如何向 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";

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

single line extended

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

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

Steps

以下是创建空白文档并在其中向页面添加内容的步骤。

Step 1: Loading an Existing Document

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

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

Step 2: Getting the Required Page

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

PDPage page = doc.getPage(1);

Step 3: Preparing the Content stream

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

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

Step 4: Beginning the Text

在 PDF 文档中插入文本时,您可以使用 PDPageContentStream 类的 beginText()endText() 方法指定文本的开始和结束点,如下所示。

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

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

contentStream.beginText();

Step 5: Setting the Position of the Text

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

//Setting the position for the line
contentStream.newLineAtOffset(25, 700);

Step 6: Setting the Font

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

contentStream.setFont( font_type, font_size );

Step 7: Setting the Text Leading

您可以按如下所示使用 setLeading() 方法设置文本前导。

contentStream.setLeading(14.5f);

Step 8: Inserting Multiple Strings Using newline()

您可以按如下所示使用 PDPageContentStream 类的 ShowText() 方法插入多个字符串,方法是使用 newline() 方法将它们逐个分割。

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

Step 9: Ending the Text

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

contentStream.endText();

Step 10: Closing the PDPageContentStream

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

contentstream.close();

Step 11: Saving the Document

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

doc.save("Path");

Step 12: Closing the Document

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

doc.close();

Example

本例演示如何使用 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 {

      //Loading an existing document
      File file = new File("C:/PdfBox_Examples/my_pdf.pdf");
      PDDocument doc = document.load(file);

      //Creating a PDF Document
      PDPage page = doc.getPage(1);

      PDPageContentStream contentStream = new PDPageContentStream(doc, page);

      //Begin the Content stream
      contentStream.beginText();

      //Setting the font to the Content stream
      contentStream.setFont( PDType1Font.TIMES_ROMAN, 16 );

      //Setting the leading
      contentStream.setLeading(14.5f);

      //Setting the position for the line
      contentStream.newLineAtOffset(25, 725);

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

      //Adding text in the form of string
      contentStream. ShowText(text1);
      contentStream.newLine();
      contentStream. ShowText(text2);
      //Ending the content stream
      contentStream.endText();

      System.out.println("Content added");

      //Closing the content stream
      contentStream.close();

      //Saving the document
      doc.save(new File("C:/PdfBox_Examples/new.pdf"));

      //Closing the document
      doc.close();
   }
}

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

javac AddMultipleLines.java
java AddMultipleLines

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

Content added

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

adding multiplelines