Normalmente, um design de formulário criado no Designer é transmitido por referência ao serviço Forms. Os designs de formulário podem ser grandes e, como resultado, é mais eficiente passá-los por referência para evitar a necessidade de empacotar bytes de design de formulário por valor. O serviço Forms também pode armazenar em cache o design de formulário para que, quando armazenado em cache, ele não precise ler continuamente o design de formulário.
Se um design de formulário contiver um atributo UUID, ele será armazenado em cache. O valor UUID é exclusivo para todos os designs de formulário e é usado para identificar exclusivamente um formulário. Ao renderizar um formulário por valor, o formulário só deve ser armazenado em cache quando for usado repetidamente. No entanto, se o formulário não for usado repetidamente e tiver que ser exclusivo, será possível evitar o armazenamento em cache do formulário usando opções de armazenamento em cache definidas com a API do AEM Forms.
O serviço Forms também pode resolver a localização do conteúdo vinculado no design de formulário. Por exemplo, imagens vinculadas que são referenciadas no design de formulário são URLs relativos. O conteúdo vinculado é sempre considerado como sendo relativo ao local do design de formulário. Portanto, resolver o conteúdo vinculado é uma questão de determinar sua localização aplicando o caminho relativo à localização absoluta do design de formulário.
Em vez de passar um design de formulário por referência, é possível passar um design de formulário por valor. A transmissão de um design de formulário por valor é eficiente quando um design de formulário é criado dinamicamente; ou seja, quando um aplicativo cliente gera o XML que cria um design de formulário durante o tempo de execução. Nesse caso, um design de formulário não é armazenado em um repositório físico porque é armazenado na memória. Ao criar dinamicamente um design de formulário em tempo de execução e passá-lo por valor, é possível armazenar o formulário em cache e melhorar o desempenho do serviço Forms.
Limitações de passagem de um formulário por valor
As limitações a seguir se aplicam quando um design de formulário é aprovado pelo valor:
Embora seja possível renderizar diferentes tipos de formulários por valor (por exemplo, formulários HTML ou formulários que contenham direitos de uso), esta seção aborda a renderização de PDF forms interativos.
Para obter mais informações sobre o serviço Forms, consulte Referência de serviços para AEM Forms.
Para renderizar um formulário por valor, execute as seguintes etapas:
Incluir arquivos de projeto
Inclua os arquivos necessários no projeto de desenvolvimento. Se você estiver criando um aplicativo cliente usando Java, inclua os arquivos JAR necessários. Se você estiver usando serviços da Web, certifique-se de incluir os arquivos proxy.
Criar um objeto de API do Forms Client
Antes de poder importar dados de forma programática para uma API do cliente de formulário PDF, é necessário criar um cliente de serviço de Integração de dados. Ao criar um cliente de serviço, você define as configurações de conexão necessárias para chamar um serviço.
Referência ao design de formulário
Ao renderizar um formulário por valor, é necessário criar um objeto com.adobe.idp.Document
que contenha o design de formulário a ser renderizado. Você pode fazer referência a um arquivo XDP existente ou pode criar dinamicamente um design de formulário em tempo de execução e preencher um com.adobe.idp.Document
com esses dados.
Esta seção e o start rápido correspondente fazem referência a um arquivo XDP existente.
Renderizar um formulário por valor
Para renderizar um formulário pelo valor, passe uma instância com.adobe.idp.Document
que contenha o design de formulário para o parâmetro inDataDoc
do método de renderização (pode ser qualquer um dos métodos de renderização do objeto FormsServiceClient
, como renderPDFForm
, (Deprecated) renderHTMLForm
e assim por diante). Normalmente, esse valor de parâmetro é reservado para dados que são unidos ao formulário. Da mesma forma, passe um valor de string vazio para o parâmetro formQuery
. Normalmente, esse parâmetro requer um valor de string que especifica o nome do design de formulário.
Se você quiser exibir dados dentro do formulário, os dados devem ser especificados dentro do elemento xfa:datasets
. Para obter informações sobre a arquitetura XFA, acesse https://partners.adobe.com/public/developer/xml/index_arch.html.
Gravar o fluxo de dados do formulário no navegador da Web do cliente
Quando o serviço Forms renderiza um formulário por valor, ele retorna um fluxo de dados do formulário que você deve gravar no navegador da Web do cliente. Quando gravado no navegador da Web do cliente, o formulário fica visível para o usuário.
Consulte também:
Renderizar um formulário por valor usando a API Java
Renderizar um formulário por valor usando a API de serviço da Web
Incluindo arquivos da biblioteca Java AEM Forms
Configuração das propriedades de conexão
Start rápidos da API de serviço da Forms
Transmissão de Documentos ao serviço Forms
Criação de Aplicações web que renderizam o Forms
Renderize um formulário por valor usando a API do Forms (Java):
Incluir arquivos de projeto
Inclua arquivos JAR do cliente, como adobe-forms-client.jar, no caminho de classe do seu projeto Java.
Criar um objeto de API do Forms Client
ServiceClientFactory
que contenha propriedades de conexão.FormsServiceClient
usando seu construtor e transmitindo o objeto ServiceClientFactory
.Referência ao design de formulário
java.io.FileInputStream
que represente o design de formulário a ser renderizado usando seu construtor e transmitindo um valor de string que especifica o local do arquivo XDP.com.adobe.idp.Document
usando seu construtor e transmitindo o objeto java.io.FileInputStream
.Renderizar um formulário por valor
Chame o método FormsServiceClient
do objeto renderPDFForm
e passe os seguintes valores:
com.adobe.idp.Document
que contém o design de formulário. Normalmente, esse valor de parâmetro é reservado para dados que são unidos ao formulário.PDFFormRenderSpec
que armazena opções de tempo de execução. Este é um parâmetro opcional e você pode especificar null
se não quiser especificar opções de tempo de execução.URLSpec
que contém valores de URI exigidos pelo serviço Forms.java.util.HashMap
que armazena anexos de arquivo. Este é um parâmetro opcional e você pode especificar null
se não quiser anexar arquivos ao formulário.O método renderPDFForm
retorna um objeto FormsResult
que contém um fluxo de dados de formulário que pode ser gravado no navegador da Web do cliente.
Gravar o fluxo de dados do formulário no navegador da Web do cliente
com.adobe.idp.Document
chamando o método FormsResult
object 's getOutputContent
.com.adobe.idp.Document
chamando seu método getContentType
.javax.servlet.http.HttpServletResponse
chamando seu método setContentType
e transmitindo o tipo de conteúdo do objeto com.adobe.idp.Document
.javax.servlet.ServletOutputStream
usado para gravar o fluxo de dados do formulário no navegador da Web do cliente, chamando o método javax.servlet.http.HttpServletResponse
do objeto getOutputStream
.java.io.InputStream
invocando o método com.adobe.idp.Document
do objeto getInputStream
.InputStream
. Chame o método InputStream
do objeto available
para obter o tamanho do objeto InputStream
.InputStream
do objeto read
e transmitindo a matriz de bytes como um argumento.javax.servlet.ServletOutputStream
do objeto write
para enviar o fluxo de dados do formulário para o navegador da Web do cliente. Passe a matriz de bytes para o método write
.Consulte também:
Start rápido (modo SOAP): Renderização por valor usando a API Java
Incluindo arquivos da biblioteca Java AEM Forms
Configuração das propriedades de conexão
Renderize um formulário por valor usando a Forms API (serviço da Web):
Incluir arquivos de projeto
Criar um objeto de API do Forms Client
Crie um objeto FormsService
e defina os valores de autenticação.
Referência ao design de formulário
java.io.FileInputStream
usando seu construtor. Passe um valor de string que especifica o local do arquivo XDP.BLOB
usando seu construtor. O objeto BLOB
é usado para armazenar um documento PDF que é criptografado com uma senha.java.io.FileInputStream
. Você pode determinar o tamanho da matriz de bytes obtendo o tamanho do objeto java.io.FileInputStream
usando seu método available
.java.io.FileInputStream
do objeto read
e transmitindo a matriz de bytes.BLOB
chamando seu método setBinaryData
e transmitindo a matriz de bytes.Renderizar um formulário por valor
Chame o método FormsService
do objeto renderPDFForm
e passe os seguintes valores:
BLOB
que contém o design de formulário. Normalmente, esse valor de parâmetro é reservado para dados que são unidos ao formulário.PDFFormRenderSpec
que armazena opções de tempo de execução. Este é um parâmetro opcional e você pode especificar null
se não quiser especificar opções de tempo de execução.URLSpec
que contém valores de URI exigidos pelo serviço Forms.java.util.HashMap
que armazena anexos de arquivo. Este é um parâmetro opcional e você pode especificar null
se não quiser anexar arquivos ao formulário.com.adobe.idp.services.holders.BLOBHolder
que é preenchido pelo método. Isso é usado para armazenar o formulário PDF renderizado.javax.xml.rpc.holders.LongHolder
que é preenchido pelo método. (Esse argumento armazena o número de páginas no formulário.)javax.xml.rpc.holders.StringHolder
que é preenchido pelo método. (Este argumento armazena o valor de localidade.)com.adobe.idp.services.holders.FormsResultHolder
que conterá os resultados desta operação.O método renderPDFForm
preenche o objeto com.adobe.idp.services.holders.FormsResultHolder
transmitido como o último valor do argumento com um fluxo de dados de formulário que deve ser gravado no navegador da Web do cliente.
Gravar o fluxo de dados do formulário no navegador da Web do cliente
FormResult
obtendo o valor do membro de dados com.adobe.idp.services.holders.FormsResultHolder
do objeto value
.BLOB
que contenha dados de formulário chamando o método FormsResult
do objeto getOutputContent
.BLOB
chamando seu método getContentType
.javax.servlet.http.HttpServletResponse
chamando seu método setContentType
e transmitindo o tipo de conteúdo do objeto BLOB
.javax.servlet.ServletOutputStream
usado para gravar o fluxo de dados do formulário no navegador da Web do cliente, chamando o método javax.servlet.http.HttpServletResponse
do objeto getOutputStream
.BLOB
do objeto getBinaryData
. Essa tarefa atribui o conteúdo do objeto FormsResult
à matriz de bytes.javax.servlet.http.HttpServletResponse
do objeto write
para enviar o fluxo de dados do formulário para o navegador da Web do cliente. Passe a matriz de bytes para o método write
.Consulte também:
Invocar o AEM Forms usando a codificação Base64