【问题标题】:Cannot access PDF doc pages/events from iTextSharp with JavaScript无法使用 JavaScript 从 iTextSharp 访问 PDF 文档页面/事件
【发布时间】:2012-08-21 21:25:19
【问题描述】:

理想情况下,我正在尝试使用 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);

这工作:(应用程序对象)

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);

我一直在寻找高低的答案,但一直没有找到,是的,有类似的问题,但要么没有答案,要么与我正在做的非常不同。

【问题讨论】:

  • JS API - 你检查过这个吗?坦率地说,我不清楚你想得到什么结果。
  • 我正在尝试使用 C# 和 iTextSharp 发送 javascript,以便它可以触发 PDF 中存在的事件或函数。 PDF 上的事件都没有触发,所以寻找一种方法来触发它们。
  • 有文档开始事件或类似事件。当有人打开 PDF 时触发。假设您可以在那里发布您的代码。请参阅此post,这可能对您有所帮助。很快 - 当文档打开时,家伙开始打印。
  • 此外,您可以尝试使用 Adob​​e Acroba(试用版?)添加所需的 javascript,并在其调试器中检查那里发生了什么。我也不清楚你的 js 代码中的 eApp 是什么?在我看来,这听起来像是 Adob​​e PDF JS 中没有的东西
  • 我正在尝试做的是访问我在这种情况下称为 eApp 的文档并触发事件或函数。我遇到的问题是我使用以下方法展平文件:write.FormFlatening = true;所以生成的表单不会执行其中的任何脚本,所以我试图在展平它之前通过 javascript 执行它。只需要像这样处理它:PdfAction js = PdfAction.JavaScript("eApp.Page1.FormPurpose_PolicyNumber.execEvent('click');", writer.Writer); livecycle里面对象的名字是xfa.form.eApp.page1

标签: javascript pdf itextsharp livecycle


【解决方案1】:

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

【讨论】:

  • 啊,谢谢,是的,这可能就是我最终要做的。感谢您的意见。
  • @CesarHerrera 刚刚意识到另一种可能的解决方案是使用 javascript 展平您的文档。所以人们会打开它,你的 JS 会启动并做你需要的。之后,您可以拼合您的文档。正如我所见,JS API 中有一些类似的功能
  • 啊,谢谢,我试图做这样的事情,但我发现的唯一东西是 .access 属性,例如,eApp.access = "protected" 但这与展平不同,是有扁平化命令吗?如果没有也没关系,我们可能只是在 c# 中做一些事情然后展平。
  • 请参阅 JS API 参考中的 Doc.flattenPages。假设这与 C# 中的 flatten 相同
  • 是的,很遗憾这在 Livecycle 上不起作用。至少从我读过的所有内容来看,它不起作用。
【解决方案2】:

就我而言,可行的解决方案是:

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。在您前往该领域的道路之前。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 2011-11-06
    • 1970-01-01
    • 2020-01-18
    • 2021-09-01
    • 1970-01-01
    • 2014-02-08
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多