【发布时间】: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