Слияние/заполнение PDF формирует файл с данными XML

Скажем, я имею файл формы PDF в наличии в веб-сайте, который заполнен пользователями и отправленный серверу. На стороне сервера (Asp. Сеть) я хотел бы объединить данные, которые я получаю в xml формате с пустой формой PDF, которая была заполнена, и сохраните его.

Поскольку я нашел, что существует несколько возможных способов сделать его:

  1. Используя форму PDF, созданную Adobe Acrobat и заполнением его с itextsharp.
  2. Используя форму PDF, созданную Adobe Acrobat и заполнением его с Инструментарием FDF .NET (который, кажется, использует itextsharp внутренне),
  3. Доллар США pdfkt для заполнения формы.
  4. Используйте файл формы PDF, созданный с Adobe livecycle, и объедините данные при помощи Сервиса Интеграции данных Формы

Поскольку у меня нет опыта с этим видом задачи, можно ли советовать, какая опция была бы лучшей/легче и дала бы некоторым дополнительным подсказкам?

Заранее спасибо.

6
задан Lawtonfogle 30 January 2015 в 16:07
поделиться

2 ответа

Поскольку вы отметили этот «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 не требуется!

0
ответ дан 17 December 2019 в 18:12
поделиться

Я бы предложил использовать четвертый подход, если это возможно, потому что он будет чище. Вы могли бы использовать решения, специально разработанные для того, что вы просите сделать, но если у вас нет доступных ресурсов для такого решения, я бы предложил использовать 1-й вариант.

Первый вариант - это то, что я недавно выбрал. Я нашел его относительно безболезненным в реализации.

Вариант 1 возможен, если применимо следующее:

  1. Вы контролируете разработку форм PDF.
  2. Вы можете управлять форматированием XML-данных
  3. Вы можете жить с несжатыми (fastweb = false) PDF-файлами

Пример реализации:

  1. Использование Adobe Acrobat для создания PDF-формы. Совет: используйте Adobe Native Fonts при создании форм. Для каждого добавляемого вами элемента управления, который не является собственным шрифтом, он импортирует используемый шрифт и раздувает файл, когда он не сжат, и, насколько мне известно, ITextSharp в настоящее время не создает сжатые PDF-файлы.

  2. Использование библиотеки 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; я 
  3. Сохраните файл или отправьте файл в ответ на своей странице ASP.Net

3
ответ дан 17 December 2019 в 18:12
поделиться
Другие вопросы по тегам:

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