Pergunta

Eu preciso preencher campos de formulário XFA em PDF (criado com o Adobe LiveCycle Designer). Nós estamos tentando usar o iText (na verdade iTextSharp com C #) para analisar o PDF, preencher os campos XFA e salve o PDF de volta modificado fora.

Todos os exemplos que eu posso encontrar com o iText (muito poucos exemplos iTextSharp) falar sobre como modificar campos AcroForm. Este PDF não têm campos AcroForm e usa XFA somente.

Ponteiros para quaisquer recursos não-padrão seria útil (Eu já fiz o Googling requisito sobre o tema e não encontrei nada útil).

Exemplos de código aqui seria fantástico de qualquer um que tenha realmente feito o que eu estou tentando fazer.

Foi útil?

Solução

Se você pode obter um pacote de dados para o PDF, o runtime XFA no Acrobat iria preencher esses campos com os dados no pacote de dados.

Se você quiser ver o que um desses parece, criar um formulário no LiveCycle Designer (vem com o Acrobat Pro), adicionar alguns campos a ele, e guardá-lo como uma dinâmica PDF. Abra o formulário no Acrobat e digite alguns valores nos campos e salvá-lo.

Abra o PDF com uma ferramenta que permite espiar os dados PDF e você encontrará / Catálogo / AcroForm / XFA um fluxo que tem um pacote com os valores digitados. Isso é o que você vai precisar para criar a si mesmo e inserir no PDF.

A especificação XDP inclui uma descrição do pacote de dados eo algoritmo de merge. Você pode encontrá-lo aqui:

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

Como alternativa, você compra o servidor LiveCycle da Adobe, que permite que você faça tudo isso por meio de programação em um número de maneiras, incluindo através de chamadas de serviço da Web.

Outras dicas

iTextSharp pode trabalhar com XFA. Para remover todas as dúvidas, por favor dê uma olhada no site da amostra iText:

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

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();
}

Eu tenho o mesmo problema e eu acho que encontrei a solução. Eu estou usando o PowerShell para inspecionar o objeto pdf.

Coloque o iTextSharp DLL.

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

Coloque o PDF em uma variável:

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

Verifique este objeto:

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

O que você deve ver, é que todos os seus campos no PDF são neste objeto como uma propriedade. Você pode obter uma visualização rápida de todos os seus campos como este:

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

Isso deve ser o bilhete mágico. Esta localização é ambos os campos do formulário original e a parte XFA do formulário.

Ele diz que no livro porque itext não faz isso. você pode converter seu PDF?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top