Использование iText (iTextSharp) для заполнения полей формы XFA в PDF? - PullRequest
16 голосов
/ 25 июня 2009

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

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

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

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

Ответы [ 5 ]

5 голосов
/ 06 августа 2009

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

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

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

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

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

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

5 голосов
/ 11 марта 2011

iTextSharp может работать с XFA. Чтобы снять все сомнения, ознакомьтесь с примером на сайте iText:

http://itextpdf.com/examples/iia.php?id=165

4 голосов
/ 15 мая 2012
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();
}
1 голос
/ 16 ноября 2013

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

Загрузите библиотеку iTextSharp.

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 формы.

0 голосов
/ 25 июля 2009

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

...