C# 新增、修改和刪除PDF書籤
有時候我們在閱讀PDF文件時會遇到這樣一種情況:PDF文件頁數比較多,但是又沒有書籤,所以我們不能根據書籤快速瞭解文件所講解的內容,也不能點選書籤快速跳轉到相應的位置,而只能一頁一頁的翻閱,非常苦惱。相信開發人員在開發和PDF有關的應用程式時,也會有這樣的功能需求,因此在這篇文章中我就介紹一下如何使用程式設計的方式(C#)和Spire.PDF元件給PDF文件新增書籤(包括新增書籤到現有文件和新增子書籤),以及修改和刪除現有PDF文件中的指定書籤。
Spire.PDF元件概述
Spire.PDF是一個專業的PDF元件,用於在.NET應用程式中建立,編輯,處理和閱讀PDF文件。支援豐富的PDF文件處理操作,如PDF文件合併/拆分、轉換(如HTML轉PDF,PDF轉圖片等)、列印(包括靜默列印)、壓縮、新增/修改/刪除書籤、添加註釋、安全設定(包括數字簽名)、建立與填充域、圖片插入與提取、文字提取與高亮等。它不依賴Adobe Acrobat,因此執行環境無需安裝Adobe Reader或其他類似元件。 該元件分為商業版和免費版(不是試用版)兩種,一般個人使用或者操作的PDF文件不超過10頁時,可以使用免費版。
關於它的安裝,有很多種渠道,包括官網以及開發者最喜歡和常用的NuGet方式。在Visual Studio的 NuGet Package Manager Console中輸入以下PowerShell命令回車,元件的dll就會自動地引用到專案中:
PM> Install-Package Spire.PDF
新增、修改和刪除PDF書籤的實現
一、新增書籤
1.1 新增書籤
在Spire.PDF中,每個PDF文件都有一個書籤列表(PdfBookmarkCollection)。我們可以通過PdfDocument物件的Bookmarks屬性來獲取該列表,然後通過Add () 方法將書籤新增到列表中。
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
//新建PDF文件 PdfDocument pdf = new PdfDocument(); //新增頁面 PdfPageBase page = pdf.Pages.Add(); //新增書籤 PdfBookmark bookmark = pdf.Bookmarks.Add("第一頁"); //設定書籤所指向的頁面和位置,(0,0)表示頁面的開始位置 bookmark.Destination = new PdfDestination(page); bookmark.Destination.Location = new PointF(0, 0); //設定書籤的文字格式和顏色 bookmark.DisplayStyle= PdfTextStyle.Bold; bookmark.Color = Color.Black; //儲存文件 pdf.SaveToFile("Bookmark2.pdf");
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
1.2 新增子書籤
新增子書籤和新增普通書籤的方式基本一樣,不同的是普通書籤是直接新增到文件的書籤列表裡,而子書籤則是新增到父書籤的列表裡。
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
//新建PDF文件 PdfDocument pdf = new PdfDocument(); //新增頁面 PdfPageBase page = pdf.Pages.Add(); //新增書籤 PdfBookmark bookmark = pdf.Bookmarks.Add("第一章 熱傳導"); //設定書籤指向的頁面和位置 bookmark.Destination = new PdfDestination(page); bookmark.Destination.Location = new PointF(0, 0); //設定書籤的文字格式和顏色 bookmark.DisplayStyle = PdfTextStyle.Bold; bookmark.Color = Color.SeaGreen; //新增子書籤 PdfBookmark childBookmark = bookmark.Insert(0, "1.1 熱傳導基本知識"); //設定子書籤指向的頁面和位置 childBookmark.Destination = new PdfDestination(page); childBookmark.Destination.Location = new PointF(400, 300); //設定子書籤的文字格式和顏色 childBookmark.DisplayStyle = PdfTextStyle.Regular; childBookmark.Color = Color.Black; //儲存文件 pdf.SaveToFile("ChildBookmark.pdf");
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
1.3 新增書籤到現有文件
除了在新建的PDF文件裡新增書籤,我們還可以給現有的PDF文件新增書籤。載入PDF文件的方法除LoadFromFile以外,還有LoadFromStream (從流載入),LoadFromHTML(從HTML載入)等,可根據自己的需求選擇相應的載入方式。
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
//載入文件 PdfDocument pdf = new PdfDocument(); pdf.LoadFromFile("示例.pdf"); for (int i = 0; i < pdf.Pages.Count; i++) { //新增書籤 PdfBookmark bookmark = pdf.Bookmarks.Add(string.Format("第{0}章", i+1)); //設定書籤指向的頁面和位置 bookmark.Destination = new PdfDestination(pdf.Pages[i]); bookmark.Destination.Location = new PointF(0, 0); //設定書籤的文字格式和顏色 bookmark.DisplayStyle = PdfTextStyle.Bold; bookmark.Color = Color.Black; } //儲存文件 pdf.SaveToFile("Bookmark2.pdf");
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
2. 修改書籤
Spire.PDF支援多種書籤修改方式,例如修改現有書籤的內容,插入新書籤到現有書籤列表,插入子書籤到現有書籤等。這裡我選取修改書籤內容和插入新書籤到現有書籤列表進行介紹。
2.1 修改現有書籤內容
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
//載入文件 PdfDocument pdf = new PdfDocument(); pdf.LoadFromFile("Bookmark2.pdf"); //獲取書籤列表 PdfBookmarkCollection bookmarks = pdf.Bookmarks; //獲取第一個書籤 PdfBookmark bookmark = bookmarks[0]; //修改書籤指向的頁面 bookmark.Destination = new PdfDestination(document.Pages[1]); //修改書籤的文字格式和顏色 bookmark.DisplayStyle = PdfTextStyle.Bold; bookmark.Color = Color.Green; //修改書籤的title bookmark.Title = "修改"; //儲存文件 pdf.SaveToFile("ModifyBookmark.pdf");
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
2.2 插入新書籤到現有書籤列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//載入文件
PdfDocument
pdf = new PdfDocument();
pdf.LoadFromFile( "Bookmark2.pdf" );
//插入新書籤到指定位置(此處插入的是第三個書籤的位置)
PdfBookmark
bookmark = pdf.Bookmarks.Insert(2, "新增第三章" );
//設定書籤所指向的頁面和位置
bookmark.Destination
= new PdfDestination(document.Pages[1]);
bookmark.Destination.Location
= new PointF(0,
300);
//儲存文件
pdf.SaveToFile( "InsertBookmark.pdf" );
|
3. 刪除書籤
刪除書籤時,可以使用書籤的序號,也可以使用書籤的名稱。這裡我使用的是序號的方式。
![複製程式碼](http://common.cnblogs.com/images/copycode.gif)
//載入文件 PdfDocument pdf = new PdfDocument(); pdf.LoadFromFile("Bookmark2.pdf"); //獲取書籤列表 PdfBookmarkCollection bookmarks = document.Bookmarks; //刪除第一個書籤 bookmarks.RemoveAt(0); //儲存文件 pdf.SaveToFile("DeleteBookmark.pdf");