Библиотека iText PDFXFA: проблема с некоторыми полями при выравнивании с помощью flattenXDP().

Я пытаюсь сгладить XFA PDF, используя библиотеку iText pdfxfa. При выравнивании PDF-файла с помощью демонстрационного приложения, предоставленного iText, я правильно вставляю все данные в свой PDF-файл. Но когда я пытаюсь сделать это с помощью своего кода, все обстоит иначе. Данные для текстовых полей, флажков встраиваются правильно, но для имен вложений. Под «вложениями» я имею в виду: динамическая форма может содержать внутри себя другой PDF-файл (вложение). «Вложение» можно добавить в PDF-файл с помощью кнопок, имеющихся в XFA-файле PDF. Ниже приведен код, который я использую для выравнивания PDF. Я скопировал XFA PDF с помощью iText RUPS в отдельный файл и использовал его как InputStream в XFA flattenXDP().

private void flattenXFA(String flattenedPDFDest) throws FileNotFoundException, IOException, InterruptedException {
    FileOutputStream fos = new FileOutputStream(flattenedPDFDest);
    XFAFlattener xfaf = new XFAFlattener();
    // The XFA for the PDF is copied from iText RUPS in the phshuman10.xfa.xml file.
    xfaf.flattenXDP(new FileInputStream("/home/NetBeansProjects/kitext/resources/phshuman10.xfa.xml"), fos);
    fos.close();
}

Ссылка на ZIP-файл всех необходимых PDF-файлов: https://drive.google.com/file/d/0B6w278NcMSCrT2p6cWQxZG0yYVU/view?usp=sharing

Название PDF в zip:

  1. Сглаженный PDF с использованием демонстрации itext: checkResult.pdf

  2. Образец заполненной копии формы: PHSHumanSubjectsAndClinicalTrialsInfo-V1.0 (10).pdf

  3. Сглаженный PDF с использованием моего кода: tt_flattened3.pdf

  4. Файл XFA для PHSHumanSubjectsAndClinicalTrialsInfo-V1.0 (10).pdf: phshuman10.xfa.xml

При необходимости мой сценарий можно адекватно воспроизвести с использованием загруженных ресурсов! Заранее спасибо.


person mark42inbound    schedule 03.10.2017    source источник


Ответы (1)


Это ожидаемое поведение. Если вы откроете исходную форму XFA в виде файла PDF в средстве просмотра PDF, вы увидите, что в этом файле PDF есть 4 вложения. Сам XFA представляет собой формат на основе XML, который может быть встроен в PDF, и он может фактически взаимодействовать с файлом PDF с помощью некоторых API-интерфейсов JavaScript.

Что происходит, так это то, что в вашей форме код JavaScript в вашей форме XFA взаимодействует с файлом PDF (скорее всего, с помощью проприетарного API Acrobat) и может извлекать вложения.

Когда вы пытаетесь сгладить чистый пакет XDP, вы извлекаете из PDF только XML, который отвечает за определение формы XFA, некоторые наборы данных и т. д., но не извлекаете ничего, связанного с самим файлом PDF: шрифты, изображения, вложения.

Если форма XFA использует некоторые ресурсы PDF, вы не сможете свести их на 100% правильно, как в исходной форме, содержащейся в PDF.

Таким образом, если ресурсы PDF используются в форме XFA, вам придется свести форму PDF напрямую с помощью метода flatten(InputStream, OutputStream), который принимает входной поток для PDF, содержащего форму XFA, и выходной поток для результирующего сведенного файла PDF.

person Alexey Subach    schedule 06.10.2017