Нет текста при печати PDF, созданного с помощью iText 7

Доброго времени суток, коллеги-разработчики!

У меня проблема при печати PDF-файлов, которые я автоматически сгенерировал с помощью приложения Java с использованием iText 7. Когда я распечатываю такой PDF-файл, распечатка содержит все изображения и графику, но не содержит никакого текста.

Может кто подскажет, в чем может быть проблема? Я пробовал опцию «печать как изображение» в Adobe и получил тот же результат.

Большое Вам спасибо.

ИЗМЕНИТЬ / Добавлен код и ссылка:

Ссылка на созданный таким образом файл PDF

document = new Document(new PdfDocument(new PdfWriter(new FileOutputStream(dest))));        
this.form = PdfAcroForm.getAcroForm(document.getPdfDocument(), true);
PdfTextFormField fw1Field = PdfTextFormField.createText(document.getPdfDocument(),
                        new Rectangle(Variables.llx, Variables.lly, Variables.urx, Variables.ury), "Feld1");
fw1Field.setValue(fw1);
fw1Field.setReadOnly(Variables.readonly);
fw1Field.setBorderColor(Color.WHITE);
form.addField(fw1Field);

PdfTextFormField fsText = PdfTextFormField.createText(document.getPdfDocument(),
                        new Rectangle(Variables.llx + 150, Variables.lly, Variables.urx  + 50, Variables.ury), "FSText");
fsText.setValue("Freigabeschein:");
fsText.setBackgroundColor(Variables.backgroundColourText);
fsText.setBorderColor(Color.WHITE);
fsText.setReadOnly(Variables.readonlyText);
fsText.setBorderColor(Color.WHITE);
form.addField(fsText);

PdfTextFormField idField = PdfTextFormField.createText(document.getPdfDocument(),
                        new Rectangle(Variables.llx + 250, Variables.lly, Variables.urx, Variables.ury), "Freigabeschein Nummer");
idField.setValue(id);
idField.setReadOnly(Variables.readonly);
idField.setBorderColor(Color.WHITE);
form.addField(idField);

PdfTextFormField datumText = PdfTextFormField.createText(document.getPdfDocument(),
new Rectangle(Variables.llx + 350, Variables.lly, Variables.urx, Variables.ury), "DatumText");
datumText.setValue("Datum:");
datumText.setBackgroundColor(Variables.backgroundColourText);
datumText.setBorderColor(Color.WHITE);
datumText.setReadOnly(Variables.readonlyText);
form.addField(datumText);

//more Text, created exactly as above

PdfButtonFormField buttonSpeichern = PdfFormField.createPushButton(document.getPdfDocument(), new Rectangle(450, 20, 100, 30), "speichern", "SPEICHERN");
buttonSpeichern.setBackgroundColor(Color.LIGHT_GRAY);
buttonSpeichern.setValue("Speichern");
buttonSpeichern.setVisibility(PdfFormField.VISIBLE_BUT_DOES_NOT_PRINT);
buttonSpeichern.setAdditionalAction(PdfName.D, PdfAction.createJavaScript("saveFSFunction(1);"));
form.addField(buttonSpeichern);

PdfButtonFormField buttonDrucken = PdfFormField.createPushButton(document.getPdfDocument(), new Rectangle(300, 20, 100, 30), "drucken", "DRUCKEN");
buttonDrucken.setBackgroundColor(Color.LIGHT_GRAY);
buttonDrucken.setValue("Drucken");                                             
buttonDrucken.setVisibility(PdfFormField.VISIBLE_BUT_DOES_NOT_PRINT);
buttonDrucken.setAdditionalAction(PdfName.D, PdfAction.createJavaScript("printFunction(1, 0, 1, \"FS\");"));
form.addField(buttonDrucken);

document.close();

person Harry    schedule 16.05.2017    source источник
comment
Поделитесь, пожалуйста, А) основной частью кода, используемого для создания PDF-файла. Б) образцом PDF-файла, в котором воспроизводится проблема.   -  person Amedee Van Gasse    schedule 16.05.2017
comment
Спасибо за ответ. Я добавил в фрагмент кода ссылку на образец PDF-файла с проблемой.   -  person Harry    schedule 16.05.2017
comment
Вы проверяли, настроили ли вы в Acrobat печать полей формы? Либо это, либо все ваши текстовые поля имеют видимость видимой, но не печатаемой. Хотя я не думаю, что это настройка по умолчанию при создании текстовых полей с помощью iText, и вы, похоже, не устанавливаете код, которым вы поделились здесь ...   -  person Samuel Huylebroeck    schedule 16.05.2017
comment
@SamuelHuylebroeck, большое вам спасибо. Мне пришлось установить все поля .setVisibility(0); Для visible не было перечисления, поэтому я предположил, что это стандартное поведение - очевидно, нет.   -  person Harry    schedule 16.05.2017
comment
@Harry В следующем выпуске будет один. Я помню, как некоторое время назад столкнулся с аналогичным вопросом о slackoverflow и добавил для него перечисление. Fyi, здесь нет ничего особенного в номере 0, другие параметры видимости сопоставлены с 1, 2 и 3, а оператор switch по умолчанию в методе установлен на параметр visible и print.   -  person Samuel Huylebroeck    schedule 16.05.2017
comment
@Harry Я добавил здесь объяснение корня проблемы и ее решение. Если вы думаете, что это достаточно хорошо, не могли бы вы принять это как ответ на вопрос? Просматривать комментарии в поисках решения - не всегда самое приятное занятие :)   -  person Samuel Huylebroeck    schedule 18.05.2017


Ответы (1)


Краткое объяснение проблемы и ее решение с помощью iText7:

Видимость виджета поля формы (т. Е. Представления, которое вы увидите в средстве просмотра или в печати) регулируется 32-битным целым числом без знака, которое хранится в записи /F словаря виджетов. Эта запись является необязательной, и значение по умолчанию - 0. Целое число интерпретируется как серия флагов, значение которых зависит от их положения, переходящего от младшего к старшему разряду. Флаг в позиции 3 управляет поведением виджета при печати. Если он установлен в 0, виджет никогда не будет напечатан.

В iText7 при создании аннотации textField запись /F не добавляется автоматически в словарь виджетов, если только значение не установлено явно с помощью PdfTextFormField.setVisibility(), поэтому поведение по умолчанию здесь будет примерно соответствовать VISIBLE_BUT_DO_NOT_PRINT.

В 7.0.2 и ранее нет ключевого слова для visible и print, но поведение реализовано как случай по умолчанию для PdfTextFormField.setVisibility(), вызов метода с любым номером, кроме 1,2 или 3, приведет к такому поведению. (1, 2 и 3 отображаются в HIDDEN, VISIBLE_BUT_DO_NOT_PRINT и HIDDEN_BUT_PRINTABLE) соответственно.

В версии 7.0.3 (все еще в разработке на момент написания) и далее ключевое слово VISIBLE было добавлено для удобства и во избежание путаницы.

person Samuel Huylebroeck    schedule 18.05.2017