2009-12-28 4 views
2

Есть ли у кого-нибудь опыт использования XFDF для pdf? Есть ли подводные камни в использовании этого подхода?Использование XFDF для pdf

Шаг 1 - Мне нужно создать pdf (adobe pro) с полями только для чтения, привязанными к элементам в XML. Это будет служить трафаретом для чрезмерного использования данных.

Шаг2 - Создайте пользовательские классы, которые генерируют XML-строку XFDF из данных в нашей базе данных.

Шаг 3 - Когда пользователь запрашивает PDF-файл, мы просто извлекаем данные из БД, создаем строку XFDF и стираем строку в браузере.

Главное преимущество этого архитектурного решения заключается в том, что нет необходимости хранить PDF-файлы в db или на жестком диске. Кроме того, я видел много реализаций внедрения в формате pdf, которые используют домашние пакетные процессы, которые являются ошибками и только создают другую «движущуюся часть» в приложении.

ответ

0

Я написал несколько XFDF, да. Ваш подход звучит хорошо.

Возможно, вы захотите рассмотреть FDF вместо XFDF. FDF может делать то, что XFDF не может ... Вы можете добавить скрипт (в пунктах «До» и «После») и изменить видимость полей. IIRC есть еще пара колоколов и свисток, но это те, которые я использую.

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

Потенциальная проблема с подобным подходом - это поля подписи. Вы должны сохранить PDF, чтобы сохранить срок действия подписи. Вы можете работать с этим, однако ... просто сохраняйте эти PDF-файлы, и когда кто-то запрашивает этот конкретный экземпляр, вы указываете [X] FDF в подписанной форме, а не на неподписанный шаблон.

FDF не сложнее написать, чем XML. Он использует синтаксис PDF за вычетом необходимости в таблице xref и с другим корневым объектом/макетом.

%FDF-1.2 
1 0 obj 
    <</FDF 
    <</Fields [ 
     <</T(name1)/V(value1)>> 
     << /T (name2) /V (value2) >> 
     <</T(list1) /Opt [ [(display1)(value1)] [(display2)(value2)] ] /v(value2) >> 
     ... 
     ] 
     /F (pathOrURLtoForm.pdf) 
     /JavaScript << 
     /Before (var foo = "blah";) 
     /After(someFunc/(/);) 
     >> 
    >> 
    >> 
endobj 
trailer 
<</Root 1 0 R>> 
%%EOF 

В разных местах есть несколько побегов, но в целом это довольно просто. iText имеет класс FDFWriter, который сделает большую часть работы для вас, хотя я не верю, что он поддерживает все звонки и свистки FDF.

0

Я использую XFDF для своих проектов, и технология оказалась надежной и устойчивой. Во-первых, поскольку это XML, я мог бы сжать XML и сохранить их настойчиво с низкой печатью. Как объяснил Марк Сторр, ограничения, которые XFDF не может сделать, это скрипт поддержки. Если вам нужна библиотека, которая объединит поле XFDF/FDF, вы можете попробовать [nguyen][https://github.com/joneslee85/nguyen] gem.

Смежные вопросы