【问题标题】:Edit pdf bookmark urls using C#使用 C# 编辑 pdf 书签 url
【发布时间】:2011-12-30 04:25:02
【问题描述】:

我有一个 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
                 }
             }

【问题讨论】:

  • 您使用的是哪个 PDF 操作库?
  • 我已更新您的标签以反映。请记住包含与您的问题相关的所有标签(作为标签和标题中的 not)。
  • 这些是真正的 Pdf 书签吗?它们是否出现在 Acrobat 的“书签”面板中?或者它们只是页面上的超链接?如果是后者,那么请看这篇帖子stackoverflow.com/a/8141831/231316
  • 为什么这个问题被否决了?

标签: c# itextsharp bookmarks


【解决方案1】:

您可以分两步完成此操作。

  1. 从父 PDF 中获取书签,就像上面的代码 sn-p 一样。遍历 IList 并进行任何需要的更改。
  2. 使用PdfReader 再次打开父 PDF。然后用您在第 1 步中更新的内容覆盖现有书签:
PdfReader reader = new PdfReader(PARENT-PDF-FILE);
using (PdfStamper stamper = new PdfStamper(reader, YOUR-STREAM)) {
  stamper.Outlines = bmProperties;
}

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

【讨论】:

    【解决方案2】:

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

    PDFsharp bookmarks in text

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

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-26
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 2012-04-18
      • 2012-02-29
      相关资源
      最近更新 更多