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,則可以觀察到給定內容以多行新增到文件中,如下所示。