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

C#使用iTextSharp獲取PDF文件書簽信息的操作方法

 更新時(shí)間:2024年04月09日 09:56:59   作者:JosieBook  
C# iTextSharp是一個(gè)用于處理PDF文件的源庫,它提供了一系列的功能,包括創(chuàng)建PDF文件,以及提取和操作PDF文件中的內(nèi)容,本文給大家介紹了C#使用iTextSharp獲取PDF文件書簽信息的操作方法,需要的朋友可以參考下

一、新建項(xiàng)目,引用iTextSharp.dll

新建Winform項(xiàng)目,并且下載iTextSharp.dll,并在項(xiàng)目中引用。

二、獲取PDF的書簽

using iTextSharp.text.pdf;
using System;
using System.Collections.Generic;

// 遞歸函數(shù),用于獲取指定書簽下的所有子書簽并保持結(jié)構(gòu)
List<Dictionary<string, object>> GetAllSubBookmarks(List<Dictionary<string, object>> bookmarks, string parentTitle)
{
    List<Dictionary<string, object>> result = new List<Dictionary<string, object>>();

    foreach (var bookmark in bookmarks)
    {
        string title = (string)bookmark["Title"];

        if (title == parentTitle)
        {
            if (bookmark.ContainsKey("Kids"))
            {
                List<Dictionary<string, object>> kids = (List<Dictionary<string, object>>)bookmark["Kids"];
                foreach (var subBookmark in kids)
                {
                    Dictionary<string, object> subBookmarkWithChildren = new Dictionary<string, object>();
                    subBookmarkWithChildren["Title"] = subBookmark["Title"];
                    subBookmarkWithChildren["Page"] = subBookmark["Page"];
                    subBookmarkWithChildren["Kids"] = GetAllSubBookmarks(kids, (string)subBookmark["Title"]);

                    result.Add(subBookmarkWithChildren);
                }
            }
        }
    }

    return result;
}

// 加載PDF文件
PdfReader reader = new PdfReader("your_pdf_file_path.pdf");

// 獲取PDF的目錄信息
List<Dictionary<string, object>> bookmarks = SimpleBookmark.GetBookmark(reader);

// 獲取第一個(gè)書簽下的所有子書簽并保持結(jié)構(gòu)
string parentTitle = (string)bookmarks[0]["Title"];
List<Dictionary<string, object>> allSubBookmarks = GetAllSubBookmarks(bookmarks, parentTitle);

// 輸出所有子書簽
foreach (var subBookmark in allSubBookmarks)
{
    Console.WriteLine("Sub-Title: " + subBookmark["Title"] + ", Page: " + subBookmark["Page"]);
    if (subBookmark.ContainsKey("Kids"))
    {
        foreach (var childBookmark in (List<Dictionary<string, object>>)subBookmark["Kids"])
        {
            Console.WriteLine("  Child Title: " + childBookmark["Title"] + ", Page: " + childBookmark["Page"]);
        }
    }
}

// 關(guān)閉PDF閱讀器
reader.Close();
  1. 定義遞歸函數(shù) GetAllSubBookmarks :

    • 這個(gè)函數(shù)通過遞歸方式獲取指定書簽下的所有子書簽并保持結(jié)構(gòu)。它接受兩個(gè)參數(shù):書簽列表和父書簽的標(biāo)題。
    • 函數(shù)首先創(chuàng)建一個(gè)空的結(jié)果列表 result 用于存儲(chǔ)子書簽信息。
    • 然后遍歷書簽列表中的每個(gè)書簽,如果書簽的標(biāo)題與指定的父標(biāo)題匹配,則繼續(xù)處理該書簽。
    • 如果該書簽包含子書簽(即有 “Kids” 鍵),則遞歸調(diào)用 GetAllSubBookmarks 函數(shù)來獲取子書簽,并將子書簽信息添加到當(dāng)前書簽的子書簽列表中。
    • 最后,將當(dāng)前書簽及其子書簽信息添加到結(jié)果列表中,并最終返回結(jié)果列表。
  2. 加載PDF文件和獲取目錄信息:

    • 使用 PdfReader 類加載指定的PDF文件。
    • 使用 SimpleBookmark.GetBookmark(reader) 方法獲取PDF文件的目錄信息,并將其存儲(chǔ)在 bookmarks 列表中。
  3. 獲取第一個(gè)書簽下的所有子書簽:

    • 從目錄信息中獲取第一個(gè)書簽的標(biāo)題,然后調(diào)用 GetAllSubBookmarks 函數(shù)來獲取該書簽下的所有子書簽,并將結(jié)果存儲(chǔ)在 allSubBookmarks 列表中。
  4. 輸出所有子書簽:

    • 遍歷 allSubBookmarks 列表,輸出每個(gè)子書簽的標(biāo)題和頁碼信息。
    • 如果子書簽包含子書簽(即有 “Kids” 鍵),則繼續(xù)遍歷并輸出每個(gè)子書簽的標(biāo)題和頁碼信息。
  5. 關(guān)閉PDF閱讀器:

    • 使用 reader.Close() 方法關(guān)閉PDF文件閱讀器。

三、拓展:

C#使用iTextSharp合并多個(gè)PDF

多個(gè)PDF的頁大小要一致

/// <summary>
/// 合并多個(gè)pdf
/// </summary>
/// <param name="fileList">pdf文件路徑集合</param>
/// <param name="outPath">最終pdf的輸出目錄</param>
/// <param name="width">pdf頁寬,mm</param>
/// <param name="height">pdf頁高,mm</param>
public static void 合并PDF(List<string> fileList, string outPath, float width, float height) {
    width = (float)(width * 2.83462677);//PDF的mm與實(shí)際mm有所區(qū)別
    height = (float)(height * 2.83462677);
    iTextSharp.text.pdf.PdfReader reader;
    iTextSharp.text.Document document = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(0, 0, width, height), 0, 0, 0, 0);
    using (FileStream fs = new FileStream(outPath, FileMode.Create)) {
        using (iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, fs)) {
            document.Open();
            iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent;
            iTextSharp.text.pdf.PdfImportedPage newPage;
            for (int i = 0; i < fileList.Count; i++) {
                using (reader = new iTextSharp.text.pdf.PdfReader(fileList[i])) {
                    int iPageNum = reader.NumberOfPages;
                    for (int j = 1; j <= iPageNum; j++) {
                        document.NewPage();
                        newPage = writer.GetImportedPage(reader, j);
                        cb.AddTemplate(newPage, 0, 0);
                    }
                }
            }
            document.Dispose();
        }
    }
}

C#使用itextsharp新建PDF文件

一、下載并引用itextsharp

itextsharp.dll在C#項(xiàng)目中引用。

二、新建PDF文件代碼

在當(dāng)前路徑下新建output.pdf文件并寫入一些內(nèi)容

using iTextSharp.text;  
using iTextSharp.text.pdf;  
  
// 創(chuàng)建一個(gè)Document對(duì)象  
Document doc = new Document();  
  
// 創(chuàng)建PdfWriter對(duì)象,將文檔內(nèi)容寫入輸出流中  
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream("output.pdf", FileMode.Create));  
  
// 打開文檔進(jìn)行寫入操作  
doc.Open();  
  
// 設(shè)置字體和字號(hào)  
BaseFont bfChinese = BaseFont.CreateFont(BaseFont.COURIER, BaseFont.WINANSI, BaseFont.EMBEDDED);  
Font bfChineseFont = new Font(bfChinese, 14);  
  
// 創(chuàng)建要添加的段落文本  
string rowInfo = "這是一個(gè)測試段落";  
Paragraph paragInfo = new Paragraph(rowInfo, bfChineseFont);  

doc.Add(paragInfo ); // 將寫入信息加入到文檔中
  
// 獲取段落所占的寬度  
// float columnWidth = ColumnText.GetColumnWidth(doc.PageSize.Width, doc.Top, doc.Bottom, paragInfo, Element.ALIGN_LEFT);  
// 計(jì)算左右頁邊距之間的距離  
// float marginDistance = columnWidth / 2; // 假設(shè)左右頁邊距相等,所以取寬度的一半作為距離  
// Console.WriteLine("左右頁邊距之間的距離: " + marginDistance + "像素");  
  
// 關(guān)閉文檔流和釋放資源  
doc.Close();

以上就是C#使用iTextSharp獲取PDF文件書簽信息的操作方法的詳細(xì)內(nèi)容,更多關(guān)于C# iTextSharp獲取PDF書簽信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

  • C# 泛型數(shù)組學(xué)習(xí)小結(jié)

    C# 泛型數(shù)組學(xué)習(xí)小結(jié)

    C# 泛型數(shù)組學(xué)習(xí)中我們需要注意什么事項(xiàng)呢?C# 泛型數(shù)組的使用又是如何呢?那么本文就向你詳細(xì)介紹這方面的內(nèi)容
    2012-09-09
  • winform開發(fā)使用通用多線程基類分享(以隊(duì)列形式)

    winform開發(fā)使用通用多線程基類分享(以隊(duì)列形式)

    多線程這個(gè)概念大家都很熟悉,對(duì)于winform的開發(fā)人員來說,用的還是多的.但估計(jì)都是用Timer,或者backgroundWorker,為大家寫了一個(gè)多線程的基類,只有你用到多線程拿過來就可以用了
    2013-12-12
  • C#實(shí)現(xiàn)XML序列化與反序列化

    C#實(shí)現(xiàn)XML序列化與反序列化

    這篇文章介紹了C#實(shí)現(xiàn)XML序列化與反序列化的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#使用Lambda表達(dá)式簡化代碼的示例詳解

    C#使用Lambda表達(dá)式簡化代碼的示例詳解

    Lambda,希臘字母λ,在C#編程語言中,被引入為Lambda表達(dá)式,表示為匿名函數(shù)(匿名方法)。本文將利用Lambda表達(dá)式進(jìn)行代碼的簡化,感興趣的可以了解一下
    2022-12-12
  • c# HttpClient設(shè)置超時(shí)的步驟

    c# HttpClient設(shè)置超時(shí)的步驟

    這篇文章主要介紹了c# HttpClient設(shè)置超時(shí)的步驟,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • Unity3D Shader實(shí)現(xiàn)鏡子效果

    Unity3D Shader實(shí)現(xiàn)鏡子效果

    這篇文章主要為大家詳細(xì)介紹了Unity3D Shader實(shí)現(xiàn)鏡子效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C#交錯(cuò)數(shù)組知識(shí)點(diǎn)分析

    C#交錯(cuò)數(shù)組知識(shí)點(diǎn)分析

    在本篇文章里小編給大家整理的是關(guān)于C#交錯(cuò)數(shù)組知識(shí)點(diǎn)分析,需要的朋友們參考下。
    2019-11-11
  • C#圖像處理之木刻效果實(shí)現(xiàn)方法

    C#圖像處理之木刻效果實(shí)現(xiàn)方法

    這篇文章主要介紹了C#圖像處理之木刻效果實(shí)現(xiàn)方法,可實(shí)現(xiàn)類似木刻效果的黑白照效果,需要的朋友可以參考下
    2015-04-04
  • C#實(shí)現(xiàn)json格式轉(zhuǎn)換成對(duì)象并更換key的方法

    C#實(shí)現(xiàn)json格式轉(zhuǎn)換成對(duì)象并更換key的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)json格式轉(zhuǎn)換成對(duì)象并更換key的方法,涉及C#操作json格式數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 最新評(píng)論

    屏东县| 林周县| 阿拉善盟| 托克逊县| 施甸县| 砀山县| 彭山县| 济阳县| 鄂尔多斯市| 鄂温| 许昌县| 陵川县| 清水县| 康保县| 郯城县| 高要市| 涪陵区| 高陵县| 宁波市| 米易县| 石棉县| 天柱县| 准格尔旗| 武宁县| 菏泽市| 石屏县| 吴堡县| 博白县| 隆昌县| 昆山市| 昌黎县| 仁布县| 伽师县| 广州市| 通河县| 什邡市| 嵊泗县| 巍山| 谷城县| 城步| 贵定县|