概述
本文介紹通過Java程式來操作PDF書簽,根據對書簽的不同操作要求,分以下情況來介紹:
1. 添加書簽(包括添加一級書簽、多級子書簽)
2. 編輯書簽(包括重置書簽标題、書簽樣式等)
3. 删除書簽(包括删除所有書簽、删除子書簽等)
4. 讀取書簽
工具使用
程式使用輔助工具:Free Spire.PDF for Java(免費版),
方法1:可下載下傳jar包,解壓并将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>http://repo.e-iceblue.cn/repository/maven-public/</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);
}
}
}
}
書簽讀取結果:
(完)