首页 文章

iTextSharp pdfStamper.GetPdfLayers()KeyNotFoundException

提问于
浏览
0

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

当尝试使用 .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"源路径中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

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

相关问题