c# - 使用 C# 代码使用 iTextSharp 将页面书签添加到现有 PDF

标签 c# pdf itext bookmarks

我的要求与这个问题中描述的相同:Bookmark to specific page using iTextSharp 4.1.6

我尝试了答案,但最后一行给出了以下错误:

Can not implicitly convert ArrayList to IList<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,因为文件已损坏。

最佳答案

请咨询official documentation .

书签在 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/

相关文章:

c# - 将字符串转换为 char* 到字符串(C# -> C -> C++)

C#单元测试代码题

c# - 无法使用iTextSharp读取一些PDF文件

Java iText 页脚

c# - 在触发碰撞器上播放动画

c# - 获取 WebBrowser 控件的后退/前进历史记录

r - 在跨设备和平台(尤其是PDF)的R图形中使用Unicode 'dingbat-like'字形

iphone - UIActivityView 不显示其他应用程序作为打开 pdf 的选项

java - 如何扩展现有 PDF 的页面大小以在 iText 中添加页脚

java - HtmlUtilities.decodeColor 的替代方案