Renderizar Forms por valor rendering-forms-by-value
Normalmente, um design de formulário criado no Designer é passado por referência ao serviço da Forms. Os designs de formulário podem ser grandes e, como resultado, é mais eficiente passá-los por referência para evitar a necessidade de marcar os 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 um formulário de maneira exclusiva. 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, é possível evitar o armazenamento do formulário em cache usando opções de armazenamento em cache definidas usando a API do AEM Forms.
O serviço Forms também pode resolver o local 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 relativo ao local do design de formulário. Portanto, a resolução do conteúdo vinculado é uma questão de determinar sua localização ao aplicar o caminho relativo ao local absoluto do design de formulário.
Em vez de passar um design de formulário por referência, você pode passar um design de formulário por valor. O envio 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. Nessa situação, 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 do envio de um formulário por valor
As seguintes limitações se aplicam quando um design de formulário é passado pelo valor:
- Nenhum conteúdo vinculado relativo pode estar no design de formulário. Todas as imagens e fragmentos devem ser incorporados no design de formulário ou absolutamente referenciados.
- Os cálculos do lado do servidor não podem ser executados após a renderização do formulário. Se o formulário for enviado de volta ao serviço da Forms, os dados serão extraídos e retornados sem nenhum cálculo do lado do servidor.
- Como o HTML só pode usar imagens vinculadas em tempo de execução, não é possível gerar HTML com imagens incorporadas. Isso ocorre porque o serviço Forms suporta imagens incorporadas com HTML recuperando as imagens de um design de formulário referenciado. Como um design de formulário passado pelo valor não tem um local referenciado, as imagens incorporadas não podem ser extraídas quando a página HTML é exibida. Portanto, as referências de imagem devem ser caminhos absolutos para serem renderizados no HTML.
Resumo das etapas summary-of-steps
Para renderizar um formulário por valor, execute as seguintes etapas:
- Inclua arquivos de projeto.
- Crie um objeto da API do cliente do Forms.
- Consulte o design de formulário.
- Renderizar um formulário por valor.
- Grave o fluxo de dados do formulário no navegador da Web cliente.
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 cliente do Forms
Antes de poder importar dados de forma programática para uma API do cliente do PDF, é necessário criar um cliente do 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 com.adobe.idp.Document
objeto que contém 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.
Renderizar um formulário por valor
Para renderizar um formulário por valor, passe um com.adobe.idp.Document
instância que contém o design de formulário para o método de renderização inDataDoc
(pode ser qualquer um dos FormsServiceClient
métodos de renderização do objeto, como renderPDFForm
, (Deprecated) renderHTMLForm
e assim por diante). Normalmente, esse valor de parâmetro é reservado para dados unidos ao formulário. Da mesma forma, passe um valor de string vazia para a variável formQuery
parâmetro. Normalmente, esse parâmetro requer um valor de string que especifica o nome do design de formulário.
xfa:datasets
elemento. Para obter informações sobre a arquitetura XFA, acesse https://www.pdfa.org/norm-refs/XFA-3_3.pdf.Gravar o fluxo de dados do formulário no navegador da Web cliente
Quando o serviço Forms renderiza um formulário por valor, ele retorna um fluxo de dados de formulário que deve ser gravado no navegador da Web 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 do serviço da Web
Inclusão de arquivos da biblioteca Java do AEM Forms
Configuração das propriedades de conexão
Início rápido da API do Forms Service
Enviar documentos para o serviço do Forms
Criação de aplicativos Web que renderizam o Forms
Renderizar um formulário por valor usando a API Java render-a-form-by-value-using-the-java-api
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 cliente do Forms
- Crie um
ServiceClientFactory
objeto que contém propriedades de conexão. - Crie um
FormsServiceClient
usando seu construtor e passando oServiceClientFactory
objeto.
- Crie um
-
Referência ao design de formulário
- Crie um
java.io.FileInputStream
objeto que representa o design de formulário a ser renderizado usando seu construtor e passando um valor de string que especifica o local do arquivo XDP. - Crie um
com.adobe.idp.Document
usando seu construtor e passando ojava.io.FileInputStream
objeto.
- Crie um
-
Renderizar um formulário por valor
Chame o
FormsServiceClient
do objetorenderPDFForm
e transmita os seguintes valores:- Um valor de string vazio. (Normalmente, esse parâmetro requer um valor de string que especifica o nome do design de formulário.)
- A
com.adobe.idp.Document
objeto que contém o design de formulário. Normalmente, esse valor de parâmetro é reservado para dados que são unidos ao formulário. - A
PDFFormRenderSpec
objeto que armazena opções de tempo de execução. Este é um parâmetro opcional e você pode especificarnull
se você não quiser especificar opções de tempo de execução. - A
URLSpec
objeto que contém valores de URI exigidos pelo serviço Forms. - A
java.util.HashMap
que armazena anexos de arquivo. Este é um parâmetro opcional e você pode especificarnull
se não quiser anexar arquivos ao formulário.
O
renderPDFForm
método retorna umFormsResult
objeto 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 cliente
- Crie um
com.adobe.idp.Document
chamando oFormsResult
objeto "sgetOutputContent
método . - Obtenha o tipo de conteúdo da variável
com.adobe.idp.Document
ao invocar seugetContentType
método . - Defina as
javax.servlet.http.HttpServletResponse
tipo de conteúdo do objeto, chamando seusetContentType
e a transmissão do tipo de conteúdo docom.adobe.idp.Document
objeto. - Crie um
javax.servlet.ServletOutputStream
objeto usado para gravar o fluxo de dados do formulário no navegador da Web cliente, chamando ojavax.servlet.http.HttpServletResponse
do objetogetOutputStream
método . - Crie um
java.io.InputStream
chamando ocom.adobe.idp.Document
do objetogetInputStream
método . - Crie uma matriz de bytes e aloque o tamanho da variável
InputStream
objeto. Chame oInputStream
do objetoavailable
para obter o tamanho da variávelInputStream
objeto. - Preencha a matriz de bytes com o fluxo de dados do formulário chamando a variável
InputStream
do objetoread
e transmitindo a matriz de bytes como um argumento. - Chame o
javax.servlet.ServletOutputStream
do objetowrite
para enviar o fluxo de dados do formulário para o navegador da Web cliente. Transmita a matriz de bytes para awrite
método .
- Crie um
Consulte também
Início rápido (modo SOAP): Renderização por valor usando a API Java
Inclusão de arquivos da biblioteca Java do AEM Forms
Configuração das propriedades de conexão
Renderizar um formulário por valor usando a API do serviço da Web render-a-form-by-value-using-the-web-service-api
Renderize um formulário por valor usando a API do Forms (serviço da Web):
-
Incluir arquivos de projeto
- Crie classes proxy Java que consomem o WSDL do serviço Forms.
- Inclua as classes proxy Java no caminho da classe.
-
Criar um objeto de API do cliente do Forms
Crie um
FormsService
e definir valores de autenticação. -
Referência ao design de formulário
- Crie um
java.io.FileInputStream
usando seu construtor. Passe um valor de string que especifica o local do arquivo XDP. - Crie um
BLOB
usando seu construtor. OBLOB
é usado para armazenar um documento PDF criptografado com uma senha. - Crie uma matriz de bytes que armazene o conteúdo da variável
java.io.FileInputStream
objeto. Você pode determinar o tamanho da matriz de bytes obtendo a variáveljava.io.FileInputStream
tamanho do objeto usando suaavailable
método . - Preencha a matriz de bytes com dados de fluxo chamando a variável
java.io.FileInputStream
do objetoread
e transmitindo a matriz de bytes. - Preencha o
BLOB
ao invocar seusetBinaryData
e transmitindo a matriz de bytes.
- Crie um
-
Renderizar um formulário por valor
Chame o
FormsService
do objetorenderPDFForm
e transmita os seguintes valores:- Um valor de string vazio. (Normalmente, esse parâmetro requer um valor de string que especifica o nome do design de formulário.)
- A
BLOB
objeto que contém o design de formulário. Normalmente, esse valor de parâmetro é reservado para dados que são unidos ao formulário. - A
PDFFormRenderSpec
objeto que armazena opções de tempo de execução. Este é um parâmetro opcional e você pode especificarnull
se você não quiser especificar opções de tempo de execução. - A
URLSpec
objeto que contém valores de URI exigidos pelo serviço Forms. - A
java.util.HashMap
que armazena anexos de arquivo. Este é um parâmetro opcional e você pode especificarnull
se não quiser anexar arquivos ao formulário. - Um vazio
com.adobe.idp.services.holders.BLOBHolder
objeto preenchido pelo método . Isso é usado para armazenar o formulário PDF renderizado. - Um vazio
javax.xml.rpc.holders.LongHolder
objeto preenchido pelo método . (Esse argumento armazena o número de páginas no formulário.) - Um vazio
javax.xml.rpc.holders.StringHolder
objeto preenchido pelo método . (Esse argumento armazena o valor da localidade.) - Um vazio
com.adobe.idp.services.holders.FormsResultHolder
que conterá os resultados desta operação.
O
renderPDFForm
O método preenche a variávelcom.adobe.idp.services.holders.FormsResultHolder
objeto que é passado 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 cliente
- Crie um
FormResult
obtendo o valor da variávelcom.adobe.idp.services.holders.FormsResultHolder
do objetovalue
membro de dados. - Crie um
BLOB
objeto que contém dados de formulário chamando oFormsResult
do objetogetOutputContent
método . - Obtenha o tipo de conteúdo da variável
BLOB
ao invocar seugetContentType
método . - Defina as
javax.servlet.http.HttpServletResponse
tipo de conteúdo do objeto, chamando seusetContentType
e a transmissão do tipo de conteúdo doBLOB
objeto. - Crie um
javax.servlet.ServletOutputStream
objeto usado para gravar o fluxo de dados do formulário no navegador da Web cliente, chamando ojavax.servlet.http.HttpServletResponse
do objetogetOutputStream
método . - Crie uma matriz de bytes e preencha-a chamando a variável
BLOB
do objetogetBinaryData
método . Essa tarefa atribui o conteúdo daFormsResult
para a matriz de bytes. - Chame o
javax.servlet.http.HttpServletResponse
do objetowrite
para enviar o fluxo de dados do formulário para o navegador da Web cliente. Transmita a matriz de bytes para awrite
método .
- Crie um
Consulte também
Chamada de AEM Forms usando codificação Base64