PDFBox - 添加多行

在上一章提供的示例中,我们讨论了如何向 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("文档路径");
PDDocument doc = PDDocument.load(file);

步骤 2:获取所需页面

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

PDPage page = doc.getPage(1);

步骤 3:准备内容流

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

PDPageContentStream contentStream = new PDPageContentStream(doc, page);

步骤 4:开始文本

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

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

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

contentStream.beginText();

步骤 5:设置文本的位置

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

//设置行的位置
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:关闭 PDPageContentStream

使用 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 {

        //加载现有文档
        File file = new File("C:/PdfBox_Examples/my_pdf.pdf");
        PDDocument doc = document.load(file);
        
        //创建 PDF 文档
        PDPage page = doc.getPage(1);
        
        PDPageContentStream contentStream = new PDPageContentStream(doc, page);
        
        //开始内容流
        contentStream.beginText();
        
        //将字体设置为内容流
        contentStream.setFont( PDType1Font.TIMES_ROMAN, 16 );
        
        //设置行距
        contentStream.setLeading(14.5f);
        
        //设置行的位置
        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";
        
        //以字符串形式添加文本
        contentStream. ShowText(text1);
        contentStream.newLine();
        contentStream. ShowText(text2);
        //结束内容流
        contentStream.endText();
        
        System.out.println("Content added");
        
        //关闭内容流
        contentStream.close();
        
        //保存文档
        doc.save(new File("C:/PdfBox_Examples/new.pdf"));
        
        //关闭文档
        doc.close();
   }
}

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

javac AddMultipleLines.java
java AddMultipleLines

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

Content added

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

Adding multiplelines