使用 C# 编辑 pdf 书签 url

发布于 2024-12-23 13:40:22 字数 765 浏览 1 评论 0原文

我有一个 pdf 文件,其中包含不同章节的书签(每个章节都使用书签链接到单独文件夹中的另一个 pdf 文件)。单击每个章节名称将在同一父 pdf 文件中打开一个新 pdf。

我需要检索父 pdf 文件的书签 url 并更改 URL。我使用下面的代码来检索书签属性(操作、文件、标题等),但是没有成功更改路径,因为它是字典键值对。

 IList<Dictionary<String, Object>> bmProperties= SimpleBookmark.GetBookmark(new PdfReader(new RandomAccessFileOrArray("http://XXXX/Shared%20Documents/Chapters.pdf"),
null));

        foreach (IDictionary<String, Object> bmProperty in bmProperties)
        {

            foreach (var fileProperty in bmProperty.Keys)
            {
                if (fileProperty == "File")
                {
                  // need the edit the value of Key-"File". Will it be possible to alter the value using pdfwriter
                 }
             }

I have a pdf file which has bookmarks to different chapters(each chapter is linked to another pdf file in seperate folder using bookmarks). clicking on each chaptername will open a new pdf in the same parent pdf file.

I need to retrieve the bookmark urls of parent pdf file and alter the URLs.I used below code to retrieve bookmark properties(Action,File,Title etc), however didn't succeed in altering the path as it is dictionary key value pair.

 IList<Dictionary<String, Object>> bmProperties= SimpleBookmark.GetBookmark(new PdfReader(new RandomAccessFileOrArray("http://XXXX/Shared%20Documents/Chapters.pdf"),
null));

        foreach (IDictionary<String, Object> bmProperty in bmProperties)
        {

            foreach (var fileProperty in bmProperty.Keys)
            {
                if (fileProperty == "File")
                {
                  // need the edit the value of Key-"File". Will it be possible to alter the value using pdfwriter
                 }
             }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

子栖 2024-12-30 13:40:22

您可以通过两步完成此操作。

  1. 从父 PDF 中获取书签,如上面的代码片段所示。迭代 IList 并进行任何所需的更改。
  2. 使用 PdfReader 再次打开父 PDF。然后用您在步骤 1 中更新的内容覆盖现有书签:
PdfReader 阅读器 = new PdfReader(PARENT-PDF-FILE);
使用 (PdfStamper stamper = new PdfStamper(reader, YOUR-STREAM)) {
  stamper.Outlines = bmProperties;
}

请注意,在第 1 步中,您必须考虑一些 bmProperty(上面代码中的IDictionary)如果您的书签具有嵌套级别,本身可能是Dictionary对象。

You can accomplish this in two steps.

  1. Get the bookmarks from the parent PDF like in your code snippet above. Iterate over the IList and make any needed changes.
  2. Open the parent PDF again a second time with a PdfReader. Then overwrite the existing bookmarks with what you updated in step 1:
PdfReader reader = new PdfReader(PARENT-PDF-FILE);
using (PdfStamper stamper = new PdfStamper(reader, YOUR-STREAM)) {
  stamper.Outlines = bmProperties;
}

Note that in step 1 you must take into account that some of the bmProperty (IDictionary from your code above) values may themselves be Dictionary<String, Object> objects, if your bookmarks have nested levels.

一梦等七年七年为一梦 2024-12-30 13:40:22

我对 itextsharp 对您的要求没有太多信心..但是还有另一个库 PDFSharp 具有一些很好的书签功能...

文本中的 PDFsharp 书签

http://www.pdfsharp.net/wiki/Bookmarks-sample.ashx

问候。

i don't have much confidence about itextsharp about your requirement.. but there is another library PDFSharp that has some good bookmark functionality...

PDFsharp bookmarks in text

http://www.pdfsharp.net/wiki/Bookmarks-sample.ashx

Regards.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文