iTextSharp pdfStamper.GetPdfLayers()KeyNotFoundException

时间:2017-02-21 15:26:53

标签: c# pdf itext layer

一点背景:我使用iTextSharp预填充Adobe Sign字段并显示/隐藏相关图层。 PDF是在InDesign中创建的,并使用Acrobat图层导出为Adobe PDF(交互式)。

尝试使用{stamper} .GetPdfLayers()访问图层时,我收到了 KeyNotFoundException

复制问题的来源:

string __sourceFileName = @"C:\Test\agreement.pdf";
string __destFileName = @"C:\Test\agreement - Updated.pdf";

using (FileStream outFile = new FileStream(__destFileName, FileMode.Create))
{
    PdfReader pdfReader = new PdfReader(__sourceFileName);
    PdfStamper pdfWriter = new PdfStamper(pdfReader, outFile);

    var __layers = pdfWriter.GetPdfLayers();

    pdfWriter.Close();
    pdfReader.Close();
}

我下载了iTextSharp源并将此错误跟踪到< src \ core \ iTextSharp \ text \ pdf&#34源路径中PdfStamperImp.cs第1802行的 AddOrder 函数;

特定错误发生在第1808行,其中不存在的密钥用于查询字典:

layer = ocgmap[obj.ToString()];

最简单的修复方法是将此单行改为:

layer = (ocgmap.ContainsKey(obj.ToString())) ? ocgmap[obj.ToString()] : null;

重建源后,将返回PDF图层而不会出现错误。 我希望这可以帮助其他遇到错误的人。

iTextSharp源代码可在GitHub上找到:https://github.com/itext/itextsharp

1 个答案:

答案 0 :(得分:0)

道歉,不是一个实际的问题。问题解决了。根据J Steen的说明,你会做一个GIT拉动。