无法使用JavaScript从iTextSharp访问PDF文档页面/事件

Cannot access PDF doc pages/events from iTextSharp with JavaScript

本文关键字:文档 PDF 事件 访问 iTextSharp JavaScript      更新时间:2023-09-26

理想情况下,我尝试使用iTextSharp在PDF中触发事件。如果做不到,我想知道我是否可以触发一个函数。

基本上,我只是想通过javascript获取文档的句柄。

这适用于PDF

(使用LiveCycle):

eApp.Page1.FormPurpose_PolicyNumber::click - 

(JavaScript,客户端)

this.rawValue = "hello";

从C#中,我无法获得文档的句柄,在本例中为eApp

var reader = new PdfReader(pdfFileStream);
var writer = new PdfStamper(reader, outputStream);

THIS WORK:(应用程序对象)

PdfAction js =
    PdfAction.JavaScript(
        "app.alert('hello');",
        writer.Writer);
writer.Writer.AddJavaScript(js);

这不是:

PdfAction js =
    PdfAction.JavaScript(
        "eApp.Page1.FormPurpose_PolicyNumber.execEvent('click');",
        writer.Writer);
writer.Writer.AddJavaScript(js);

同样不起作用:

PdfAction js =
    PdfAction.JavaScript(
        "eApp.Page1.FormPurpose_PolicyNumber.rawValue= 'hello'",
        writer.Writer);
writer.Writer.AddJavaScript(js);

我到处寻找答案,但都没能找到,是的,也有类似的问题,但要么没有答案,要么与我正在做的非常不同。

根据您的最新评论,这是行不通的。iTextSharp只会在文档中添加一些脚本。该脚本将在一些客户端应用程序中启动,如Adobe Reader。它不会执行文档中的任何脚本。假设在您的情况下,使用c#对文档执行任何您想要的操作都比将表单扁平化设置为true保存文档更容易。

在我的案例中,工作解决方案是:

PdfReader reader = new PdfReader(this.pathToPDFTemplate);
...
PdfStamper stamper = new PdfStamper(reader, stream);
...
PdfAction action = PdfAction.JavaScript("this.xfa.form.form1.DesignArea.sfPart3.sfPart3_5.ck2.presence = 'hidden';", stamper.Writer);
stamper.Writer.SetAdditionalAction(PdfWriter.WILL_PRINT, action);
...

诀窍是在你的字段路径之前使用this.xfa.form。