【问题标题】:Add Bookmarks to PDF using iTextSharp使用 iTextSharp 将书签添加到 PDF
【发布时间】:2014-08-18 12:55:09
【问题描述】:

我有一个很大的 PDF 文件,想使用 iTextSharp 将一些页面复制到一个新的 PDF 文件中。 这适用于以下代码。

Dim sourceFullFilePathAndName As String = "src.pdf"
Dim outputFullFilePathAndName As String = "cpy.pdf"
Dim pageFirst As Integer = 5
Dim pageLast As Integer = 10

Using rdr As iTextSharp.text.pdf.PdfReader = New iTextSharp.text.pdf.PdfReader(sourceFullFilePathAndName)
    Dim docSrc As New iTextSharp.text.Document(rdr.GetPageSizeWithRotation(1))
    Using fs = New System.IO.FileStream(outputFullFilePathAndName, System.IO.FileMode.Create)
        Dim copy As New iTextSharp.text.pdf.PdfCopy(docSrc, fs)
        docSrc.Open()
        Dim bookmarks = New List(Of Dictionary(Of String, Object))() 'New ArrayList() '// changed
        For pagenumber As Integer = pageFirst To pageLast
            Dim ip = copy.GetImportedPage(rdr, pagenumber)

            If pagenumber = pageFirst Then '// changed
                Dim h = ip.Height '// changed
                Dim test = New Dictionary(Of String, Object) 'New Hashtable() '// changed
                test.Add("Action", "GoTo") '// changed
                test.Add("Title", "Page1 0 H 0") '// changed
                test.Add("Page", "1 XYZ 0 " & h.ToString & " 0") '// changed
                bookmarks.Add(test) '// changed
            End If '// changed

            copy.AddPage(ip)
        Next
        copy.Outlines = bookmarks '// changed - got exception here!
        docSrc.Close()
    End Using
    rdr.Close()
End Using

但我不知道如何为每个新页面添加书签。 我找到了一些像Bookmark to specific page using iTextSharp 4.1.6 这样的示例,但无法解决我的问题。

更新: 我添加了我如何尝试创建标有'//更改的书签的代码 顺便提一句。我正在使用 iTextSharp v5.4.4。 我收到以下异常: 无法将类型为“System.Collections.ArrayList”的对象转换为类型“System.Collections.Generic.IList1[System.Collections.Generic.Dictionary2[System.String,System.Object]]”。 所以我再次使用字典列表而不是哈希表进行了更改。现在我没有收到错误消息,但也没有收到任何书签。

【问题讨论】:

  • 您添加到问题的链接解决了您的问题。但是,你说它没有。这很令人困惑。根据该示例向我们展示您尝试了哪些方法,以及为什么这不能解决您的问题。
  • 你还在迷茫还是缺少什​​么?
  • 我不熟悉您使用的编程语言,但是像伪代码一样阅读您的代码,我不明白您为什么要创建每个入口指向的大纲树新文档的第 1 页:test.Add("Page", "1 XYZ 0 " & h.ToString & " 0")。您应该跟踪添加到copy 的页数并使用适当的页码。例如:如果 document1 有 5 页,则 document2 第一页的书签应该指向第 6 页而不是第 1 页。
  • 不,它不是伪代码,而是 VB.Net。我只是想看看它是否适用于第一页的一个书签。如果它有效,我必须修改它以添加多个书签。所以如果你能帮我解决这个问题,那就太好了。
  • 此示例适用于我:itextpdf.com/sandbox/merge/MergeWithOutlines 它解释了如何创建具有层次结构的大纲树以及如何将其添加到PdfCopy 实例中。不要指望我帮你把这个例子转换成 VB.Net。我最后一次编写 Visual Basic 代码是在 1996 年。

标签: pdf itextsharp bookmarks


【解决方案1】:

试试

    Dim oReader As PdfReader
    oReader = New PdfReader(file name)
    Dim book_mark As New List(Of Dictionary(Of String, Object))
    book_mark = SimpleBookmark.GetBookmark(oReader)

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 2018-11-17
相关资源
最近更新 更多