Вопрос по itext, java, ubuntu-12.04, pdf-generation, web-applications – Редактируемые .pdf поля исчезают (но видны в фокусе поля) после сохранения с evince

4

Прежде всего, позвольте мне поблагодарить SO-сообщество за то, что оно помогало мне много раз в прошлом; вы, ребята, удивительный ресурс!

На своей работе я работаю над веб-приложением, которое использует шаблоны PDF, созданные в Scribus, и библиотеку Java iText для заполнения шаблонов данными из нашей базы данных. Иногда поле, предоставленное пользователем, является обязательным и не затрагивается iText. Когда файл .pdf загружен, поле редактируется, и копия сохраняется вместе с Evince. Полученный файл не будет отображать отредактированный текст при повторном открытии. Однако после фокусировки отредактированного поля он покажет сохраненный текст. Не сфокусировано, текст исчезает. Вырежьте текст, вставьте обратно в поле; он остается видимым - пока вы не сохраните и не откроете документ заново. После сохранения и повторного открытия исходная проблема проявляется. Я'Мы нашли много чрезвычайно похожих сообщений по этой проблеме, но ни одно из решений, которые, кажется, не работают для меня.

Кроме того, проблема причудлива. Если я открою шаблон Scribus (файл .pdf, не тронутый iText) с помощью Evince, а затем отредактирую поля и сохраню их, они будут правильно отображаться при повторном открытии. Однако когда библиотека касается шаблона, возникает проблема. Точно так же я могу воспроизвести проблему с файлами PDF, которые я обнаружил при поиске причины этой проблемы; как этот:

http://www.quask.com/samples/pdfforms/pcpurchase.pdf

Это заставляет меня поверить, что неправильно работающие файлы могут быть каким-то образом повреждены, и что iText может быть причиной моей проблемы, но iText не 'т единственная возможность, в которой я могу воспроизвести проблему, поэтому яЯ не уверен, что думать. Я могу'Кажется, я не могу найти работающего решения среди многихвидел. Кто-нибудь достаточно знаком с этой проблемой, чтобы сказать мне, где я могу докопаться до сути или предложить некоторое представление об инструментах, которые я использую?я использую? Скорее всего, если вы ищете проблему с помощью Google I 'Я видел это .. Я '

используя Ubuntu 12.04 (точный), Evince 3.4.0, iText 2.1.5, и может попытаться сообщить вам любую другую важную информацию по запросу. Я'м опасается размещать любой код, как яя не уверен, что это кошерный, и он отлично работает для построения форм, за исключением этой конкретной проблемы; не говоря уже о том, что я могу воспроизвести проблему без использования нашего веб-приложения.

Это мой первый пост здесь, и я начинающий программист (все еще учусь в школе!), Поэтому, пожалуйста, дайте мне знать, если я нарушил какие-либо соглашения или могу каким-либо образом улучшить свои будущие запросы.

Спасибо за любую помощь, которую вы можете предложить!

Если это не "известен" проблема, и кто-то может немедленно опубликовать решение, пожалуйста, предоставьте образец в трех соответствующих состояниях, то есть не тронутый, измененный с iText и, наконец, снова измененный с evince. Однако следует помнить, что версия iText, которую вы используете, несколько древняя. если вы вообще можете обновить (т. е. изменение лицензии на AGPL / Commercial и рефакторинг aren 'в вашем проекте), сделайте это. mkl
Состояния файла (на диске Google, так что выпридется подать -> Скачать): - Нетронутый шаблон:docs.google.com/open?id=0B1rikLVn5cwmcC1iQXMzV2prVkk       - После iText:docs.google.com/open?id=0B1rikLVn5cwmM2VCMm1sZktPa1U       - После iText и отредактировано Evince:docs.google.com/open?id=0B1rikLVn5cwmbGR3NEE3VWpucUU jbowman

Ваш Ответ

2   ответа
1

Зачем поля не отображаются должным образом и содержат гораздо больше информации, чем я могу предоставить в отношении проблемы. Тем не менее, предлагаемое исправление в ответеs комментарии не работали, потому что документы генерируются (в данном конкретном случае) с использованием iText 2.1.5PdfCopyFields, который не уважает (лишает) оригинал документа 's NeedAppearances флаг и вызовsetNeedAppearances(true) заAcroForm не решил вопрос из-за этого.

ВзломcreateAcroForms() метод вPdfCopyFieldsImp включить строку

form.put(PdfName.NEEDAPPEARANCES, PdfBoolean.PDFTRUE);

это то, что в конечном итоге, похоже, решило проблему для меня. Благодаря этому добавлению evince правильно отображает изменения в полях после сохранения и повторного открытия документа.

Если возможно, я бы предложил обновить itext. (Я знаю, что иногда это невозможно, например, из-за странных управленческих решений) mkl
4

предоставленных jbowman в комментариях к его вопросу - с особым вниманием к полю пароля (которое является одним из полей, которые заполняет evince) - показывает:

Template.pdf

исходная форма, сгенерированная Scribus PDF Library 1.4.1.svn;содержит AcroForm с 9 полями и флагом NeedAppearances, установленным в true;имеет поле пароля (с именем passwordField), которое содержит пустое значение инормальный Внешний вид потока рисует прямоугольник с пустым текстом.

after_itext.pdf

оригинальная форма, отредактированная iText 2.1.5, к сожалению, не в режиме добавления, которая облегчила бы анализ;содержит Acroform с 8 полями (поле с номером участника заполнено и сплющено) без флага NeedAppearances;имеет значение поля пароля (с именем passwordField: u4woYY1FK9) и внешний вид остался без изменений.

after_itext_edited.pdf

форма, ранее отредактированная iText, теперь редактируемая другим программным обеспечением (evince) в режиме добавления;содержит Acroform с 8 полями без флага NeedAppearances; единственные изменения были внесены в поля passwordField: u4woYY1FK9 и memberPrefix: u4woYY1FK9:имеет поле пароля (с именем passwordField: u4woYY1FK9) с новым связанным значениемASDF но оставил свои появления нетронутыми;имеет поле префикса участника (с именем memberPrefix: u4woYY1FK9) с новым связанным значениемASDF но оставил свои появления нетронутыми.

Таким образом, наблюдается поведение, при котором значение по умолчанию не отображается, следует ожидать:

У финальной Acroform нет флага NeedAppearances. Этот флаг определен в спецификацииISO 32000-1: 2008 как:

Флаг, указывающий, следует ли создавать потоки внешнего вида и словари внешнего вида для всех аннотаций виджетов в документе (см. 12.7.3.3, «Переменный текст »). Значение по умолчанию: false.

Таким образом, ваш PDF-документ в его окончательной форме гласит: не нужно создавать виджеты для виджетов (например, визуализация полей AcroForm), возьмите видимости из документа.

Внешний вид поля пароля из документа - оригинальный, прямоугольник с пустым текстом.

Итак, вы видите этот пустой прямоугольник.

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

Если редактирование PDF-файлов с помощью evince предназначено для получения видимых результатов, то измените их при изменении значения полейдолжен также добавьте обновленные потоки внешнего вида или убедитесь, что установлен флаг AcroForm NeddAppearances. Таким образом, это то, где не удалось показать.

Спасибо, что нашли время для анализа этих файлов, я ценю это! Поэтому, если моя интерпретация вашего анализа верна, iText убирает флаг NeedAppearances из Template.pdf; поскольку after_itext.pdf не имеет установленного флага NeedAppearances, а Template.pdf делает это. Может ли это быть причиной того, что Evince в конечном итоге потерпел неудачу, или вы думаете, что это строго проблема, относящаяся к Evince и, следовательно, не решаемая через iText? jbowman
(По какой-то причине я пропустил ваш комментарий здесь. Но для файлов :) Правильно, iText убирает флаг NeedAppearances, так как все поля имеют правильные потоки внешнего вида, когда iText сохраняет файл, а установка NeedAppearances в некоторых ситуациях вызывает проблемы. Тем не менее, вы можете попросить iText установить флаг NeedAppearances,AcroForm имеетsetNeedAppearances метод для такой ситуации. Таким образом, iText может скрыть проблему в evince. mkl
В версиях 5.4.x поведение itext изменилось, теперь он оставляет флаг NeedAppearances как есть. Это вызывает другие проблемы, однако. Таким образом, возможно, это снова изменится в будущем. mkl

Похожие вопросы