0

我正在使用PdfDictionary并编写以下内容

PdfDictionary sv = new PdfDictionary();
sv["/Type"] = new PDFName("/SV");
sv["/Filter"] = new PDFName("Abc");
sv["/Ff"] = new PDFNumber(1);

signame.Dictionary["/SV"] = sv;
PDFArray arReasons = new PDFArray();
arReasons.Add(new PDFString(string.Format("CToken::{0}", customxml)));
arReasons.Add(new PDFString(reason));
v.Put(PdfName.arReasons);

但它给了我以下错误搜索了很多但没有积极的结果

Error   1   Cannot apply indexing with [] to an expression of type 'iTextSharp.text.pdf.PdfDictionary'  C:\Users\lenovo\Dropbox\updated C# app\WindowsFormsApplication1\WindowsFormsApplication1\Form2.cs   134 17  WindowsFormsApplication1

我得到的其他错误是: -

Error   9   'iTextSharp.text.pdf.PdfName' does not contain a definition for 'arReasons' C:\Users\lenovo\Dropbox\updated C# app\WindowsFormsApplication1\WindowsFormsApplication1\Form2.cs   145 32  WindowsFormsApplication1

Error   3   'string' does not contain a definition for 'Dictionary' and no extension method 'Dictionary' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)   C:\Users\lenovo\Dropbox\updated C# app\WindowsFormsApplication1\WindowsFormsApplication1\Form2.cs   141 25  WindowsFormsApplication1

Error   8   The name 'reason' does not exist in the current context C:\Users\lenovo\Dropbox\updated C# app\WindowsFormsApplication1\WindowsFormsApplication1\Form2.cs   144 45  WindowsFormsApplication1

以防万一有人也帮助我

4

1 回答 1

2

PdfDictionary键是PdfName对象,因此如果有索引运算符,则不能使用string. 由于PdfDictionary似乎没有实现索引运算符,因此您可以这样做:

PdfDictionary sv = new PdfDictionary();
sv.Put(PdfName.TYPE, PdfName.SV);
sv.Put(PdfName.FILTER, new PdfName("Abc"));
sv.Put(PdfName.FF, new PdfNumber(1));

请注意使用已设置为这些名称的静态成员,并且您不需要在任何名称字符串前加上“/”前缀。

另外,确保检查输出的语法和语义。iTextSharp 不会为您执行此操作(据我所知),最终结果是损坏的 PDF,也许 Acrobat 会默默接受,但对所有其他 PDF 用户来说都是痛苦的。我以编写 PDF 工具为生,并经常质疑其他 PDF 制作者的父母的婚姻状况,当我看到缺少必需的键、空必需值、不可解析的日期时间字符串和字典中的名称为 //Foobar 而不是 /Foobar (仅举几个)。

于 2012-11-29T13:36:40.167 回答