最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#代碼實(shí)現(xiàn)讀取并導(dǎo)出PDF書簽

 更新時間:2026年04月16日 11:47:27   作者:LAYONTHEGROUND  
PDF 書簽(大綱)是文檔導(dǎo)航的核心要素,本文將介紹如何使用 Free Spire.PDF for .NET 庫,通過 C# 代碼完整讀取 PDF 文件中的所有書簽,感興趣的小伙伴可以了解下

PDF 書簽(大綱)是文檔導(dǎo)航的核心要素,尤其對于長文檔或技術(shù)手冊,提取書簽信息可用于生成目錄、索引或進(jìn)行文檔結(jié)構(gòu)分析。本文將介紹如何使用 Free Spire.PDF for .NET 庫,通過 C# 代碼完整讀取 PDF 文件中的所有書簽(包括多級嵌套書簽),并將標(biāo)題、顯示樣式等信息導(dǎo)出到文本文件。

1. 環(huán)境準(zhǔn)備

1.1 安裝免費(fèi)庫

在 Visual Studio 中通過 NuGet 包管理器安裝 Free Spire.PDF

Install-Package FreeSpire.PDF

該免費(fèi)版本支持讀取 PDF 書簽等基礎(chǔ)操作,無需額外授權(quán)文件,但有單文件10頁的頁數(shù)限制。

1.2 引用命名空間

代碼中需要引入以下命名空間:

using System;
using System.IO;
using System.Text;
using Spire.Pdf;
using Spire.Pdf.Bookmarks;

2. 核心實(shí)現(xiàn)邏輯

整體流程分為四步:

  1. 加載目標(biāo) PDF 文檔。
  2. 獲取文檔的 PdfBookmarkCollection 書簽集合。
  3. 遞歸遍歷每個書簽及其子書簽,提取標(biāo)題和顯示樣式。
  4. 將提取的內(nèi)容寫入文本文件。

2.1 加載文檔并獲取書簽集合

PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile(@"D:\test.pdf");
PdfBookmarkCollection bookmarks = pdf.Bookmarks;

Bookmarks 屬性返回一個集合,包含頂層書簽。如果文檔沒有書簽,Count 為 0。

2.2 遞歸遍歷書簽樹

書簽結(jié)構(gòu)是典型的樹形結(jié)構(gòu):每個書簽節(jié)點(diǎn)可能擁有子書簽集合(通過 Count 屬性和索引器訪問)。我們設(shè)計兩個方法:

  • GetBookmarks:處理頂層書簽,創(chuàng)建 StringBuilder 并啟動遞歸。
  • GetChildBookmark:遞歸處理子書簽。
public static void GetBookmarks(PdfBookmarkCollection bookmarks, string result)
{
    StringBuilder content = new StringBuilder();
    if (bookmarks.Count > 0)
    {
        content.AppendLine("Pdf bookmarks:");
        foreach (PdfBookmark parentBookmark in bookmarks)
        {
            // 獲取標(biāo)題
            content.AppendLine(parentBookmark.Title);
            // 獲取顯示樣式(如普通、粗體、斜體等)
            content.AppendLine(parentBookmark.DisplayStyle.ToString());
            // 遞歸處理子書簽
            GetChildBookmark(parentBookmark, content);
        }
    }
    File.WriteAllText(result, content.ToString());
}

遞歸方法:

public static void GetChildBookmark(PdfBookmark parentBookmark, StringBuilder content)
{
    if (parentBookmark.Count > 0)
    {
        foreach (PdfBookmark childBookmark in parentBookmark)
        {
            content.AppendLine(childBookmark.Title);
            content.AppendLine(childBookmark.DisplayStyle.ToString());
            GetChildBookmark(childBookmark, content);
        }
    }
}

2.3 完整代碼示例

以下是一個控制臺應(yīng)用程序的完整實(shí)現(xiàn),將書簽信息輸出到 GetPdfBookmarks.txt 文件。

using System;
using System.IO;
using System.Text;
using Spire.Pdf;
using Spire.Pdf.Bookmarks;

namespace GetBookmark
{
    internal class Program
    {
        static void Main(string[] args)
        {
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile(@"D:\testp\test.pdf");

            PdfBookmarkCollection bookmarks = pdf.Bookmarks;
            string result = "GetPdfBookmarks.txt";
            GetBookmarks(bookmarks, result);

            Console.WriteLine("書簽提取完成,結(jié)果已保存至:" + result);
        }

        public static void GetBookmarks(PdfBookmarkCollection bookmarks, string result)
        {
            StringBuilder content = new StringBuilder();
            if (bookmarks.Count > 0)
            {
                content.AppendLine("Pdf bookmarks:");
                foreach (PdfBookmark parentBookmark in bookmarks)
                {
                    content.AppendLine(parentBookmark.Title);
                    content.AppendLine(parentBookmark.DisplayStyle.ToString());
                    GetChildBookmark(parentBookmark, content);
                }
            }
            else
            {
                content.AppendLine("該 PDF 文檔不包含任何書簽。");
            }
            File.WriteAllText(result, content.ToString());
        }

        public static void GetChildBookmark(PdfBookmark parentBookmark, StringBuilder content)
        {
            if (parentBookmark.Count > 0)
            {
                foreach (PdfBookmark childBookmark in parentBookmark)
                {
                    content.AppendLine(childBookmark.Title);
                    content.AppendLine(childBookmark.DisplayStyle.ToString());
                    GetChildBookmark(childBookmark, content);
                }
            }
        }
    }
}

3. 輸出格式說明

生成的文本文件每兩行代表一個書簽:第一行是標(biāo)題,第二行是顯示樣式。例如:

Pdf bookmarks:
第1章 簡介
Regular
1.1 背景
Bold
1.2 目標(biāo)
Italic
第2章 實(shí)現(xiàn)
Regular
2.1 環(huán)境搭建
Regular

DisplayStyle 是一個枚舉,可能的值包括:

  • Regular:普通文本
  • Bold:粗體
  • Italic:斜體

根據(jù) PDF 文件的實(shí)際書簽樣式,輸出結(jié)果會相應(yīng)變化。

4. 注意事項(xiàng)與擴(kuò)展

4.1 書簽可能為空

若 PDF 沒有書簽,bookmarks.Count 為 0,代碼會寫入提示信息,避免空文件。

4.2 目標(biāo)頁碼與動作的獲取

上述示例僅獲取了標(biāo)題和樣式。如果需要獲取書簽跳轉(zhuǎn)的目標(biāo)頁碼,可以使用 PdfBookmark.Action 屬性(需判斷動作類型)。例如:

if (parentBookmark.Action is PdfGoToAction goToAction)
{
    int pageIndex = pdf.Pages.IndexOf(goToAction.Destination.Page);
    content.AppendLine($"跳轉(zhuǎn)至第 {pageIndex + 1} 頁");
}

由于 Free Spire.PDF 對 Action 的支持較為完整,可根據(jù)實(shí)際需求擴(kuò)展。

4.3 性能考慮

對于包含數(shù)千個書簽的 PDF,遞歸遍歷不會有明顯性能問題。但若需頻繁提取,可考慮將 StringBuilder 替換為 StreamWriter 流式寫入,降低內(nèi)存占用。

4.4 編碼處理

File.WriteAllText 默認(rèn)使用 UTF-8 編碼,如需指定編碼(如 GB2312),可改用 StreamWriter。

5. 總結(jié)

本文演示了如何利用免費(fèi) .NET 庫完整提取 PDF 文檔的多級書簽信息。關(guān)鍵技術(shù)點(diǎn)包括:

  • 通過 PdfDocument.Bookmarks 獲取根書簽集合。
  • 遞歸遍歷 PdfBookmark 節(jié)點(diǎn)的 Count 和索引器。
  • 讀取 TitleDisplayStyle 屬性。
  • 將結(jié)構(gòu)化數(shù)據(jù)寫入文本文件。

這種方法不依賴 Adobe Acrobat 或其他 GUI 工具,非常適合集成到后臺服務(wù)或文檔處理管道中。開發(fā)者可以根據(jù)上述模式進(jìn)一步擴(kuò)展,獲取書簽的頁碼、縮放方式甚至修改書簽結(jié)構(gòu)。

到此這篇關(guān)于C#代碼實(shí)現(xiàn)讀取并導(dǎo)出PDF書簽 的文章就介紹到這了,更多相關(guān)C#讀取并導(dǎo)出PDF書簽 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

厦门市| 吴旗县| 永嘉县| 招远市| 城固县| 汕头市| 普格县| 桂林市| 门源| 财经| 当雄县| 盐池县| 梧州市| 荣成市| 宝丰县| 无锡市| 宿迁市| 苗栗县| 周至县| 武隆县| 永泰县| 武穴市| 龙陵县| 乐昌市| 新和县| 攀枝花市| 搜索| 诏安县| 建昌县| 越西县| 景泰县| 齐齐哈尔市| 商洛市| 巢湖市| 鄂温| 旬阳县| 宜丰县| 澄城县| 吉安县| 合作市| 巴塘县|