apache pdfbox - как проверить, расправлен ли документ? - PullRequest
0 голосов
/ 23 января 2020

Я написал следующий маленький Java main метод. Он принимает (жестко запрограммированный в целях тестирования!) PDF-документ, который, как я знаю, содержит активные элементы в форме, и его нужно сгладить.

public static void main(String [] args) {

    try {
        // for testing
        Tika tika = new Tika();
        String filePath = "<path-to>/<pdf-document-with-active-elements>.pdf";
        String fileName = filePath.substring(0, filePath.length() -4);
        File file = new File(filePath);
        if (tika.detect(file).equalsIgnoreCase("application/pdf")) {
            PDDocument pdDocument = PDDocument.load(file);
            PDAcroForm pdAcroForm = pdDocument.getDocumentCatalog().getAcroForm();
            if (pdAcroForm != null) {
                pdAcroForm.flatten();
                pdAcroForm.refreshAppearances();

                pdDocument.save(fileName + "-flattened.pdf");
            }
            pdDocument.close();
        }
    }
    catch (Exception e) {
        System.err.println("Exception: " + e.getLocalizedMessage());
    }
}

Какой тип теста подтвердит File(<path-to>/<pdf-document-with-active-elements>-flattened.pdf), сгенерированный этим кодом будет на самом деле плоским?

1 Ответ

1 голос
/ 23 января 2020

Какой тип теста подтвердит, что файл, сгенерированный этим кодом, фактически будет плоским?

Загрузите этот документ заново и проверьте, есть ли в нем какие-либо поля формы. PDAcroForm (если вообще существует PDAcroForm).

Если вы хотите быть внимательным, также итерируйте по страницам и убедитесь, что с ними не связаны аннотации Widget больше.

И чтобы быть по-настоящему тщательным, дополнительно определите положения и содержимое полей перед выравниванием и примените извлечение текста в этих положениях к свернутому pdf. Это подтверждает, что форма была не просто отброшена, а действительно выровнена.

...