ASP.NET - сбор пользовательского ввода из полей формы PDF - PullRequest
3 голосов
/ 09 мая 2011

Мы рассматриваем ряд требований к приложениям и изучаем ряд решений. Учитывая, что мы, вероятно, не единственный разработчик, которому когда-либо предъявлялись эти требования, нам интересно, какое решение и методы могли выбрать другие ...

Ниже кратко изложены требования к одной конкретной функции приложения:

- Платформа: ASP.NET

- Сбор ввода пользователя (через стандартные веб-формы)

- Заполняйте PDF-формы собранным пользовательским вводом И НЕ ПЛАВАЙТЕ PDF-формы

- Немедленно отображать формы PDF (в браузере) и разрешать пользователю редактировать содержимое полей (формы PDF должны отображаться в iFrame).

- Разрешить пользователю «отправлять» измененный PDF на веб-сервер (где он будет окончательно сведен и сохранен во внутренней базе данных)

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

Какие-нибудь практические предложения? Любые рекомендации? Альтернативные решения, НЕ включающие формы PDF?

Имейте в виду, что, учитывая целевую аудиторию, решения, включающие лицензии Adobe LiveCycle, определенно НЕ представлены ...

Спасибо

Giorgio * * 1023

Ответы [ 4 ]

2 голосов
/ 10 мая 2011

Учитывая существующий PDF, iTextSharp может заполнять значения полей (формы AcroForm или XFA / LiveCycle).

HOWEVER, тогда как iTextSharp (и iText) может обрабатывать любой старый AcroForm, он может только FLATTEN static liveCycle формы.

Кроме того, PDF-форма может представлять себя несколькими способами:

  • FDF: диалект PDF.В основном пары имя / значение с некоторыми дополнительными элементами.
  • в стиле HTML
  • PDF: PDF-файлы могут отправлять себя (с данными формы) на URL-адрес.Вы можете просто открыть и распрямить, не нужно беспокоиться о заполнении формы во второй раз.Я считаю, что это ограничено формами «Reader Enabled» в Reader.

PdfStamper от iText (в режиме добавления!) Может заполнять значения полей, не нарушая PDF-Reader-Enabled-ness.

Ваш рабочий процесс становится следующим:

  1. Заполните форму с поддержкой чтения с помощью PdfStamper iText в режиме добавления и предоставьте этот PDF пользователю.
  2. Получите заполненный PDF отпользователь
  3. Свести PDF с помощью другого PdfStamper.Просто «open, setFormFlattens (true), close ()».

Вместо того, чтобы заполнять PDF, вы можете подавать FDF со значениями полей и ссылкой на шаблон PDF (который сновадля отправки полного PDF IIRC требуется Reader Enabling, от Acrobat).Это заметно эффективнее, чем анализ PDF и его обработка каждый раз.

FDF выглядит примерно так:

%FDF-1.2
%âãÏÓ
1 0 obj
<</F(http://www.mySite.com/myPDF.pdf)
/Fields[
  <</T(Check1)/V/Off>>
  <</T(Some Field)/V(A value)>>
  <</T(AnotherFld)/V(1.0)>>
  <</T(You get)/V(the idea)>>
 ]
>>/Type/Catalog>>
endobj
trailer
<</Root 1 0 R>>
%%EOF

<< и >> оборачивают «словари» (значение именипары).
(и) обернуть строки
[и] обернуть массивы
/ приводит "имена".Имена используются для ключей словаря, а иногда и для других вещей.

Вы должны экранировать некоторые символы в именах и строках:

Экраны строк начинаются с '\'.\ r, \ n, \ t, \ b, \ f, (,) и \.Вы также можете экранировать любое старое символьное значение IN OCTAL следующим образом: \ ooo, где 'o' - восьмеричные значения.

Имена экранируют совершенно иначе (grr).

Экранирование имени начинается с '#, за которым следует двузначное шестнадцатеричное число.HEX на этот раз не восьмеричный.Грр грр.Все, что не в аз AZ 0-9._;* @ должен быть экранирован.Вы МОЖЕТЕ избежать всего, это ужасно неэффективно.

Возможно, вам придется позаботиться о экранировании строк (в частности, о значениях полей и, возможно, о вашем пути / URL-адресе PDF), но вы почти наверняка выиграли't нужно беспокоиться о побегах имен.

Существуют различные библиотеки для написания FDF для вас, но я считаю, что проще просто выделять FDF с помощью простой конкатенации строк.

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

1 голос
/ 09 мая 2011

Я никогда не использовал его, но я слышал, что люди добились определенного успеха с iTextSharp .Есть статья проекта кода о том, как сохранить файлы PDF, используя здесь .Вы должны проверить лицензию iTextSharp, чтобы убедиться, что она совместима с тем, что вы делаете.

0 голосов
/ 14 марта 2013

Как создать PDF или веб-форму:

  • В Acrobat XI выберите панель «Инструменты»> «Формы»> «Создать».
  • Нажмите «С нуля» или «Шаблон», чтобы запустить рабочий стол FormsCentral.app.
  • Нажмите «Создать новую пустую форму» или «Начать с шаблона».
  • Настройте форму с помощью интуитивно понятных инструментов
0 голосов
/ 09 мая 2011

Вы можете использовать кнопку отправки внутри вашего PDF-файла для отправки пар имя / значение, аналогично тому, как вы это делаете для html-форм (, см. Этот вопрос SO для деталей ).Затем на стороне сервера вы можете использовать инструмент для обработки PDF ( Amyuni PDF Creator .Net , iText и т. Д.), Чтобы заново вставить значения в форму PDF и сохранить полученный файл.в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...