我的要求与这个问题中描述的相同:Bookmark to specific page using iTextSharp 4.1.6
我尝试了答案,但最后一行给出了以下错误:
Can not implicitly convert
ArrayList
toIList<Dictionar(strin,object)>
我不确定如何更正它。
报错的那一行,在上面链接的答案1中
wri.Outlines = bookmarks
我修改了这个例子:
List<Dictionary<string, object>> testData = new List<Dictionary<string, object>>(100);
// Just Sample data for understanding.
//for (int i = 0; i < 100; i++)
//{
var test = new Dictionary<string, object>
{
{ "Action", "GoTo"},
{ "Title", "Page1 0 H 0" },
{"Page", "1 XYZ 0 " + h + " 0" }
};
testData.Add(test);
//}
wri.Outlines = testData;
现在添加书签后,我无法打开 PDF,因为文件已损坏。
最佳答案
书签在 Chapter 7 中讨论你会在哪里找到 BookmarkedTimeTable例子。当您使用 iTextSharp (C#) 而不是 iText (Java) 时,您需要在 the list of examples ported to C# 中查找相应的示例。 ,更具体地说 BookmarkedTimeTable.cs .
更新问题后更新:
您的错误表明 testdata
不是真正的 IList<Dictionar(string,object)>
类型;请注意,我已将 g 添加到 strin 并假设这是您问题中的错字,而不是您的实际代码中的错字。
请从我书中的示例开始,然后逐渐更改该示例,直到您破解该代码。
根据额外评论更新:
当对 PDF 进行数字签名时,允许(或不允许)的操作数量有限。参见 Which operations are allowed on a digitally signed PDF?添加书签是不允许的操作,因此您必须在应用更改之前删除所有签名字段。根据您是要保留空签名字段还是完全删除该字段,您将使用方法 clearSignatureField()
或 removeField()
将签名字段的名称作为参数传递。你可以获得 ArrayList
使用 getSignatureNames()
的名称方法(参见 ÀcroFields
)。
关于c# - 使用 C# 代码使用 iTextSharp 将页面书签添加到现有 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20702728/