Java PDF書籤——新增、編輯、刪除、讀取書籤

dav2100發表於2021-09-09

概述

本文介紹透過Java程式來操作PDF書籤,根據對書籤的不同操作要求,分以下情況來介紹:

1. 新增書籤(包括新增一級書籤、多級子書籤)

2. 編輯書籤(包括重置書籤標題、書籤樣式等)

3. 刪除書籤(包括刪除所有書籤、刪除子書籤等)

4. 讀取書籤

 

工具使用

程式使用輔助工具:Free Spire.PDF for Java(免費版),

方法1可下載,解壓並將lib資料夾下的jar檔案匯入java程式(手動匯入)

方法2 透過建立Maven專案程式,在pom.xml中配置maven倉庫路徑並指定Free Spire.PDF for Java 的依賴,配置完成後,在IDEA中,點選“Import Changes”匯入JAR包:

<repositories>        
  <repository>         
     <id>com.e-iceblue</id>           
        <url>        
     </repository>
</repositories> 

<dependencies> 
   <dependency> 
        <groupId>e-iceblue</groupId>   
        <artifactId>spire.pdf.free</artifactId>        
        <version>2.6.3</version>    
   </dependency>
</dependencies>

(Ecllipse的匯入方法,參考這篇

jar匯入結果如下圖所示:

圖片描述

程式碼示例

1. 新增書籤到PDF

 import com.spire.pdf.*;
 import com.spire.pdf.actions.PdfGoToAction;
 import com.spire.pdf.bookmarks.PdfBookmark;
 import com.spire.pdf.bookmarks.PdfTextStyle;
 import com.spire.pdf.general.PdfDestination;
 import com.spire.pdf.graphics.PdfRGBColor;
 
 import java.awt.*;
 import java.awt.geom.Point2D;
 
 
 public class AddBookmark {
     public static void main(String[] args) {
         //建立PdfDocument例項
         PdfDocument pdf = new PdfDocument();
         //載入PDF文件
         pdf.loadFromFile("test.pdf");
 
         //獲取第一頁
         PdfPageBase page = pdf.getPages().get(0);
 
         //新增書籤
         PdfBookmark bookmark = pdf.getBookmarks().add("第一部分 調查研究概述");
         bookmark.setDisplayStyle(PdfTextStyle.Bold);//設定字型樣式
         bookmark.setColor(new PdfRGBColor(new Color(139, 69, 19)));//設定字型顏色
         PdfDestination destination = new PdfDestination(page, new Point2D.Float(0, 0));//設定書籤的目標頁面和位置
         bookmark.setAction(new PdfGoToAction(destination));
 
 
         //新增二級子書籤
         PdfBookmark childBookmark = bookmark.add("第一節 菌種特性研究");
         childBookmark.setColor(new PdfRGBColor(new Color(255, 127, 80)));//設定字型顏色
         childBookmark.setDisplayStyle(PdfTextStyle.Italic);//設定字型樣式
         PdfDestination childDestination = new PdfDestination(page, new Point2D.Float(0, 100));//設定子書籤的目標頁面和位置
         childBookmark.setAction(new PdfGoToAction(childDestination));
 
 
         //新增三級子書籤
         PdfBookmark childBookmark1 = childBookmark.add("1. 菌種特性概念");
         childBookmark1.setColor(new PdfRGBColor(new Color(125, 152, 100)));//設定字型顏色
         childBookmark1.setDisplayStyle(PdfTextStyle.Italic);//設定字型樣式
         PdfDestination childDestination1 = new PdfDestination(page, new Point2D.Float(50, 100));//設定子書籤的目標頁面和位置
         childBookmark1.setAction(new PdfGoToAction(childDestination1));
 
         //儲存文件
         pdf.saveToFile("AddBookmarks.pdf");
         pdf.dispose();
     }
 }

書籤新增效果:

圖片描述


2. 編輯PDF中已有的書籤

 import com.spire.pdf.*;
 import com.spire.pdf.bookmarks.PdfBookmark;
 import com.spire.pdf.bookmarks.PdfTextStyle;
 import com.spire.pdf.graphics.PdfRGBColor;
 
 import java.awt.*;
 
 public class ModifyBookmark {
     public static void main(String[] args) {
         //建立PdfDocument例項
         PdfDocument pdf = new PdfDocument();
         //載入PDF文件
         pdf.loadFromFile("AddBookmarks.pdf");
 
         //獲取第一個書籤,修改書籤標題、字型顏色、字型樣式
         PdfBookmark bookmark = pdf.getBookmarks().get(0);
         bookmark.setTitle("新標題");
         bookmark.setColor(new PdfRGBColor(new Color(255,20,147)));
         bookmark.setDisplayStyle(PdfTextStyle.Bold);
 
         //修改子書籤的字型、顏色和字型樣式等
         for (int i = 0 ; i< pdf.getBookmarks().getCount(); i++ ) {
             //修改二級子書籤
             PdfBookmark childBookmark =  bookmark.get(0);
             childBookmark.setColor(new PdfRGBColor(new Color(148,0,211)));
             childBookmark.setDisplayStyle(PdfTextStyle.Italic);
 
             //修改三級子書籤
             PdfBookmark childBookmark1 = childBookmark.get(0);
             childBookmark1.setColor(new PdfRGBColor(new Color(255,215,0)) );
             childBookmark1.setDisplayStyle(PdfTextStyle.Italic);
         }
 
 
         //儲存文件
         pdf.saveToFile("ModifyBookmarks.pdf");
         pdf.close();
     }
 }

書籤編輯結果:

圖片描述


3. 刪除PDF中的書籤

import com.spire.pdf.*;
 
 
 public class DeleteBookmark {
     public static void main(String[] args) {
         //建立PdfDocument例項,載入PDF文件
         PdfDocument pdf = new PdfDocument();
         pdf.loadFromFile("AddBookmarks.pdf");
 
          //刪除第一個書籤(包括刪除其包含的子書籤)
          pdf.getBookmarks().removeAt(0);
 
         /*//僅刪除子書籤
         PdfBookmark childBookmark = pdf.getBookmarks().get(0);
         childBookmark.removeAt(0);*/
 
         //儲存文件
         pdf.saveToFile("RemoveBookmark.pdf");
         pdf.dispose();
     }
 }


4. 讀取PDF中的書籤

 import com.spire.pdf.*;
 import com.spire.pdf.bookmarks.PdfBookmark;
 import com.spire.pdf.bookmarks.PdfBookmarkCollection;
 
 import java.io.FileWriter;
 import java.io.IOException;
 
 public class GetBookmark {
     public static void main(String[] args) {
         //載入包含書籤的PDF文件
         PdfDocument pdf = new PdfDocument();
         pdf.loadFromFile("AddBookmarks.pdf");
 
         //獲取書籤集合
         PdfBookmarkCollection bookmarkCollection = pdf.getBookmarks();
 
         //例項化StringBuilder類
         StringBuilder stringbuilder = new StringBuilder();
 
         //定義方法獲取書籤
         GetBookmarkTitle(bookmarkCollection, stringbuilder);
 
         //宣告txt檔案,並將獲得的多級書籤寫入到檔案.txt
         FileWriter writer;
         try {
             writer = new FileWriter("讀取的書籤.txt");
             writer.write(stringbuilder.toString());
             writer.flush();
         } catch (IOException e) {
             e.printStackTrace();
         }
         pdf.dispose();
     }
     //定義方法獲取書籤標題
 static void GetBookmarkTitle(PdfBookmarkCollection bookmarkCollection, StringBuilder stringbuilder)
     {
         if (bookmarkCollection.getCount()> 0)
         {
             for(int i = 0 ; i< bookmarkCollection.getCount(); i++ )
             {
                 PdfBookmark parentBookmark = bookmarkCollection.get(i);
                 stringbuilder.append(parentBookmark.getTitle());
                 //遞迴文件多級書籤
                 GetBookmarkTitle(parentBookmark, stringbuilder);
             }
         }
     }
 }

書籤讀取結果:

圖片描述


(完)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4479/viewspace-2825946/,如需轉載,請註明出處,否則將追究法律責任。

相關文章