【问题标题】:iTextSharp pdfStamper.GetPdfLayers() KeyNotFoundExceptioniTextSharp pdfStamper.GetPdfLayers() KeyNotFoundException
【发布时间】:2017-02-21 15:26:52
【问题描述】:

一点背景知识:我正在使用 iTextSharp 预填充 Adob​​e Sign 字段并显示/隐藏相关图层。该 PDF 是在 InDesign 中创建并导出为带有 Acrobat 图层的 Adob​​e 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”的源码路径中的 PdfStamperImp.cs 第 1802 行的 AddOrder 函数中追踪到了这个错误。

具体错误发生在第 1808 行,其中使用了不存在的键来查询 Dictionary:

layer = ocgmap[obj.ToString()];

最简单的修复方法是将这一行更改为以下内容:

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

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

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

【问题讨论】:

  • 当您提出并回答自己的问题时,您需要在适当的位置发布一个问题,然后是一个答案。当您点击“提问”按钮时,甚至可以选择执行此操作。请遵循网站的既定格式。
  • 但除此之外,继续努力!为什么不同时向原始存储库提交拉取请求并修复错误?
  • 谢谢,一定错过了。由于我不熟悉使用 GIT,因此将在下周按照指南进行拉取请求。

标签: c# pdf itext layer


【解决方案1】:

道歉,不是一个实际的问题。问题解决了。将按照 J Steen 的说明进行 GIT 拉取。

【讨论】:

    猜你喜欢
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多