一点背景:我正在使用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 回答
道歉,不是一个实际的问题 . 问题解决了 . 根据J Steen的说明,将做一个GIT拉动 .