PDFTron: как правильно найти поля даты в PDF-форме

[PdfTron 5.2] У меня есть PDF-форма с полями для текста и даты. Я хочу найти поля даты. Я могу получить действия поля с помощью getActions ().

field.getActions()

возвращается

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

Как видите, дата находится в actions.F[0].Gt. Но проверка actions.F[0].Gt на "AFDate" кажется неправильной, это слишком низкий уровень.

Есть ли лучшая функция API, чтобы узнать, что у меня есть поле даты?

Спасибо.


person Bernie    schedule 10.09.2019    source источник


Ответы (1)


Ты прав. Свойство Gt скрыто и уменьшено, оно непостоянно и не предназначено для использования. Если вам требуется API, обратитесь к нашей документации. Там должно быть все, кроме нескольких (одно из которых будет использовано ниже), но не стесняйтесь обращаться к нам, если вам действительно нужна помощь!

К сожалению, в настоящее время нет API для получения этого типа. Насколько я понимаю, «тип» поля определяется вложенными действиями, а не просто конкретным типом или флагом. Это говорит о том, что все поля являются просто текстовыми полями со специальными действиями по форматированию, чтобы они выглядели и ощущались как поле даты или числовое поле.

В этом случае вам нужно будет проверить действие форматирования (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, чего будет достаточно.

person Andy    schedule 12.09.2019
comment
Спасибо, вот и все (свойство javascript). Отличный ответ. - person Bernie; 12.09.2019
comment
Я только что немного обновил свой ответ. Вы можете искать AFDate вместо AFDate_FormatEx, что также будет работать. - person Andy; 12.09.2019