Trabalhando com Formulários XFA usando C++
Formulários XFA é a Arquitetura de Formulários XML, uma família de especificações XML proprietárias que foram propostas e desenvolvidas pela JetForm para melhorar o manuseio de formulários web. Também pode ser usado em arquivos PDF começando com a especificação PDF 1.5.
Preencha campos XFA com a classe Form por Aspose.Pdf.Facades.
Preencher campos XFA
O trecho de código a seguir mostra como preencher campos em um formulário XFA.
using namespace System;
using namespace System::Collections::Generic;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;
void FillXFA() {
String _dataDir("C:\\Samples\\");
// Carregar formulário XFA
auto document = MakeObject<Document>(_dataDir + u"FillXFAFields.pdf");
// Obter nomes dos campos do formulário XFA
auto names = document->get_Form()->get_XFA()->get_FieldNames();
// Definir valores dos campos
document->get_Form()->get_XFA()->idx_set(names->idx_get(0),u"Field 0");
document->get_Form()->get_XFA()->idx_set(names->idx_get(1),u"Field 1");
// Salvar o documento atualizado
document->Save(_dataDir + u"Filled_XFA_out.pdf");
}
Converter XFA para AcroForm
Formulários dinâmicos são baseados em uma especificação XML conhecida como XFA, a “Arquitetura de Formulários XML”. As informações sobre o formulário (no que diz respeito a um PDF) são muito vagas – especifica que campos existem, com propriedades e eventos JavaScript, mas não especifica qualquer renderização.
Atualmente, o PDF suporta dois métodos diferentes para integrar dados e formulários PDF:
- AcroForms (também conhecidos como formulários Acrobat), introduzidos e incluídos na especificação do formato PDF 1.2.
- Formulários Adobe XML Forms Architecture (XFA), introduzidos na especificação do formato PDF 1.5 como um recurso opcional (A especificação XFA não está incluída na especificação PDF, é apenas referenciada.)
Não podemos extrair ou manipular páginas de Formulários XFA, porque o conteúdo do formulário é gerado em tempo de execução (durante a visualização do formulário XFA) dentro do aplicativo tentando exibir ou renderizar o formulário XFA. Aspose.PDF tem um recurso que permite aos desenvolvedores converter formulários XFA em AcroForms padrão.
void ConvertXFAtoAcroForms() {
String _dataDir("C:\\Samples\\");
// Carregar formulário XFA
auto document = MakeObject<Document>(_dataDir + u"DynamicXFAToAcroForm.pdf");
// Defina o tipo de campos de formulário como AcroForm padrão
document->get_Form()->set_Type(Aspose::Pdf::Forms::FormType::Standard);
// Salvar o PDF resultante
document->Save(_dataDir + u"Standard_AcroForm_out.pdf");
}
Obter propriedades do campo XFA
Para acessar as propriedades dos campos, primeiro use Document.Form.XFA.Teamplate para acessar o modelo de campo. O trecho de código a seguir mostra as etapas para obter as coordenadas X e Y de um campo de formulário XFA.
void GetXFAProprties() {
String _dataDir("C:\\Samples\\");
// Carregar formulário XFA
auto document = MakeObject<Document>(_dataDir + u"GetXFAProperties.pdf");
auto names = document->get_Form()->get_XFA()->get_FieldNames();
// Definir valores dos campos
document->get_Form()->get_XFA()->idx_set(names->idx_get(0), u"Field 0");
document->get_Form()->get_XFA()->idx_set(names->idx_get(0), u"Field 1");
// Obter posição do campo
Console::WriteLine(document->get_Form()->get_XFA()->GetFieldTemplate(names[0])->get_Attributes()->idx_get(u"x")->get_Value());
// Obter posição do campo
Console::WriteLine(document->get_Form()->get_XFA()->GetFieldTemplate(names[0])->get_Attributes()->idx_get(u"y")->get_Value());
// Salvar o documento atualizado
document->Save(_dataDir + u"Filled_XFA_out.pdf");
}