Скажем, я имею файл формы PDF в наличии в веб-сайте, который заполнен пользователями и отправленный серверу. На стороне сервера (Asp. Сеть) я хотел бы объединить данные, которые я получаю в xml формате с пустой формой PDF, которая была заполнена, и сохраните его.
Поскольку я нашел, что существует несколько возможных способов сделать его:
Поскольку у меня нет опыта с этим видом задачи, можно ли советовать, какая опция была бы лучшей/легче и дала бы некоторым дополнительным подсказкам?
Заранее спасибо.
Поскольку вы отметили этот «LiveCycle», я так понимаю, у вас где-то запущена установка Adobe LiveCycle (при желании может установить его где-то).
В этом случае я бы выбрал номер 4 (с модификацией использования модуля Adobe LiveCycle Forms ES ). Остальные три, несомненно, вызовут проблемы совместимости в долгосрочной перспективе. С помощью сервера LiveCycle (с запущенным модулем Forms) вы сможете обрабатывать любой PDF, будь то старый, новый, статический, динамический, сжатый, на основе Acrobat или на основе LiveCycle.
У вас должна быть возможность настроить все, чтобы форма отправляла свои данные на сервер LiveCycle и использовала эти данные для заполнения формы. Затем заполнение можно сохранить в базе данных сервера или направить в форму PDF (или любую другую форму) и передать обратно клиенту.
Создайте форму с помощью LiveCycle Designer.
Вариант быстрого и грязного будет следующим: Установите форму http-post (например, xfdf, см. Дополнительную информацию в Acrobat) на свой ASP-сервер и опубликуйте его на сервере (убедитесь, что ваши пользователи не загружают форму перед ее открытием, иначе это не сработает. Форма должна быть открыта в веб-браузере). Затем просто запишите представленные материалы, как если бы вы записали http-сообщение с веб-страницы. При желании сохраните заливку в базе данных.Затем отправьте захваченное заполнение потока xfdf обратно клиенту (также может быть вызвано на более позднем этапе через http-ссылку). Поток xfdf будет содержать URL-адрес формы, использованной для его заполнения. Клиентский веб-браузер попросит плагин Acrobat / Adobe Reader обработать поток xfdf, и плагин найдет, загрузит и заполнит форму, на которую указывает xfdf.
Теперь пользователь должен иметь возможность сохранить форму И ее заполнить - расширение Reader не требуется!
Я бы предложил использовать четвертый подход, если это возможно, потому что он будет чище. Вы могли бы использовать решения, специально разработанные для того, что вы просите сделать, но если у вас нет доступных ресурсов для такого решения, я бы предложил использовать 1-й вариант.
Первый вариант - это то, что я недавно выбрал. Я нашел его относительно безболезненным в реализации.
Вариант 1 возможен, если применимо следующее:
Пример реализации:
Использование Adobe Acrobat для создания PDF-формы. Совет: используйте Adobe Native Fonts при создании форм. Для каждого добавляемого вами элемента управления, который не является собственным шрифтом, он импортирует используемый шрифт и раздувает файл, когда он не сжат, и, насколько мне известно, ITextSharp в настоящее время не создает сжатые PDF-файлы.
Использование библиотеки ITextSharp для объединения данных XML с формой PDF для создания заполненного документа.Совет: чтобы вручную заполнить форму PDF из xml, вы должны сопоставить значения xml с именами элементов управления в форме PDF и сопоставить их по страницам, как показано в примере ниже.
с использованием (MemoryStream stream = GeneratePDF (m_FormsPath, oXmlData))
{
byte [] bytes = stream.ToArray ();
Response.ContentType = "application / pdf ";
Response.BinaryWrite (bytes);
Response.End ();
}
// {{1} } // Этот метод объединяет формы pdf с данными xml
//
// путь к файлу формы pdf
// набор данных xml
// поток памяти, содержащий данные pdf
private MemoryStream GeneratePDF (string m_FormName, XmlDocument oData )
{
PdfReader pdfTemplate;
PdfStamper stamper;
PdfReader tempPDF;
Документ doc;
MemoryStream msTemp; {{1 }} PdfWriter pCopy;
MemoryStream msOutput = new MemoryStream ();
pdfTemplate = new PdfReader (m_FormName);
doc = новый документ ();
pCopy = new PdfCopy (doc, msOutput);
pCopy.AddViewerPreference (PdfName.PICKTRAYBYPDFSIZE, new PdfBoolean (true));
pCopy. AddViewerPreference (PdfName.PRIN TSCALING, PdfName.NONE);
doc.Open ();
для (int i = 1; я
Сохраните файл или отправьте файл в ответ на своей странице ASP.Net