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";
将上一章节示例中的字符串文本替换为上述字符串并执行它。执行后,您将收到以下输出。
如果您仔细观察输出,您会注意到只显示了字符串的一部分。
为了在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类的beginText()和endText()方法指定文本的起始点和结束点,如下所示。
contentStream.beginText(); ……………………….. code to add text content ……………………….. contentStream.endText();
因此,使用beginText()方法开始文本,如下所示。
contentStream.beginText();
步骤5:设置文本位置
使用newLineAtOffset()方法,您可以设置页面中内容流上的位置。
//Setting the position for the 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:关闭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 { //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,您可以观察到给定内容已按如下所示以多行添加到文档中。