一些背景:我正在使用iTextSharp预填充Adobe字段,并显示/隐藏相关层。PDF是在InDesign中创建的,并以Adobe (Interactive)和Acrobat层的形式导出。
当试图使用{stamper}.GetPdfLayers()访问层时,我被抛出了一个.GetPdfLayers。
复制该问题的源:
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上获得
发布于 2017-02-21 16:10:10
抱歉,不是真正的问题。问题解决了。会像J.Steen的笔记那样做一个GIT拉。
https://stackoverflow.com/questions/42371423
复制相似问题