我的PDF文件有一个附加到按钮的事件。我需要能够以编程方式修改该事件。我试过这种方式使用iTextSharp,但它没有改变新文件中的javascript:
var pdfReader = new PdfReader(originalPdfDocumentPath);
pdfReader.RemoveUsageRights();
var pdfStamper = new PdfStamper(pdfReader, new FileStream(newPdfDocumentPath,FileMode.Create,FileAccess.Write,FileShare.None),' \ 0',true);
var originalXml = pdfReader.AcroFields.Xfa.DomDocument.InnerXml;
var newXml = originalXml.Replace(" Table2.Row1.instanceManager.removeInstance(1)"," Table2._Row1.removeInstance(this.parent.parent.index)&#34 );
pdfStamper.AcroFields.Xfa.DomDocument.InnerXml = newXml; //不幸的是,这条线没有任何作用。
pdfStamper.Close();
pdfReader.Close();
非常感谢任何帮助。
答案 0 :(得分:0)
我发现,如果不是直接更改XML,而是更改DomDocument并将XFA标记为已更改,则可以使用它。以下是更正后的代码:
var pdfReader = new PdfReader(originalPdfDocumentPath);
pdfReader.RemoveUsageRights();
var pdfStamper = new PdfStamper(pdfReader, new FileStream(newPdfDocumentPath, FileMode.Create, FileAccess.Write, FileShare.None), '\0', true);
var originalXml = pdfReader.AcroFields.Xfa.DomDocument.InnerXml;
var newXml = originalXml.Replace("Table2.Row1.instanceManager.removeInstance(1)", "Table2._Row1.removeInstance(this.parent.parent.index)");
/* New Code */
var doc = new XmlDocument();
doc.LoadXml(newXml);
pdfStamper.AcroFields.Xfa.DomDocument = doc;
pdfStamper.AcroFields.Xfa.Changed = true;
/* End of New Code */
pdfStamper.Close();
pdfReader.Close();
我应该注意,即使此代码更改了PDF文件中的javascript,它也会禁用Adobe Acrobat Reader中的扩展功能。您可以在此处找到有关此内容的更多信息:
“问题与您的文档是否启用了阅读器有关。阅读器启用只能使用Adobe软件完成。这是一个需要使用Adobe私钥进行数字签名的过程。当有效签名是目前,在Adobe Reader中解锁了特定功能(在签名时的使用权限中定义)。 您更改了此类PDF的内容,因此您打破了签名。“