一点背景:我使用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
答案 0 :(得分:0)
道歉,不是一个实际的问题。问题解决了。根据J Steen的说明,你会做一个GIT拉动。