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
的文件中。
package com.yiibai;
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.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
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("F:/worksp/pdfbox/my_doc.pdf");
PDDocument doc = PDDocument.load(file);
//Creating a PDF Document
PDPage page = doc.getPage(1);
PDFont font = PDType0Font.load(doc, new File("c:/windows/fonts/times.ttf"));
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 );
System.out.println(" getName => "+font.getName());
// contentStream.setFont( font, 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.newLine();
contentStream.showText(text2);
contentStream.newLine();
//Ending the content stream
contentStream.endText();
System.out.println("Content added");
//Closing the content stream
contentStream.close();
//Saving the document
doc.save(new File("F:/worksp/pdfbox/new-mul-doc.pdf"));
//Closing the document
doc.close();
}
}
執行上面示例代碼後,在指定路徑中打開PDF文檔:new-mul-doc.pdf,則可以觀察到給定內容以多行添加到文檔中,如下所示。