PDFTron:在 PDF 表单中查找日期字段的正确方法是什么

PDFTron: What is the proper way to find date fields in a PDF form

[PdfTron 5.2] 我有一个带有文本和日期字段的 PDF 表单。我想找到日期字段。 我可以使用 getActions() 获取该字段的操作。

field.getActions()

returns

{"F":[{"yc":"JavaScript","Gt":"AFDate_FormatEx(\"dd.mm.yyyy\");"}],
"K":[{"yc":"JavaScript","Gt":"...);","ey":null}]}

如您所见,日期在 actions.F[0].Gt 中。但是检查 actions.F[0].Gt for "AFDate" 似乎是错误的,那太低级了。

是否有更好的 API 函数来找出我有一个日期字段?

谢谢。

你是对的。 Gt 属性 被混淆和缩小,这是易变的,不打算使用。如果您需要 API,您应该参考我们的 documentation。除了少数几个(下面将使用其中一个),那里应该有所有东西,但如果您确实需要帮助,请随时与我们联系!

遗憾的是,目前 API 无法获取该类型。根据我有限的理解,字段的 "type" 是由附加的操作决定的,而不仅仅是特定的类型或标志。这表明所有字段都只是具有特殊格式化操作的文本字段,使其看起来像日期或数字字段。

在这种情况下,您必须检查格式化操作 (F),因为您已经注意到日期格式化功能 (AFDate_FormatEx).要从该操作中获取 JavaScript,您应该对文档中没有的操作使用 javascript 属性。但是,如果您控制台记录操作,您可以看到它。

这是一个例子:

const dateActionJs = /.+:"AFDate_FormatEx\(.*/;

instance.docViewer.on('annotationsLoaded', () => {
  const annotations = annotManager.getAnnotationsList();
  annotations.forEach(annot => {
    const actions = annot.getField().getActions();
    if (actions.F && actions.F[0] && actions.F[0].javascript && dateActionJs.test(actions.F[0].javascript)) { // F = Format Action
      console.log('Found Date');
    }
  });
});

如果有帮助请告诉我!

编辑:您可以搜索 AFDate 而不是 AFDate_FormatEx 这就足够了。