2009-06-25 3 views
14

Мне нужно заполнить поля формы XFA в формате PDF (созданного с помощью Adobe LiveCycle Designer). Мы пытаемся использовать iText (на самом деле iTextSharp с C#) для анализа PDF-файла, заполнения полей XFA и сохранения сохраненного PDF-файла.Использование iText (iTextSharp) для заполнения полей формы XFA в формате PDF?

Все примеры, которые я могу найти в iText (очень немногие примеры iTextSharp), рассказывают об изменении полей AcroForm. Этот PDF-файл не имеет полей AcroForm и использует только XFA.

Указатели на любые нестандартные ресурсы были бы полезны (я уже сделал необходимый Googling по этой теме и не нашел ничего полезного).

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

+1

Я просто посмотрел его в книге «iText в действии», и он гласит: «Формы, подобные этому, не обсуждаются в этой книге», поэтому не покупайте эту книгу в надежде на ответ. –

ответ

5

Если вы можете получить пакет данных в формате PDF, время выполнения XFA в Acrobat заполнит эти поля данными в пакете данных.

Если вы хотите увидеть, что из них похоже, создайте форму в LiveCycle Designer (поставляется с Acrobat Pro), добавьте в нее несколько полей и сохраните ее как динамический PDF. Откройте форму в Acrobat и введите некоторые значения в поля и сохраните их.

Откройте PDF с помощью инструмента, который позволит вам просмотреть данные в формате PDF, и вы найдете/Catalog/AcroForm/XFA поток, который содержит xfa: datasets > пакет со значениями, введенными вами. Это то, что вам нужно будет создать и вставить в PDF.

Спецификация XDP содержит описание пакета данных и алгоритма слияния. Вы можете найти его здесь:

http://partners.adobe.com/public/developer/xml/index_arch.html

В качестве альтернативы, вы покупаете сервер LiveCycle от Adobe, который позволяет делать все это программно в несколькими способами, включая через веб-службы вызовов.

+0

Это полезная информация @stevex. Очень признателен. Я видел, как xfa: набор данных данных (или то, что, как мне казалось, соответствует этому), при просмотре объектов внутри iTextSharp. –

0

В нем говорится, что в книге, потому что itext этого не делает. Можете ли вы конвертировать PDF?

+0

Нет. Это gov-сгенерированная форма, которую мне нужно изменить, и тогда люди должны будут повторно отправить в gov. –

+1

Книга устарела - с 2006 года существует поддержка XFA. Примеры приведены в http://1t3xt.info/examples/browse/?page=example&id=433 и http://1t3xt.info/examples/browse /? page = example & id = 441 – JasonPlutext

+0

Эти ссылки мертвы, пожалуйста, обновите –

3
using (FileStream existingPdf = new FileStream("existing.pdf", FileMode.Open)) 
using (FileStream sourceXml = new FileStream("source.xml", FileMode.Open)) 
using (FileStream newPdf = new FileStream("new.pdf", FileMode.Create)) 
{ 
    // Open existing PDF 
    PdfReader pdfReader = new PdfReader(existingPdf); 

    // PdfStamper, which will create 
    PdfStamper stamper = new PdfStamper(pdfReader, newPdf); 
    stamper.AcroFields.Xfa.FillXfaForm(sourceXml); 

    stamper.Close(); 
    pdfReader.Close(); 
} 
+0

Это замечательный код, спасибо! Не могли бы вы привести пример XML-формата для ввода FillXfaForm? Благодаря! – 2013-05-27 16:21:25

1

У меня такая же проблема, и я думаю, я нашел решение. Я использую Powershell для проверки PDF-объекта.

Загрузите iTextSharp DLL.

Add-Type -Path "C:\Users\micah\Desktop\itextsharp.dll" 

Загрузите PDF в переменный:

$PDF = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList "C:\Users\micah\Desktop\test.pdf" 

Проверьте этот объект:

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Get-Member 

То, что вы должны видеть, что все ваши поля на вашем PDF в этом объекте, как недвижимость. Вы можете получить быстрый просмотр всех полей, как это:

$PDF.AcroFields.XFA.DomDocument.XDP.DataSets.Data.TopMostSubForm | Select-Object -Property "*" 

Это должно быть волшебный билет.Это место является как полями из первоначальной формы, так и частью XFA формы.

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

  • Нет связанных вопросов^_^