2016-10-06 9 views
1

My PDFファイルにボタンにイベントが添付されています。プログラムでイベントを変更できるようにする必要があります。私はiTextSharpを使ってこの方法を試しましたが、新しいファイルでjavascriptを変更しませんでした。プログラムでPDFファイルのJavaScriptイベントを変更するにはどうすればよいですか?

var pdfReader = original PdfReader(originalPdfDocumentPath);

pdfReader.RemoveUsageRights();

var pdfStamper = new PdfStamper(pdfReader、 )新しい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)");

pdfStamper.AcroFields.Xfa.DomDocument.InnerXml = newXml; //残念ながら、この行は何もしません。

pdfStamper.Close();

pdfReader.Close();

ご協力いただければ幸いです。

+0

コードの周囲にコードブロックを使用してください。 – Dorian

+0

ボタンに付けられたJavascriptとxfaフォームのxmlは2つの異なるものです。この例は、あなたの道であなたを助けるかもしれません:http://developers.itextpdf.com/content/best-itext-questions-stackoverview/actions-and-annotations/itext7-how-add-onmouseover-javascript-action-textfield –

+0

私が変更する必要があるスクリプトは、XFA内部の動的なフォームの中にあります。私の例では、元のスクリプトが変数originalXmlに表示されます。私が知る必要があるのは、Xfa.DomDocument.InnerXmlをnewXml文字列に置き換える方法です。 –

答えて

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で拡張機能を無効にする、ということに注意してください。以下は、修正されたコードです。あなたはこのここに関するより多くの情報を見つけることができます:

http://developers.itextpdf.com/question/why-do-i-get-error-saying-use-extended-features-no-longer-available

「問題は、あなたの文書はReaderが有効かどうかに関係しているリーダーの有効化が唯一のアドビのソフトウェアを使用して行うことができますそれはプロセスです。有効な署名が存在する場合、Adobe Readerで特定の機能(署名時の使用権で定義されている)がロック解除されます このようなPDFの内容を変更すると、サイン。"

関連する問題