Normalmente, un diseño de formulario creado en Designer se pasa por referencia al servicio Forms. Los diseños de formulario pueden ser grandes y, como resultado, es más eficaz pasarlos por referencia para evitar tener que calcular los bytes de diseño de formulario por valor. El servicio Forms también puede almacenar en caché el diseño de formulario para que, cuando se almacena en caché, no tenga que leer continuamente el diseño de formulario.
Si un diseño de formulario contiene un atributo UUID, se almacena en la caché. El valor UUID es único para todos los diseños de formulario y se utiliza para identificar un formulario de forma única. Cuando se procesa un formulario por valor, el formulario solo se debe almacenar en caché cuando se utiliza repetidamente. Sin embargo, si el formulario no se utiliza repetidamente y tiene que ser único, puede evitar guardar el formulario en la caché mediante las opciones de almacenamiento en caché que se establecen con la API de AEM Forms.
El servicio Forms también puede resolver la ubicación del contenido vinculado dentro del diseño de formulario. Por ejemplo, las imágenes vinculadas a las que se hace referencia desde el diseño de formulario son direcciones URL relativas. Siempre se da por hecho que el contenido vinculado es relativo a la ubicación del diseño de formulario. Por lo tanto, resolver el contenido vinculado es una cuestión que consiste en determinar su ubicación aplicando la ruta relativa a la ubicación absoluta del diseño de formulario.
En lugar de pasar un diseño de formulario por referencia, puede pasar un diseño de formulario por valor. Transmitir un diseño de formulario por valor resulta eficaz cuando se crea dinámicamente un diseño de formulario; es decir, cuando una aplicación cliente genera el XML que crea un diseño de formulario durante la ejecución. En este caso, un diseño de formulario no se almacena en un repositorio físico porque se almacena en la memoria. Al crear dinámicamente un diseño de formulario en tiempo de ejecución y pasarlo por valor, puede almacenar en caché el formulario y mejorar el rendimiento del servicio Forms.
Limitaciones de pasar un formulario por valor
Las siguientes limitaciones se aplican cuando un diseño de formulario se pasa por valor:
Aunque puede procesar distintos tipos de formularios por valor (por ejemplo, formularios HTML o formularios que contienen derechos de uso), en esta sección se trata la representación de PDF forms interactivos.
Para obtener más información sobre el servicio Forms, consulte Referencia de servicios para AEM Forms.
Para procesar un formulario por valor, lleve a cabo los siguientes pasos:
Incluir archivos de proyecto
Incluya los archivos necesarios en el proyecto de desarrollo. Si va a crear una aplicación cliente mediante Java, incluya los archivos JAR necesarios. Si utiliza servicios Web, asegúrese de incluir los archivos proxy.
Creación de un objeto de API de Forms Client
Para poder importar datos mediante programación en una API de cliente de formulario PDF, debe crear un cliente de servicio de integración de datos. Al crear un cliente de servicio, se define la configuración de conexión necesaria para invocar un servicio.
Hacer referencia al diseño de formulario
Al procesar un formulario por valor, debe crear un objeto com.adobe.idp.Document
que contenga el diseño de formulario que se va a procesar. Puede hacer referencia a un archivo XDP existente o puede crear dinámicamente un diseño de formulario en tiempo de ejecución y rellenar un com.adobe.idp.Document
con esos datos.
Esta sección y el inicio rápido correspondiente hacen referencia a un archivo XDP existente.
Representar un formulario por valor
Para procesar un formulario por valor, pase una instancia com.adobe.idp.Document
que contenga el diseño de formulario al parámetro inDataDoc
del método de procesamiento (puede ser cualquiera de los métodos de procesamiento del objeto FormsServiceClient
como renderPDFForm
, (Deprecated) renderHTMLForm
, etc.). Normalmente, este valor de parámetro se reserva a los datos que se combinan con el formulario. Del mismo modo, pase un valor de cadena vacío al parámetro formQuery
. Normalmente, este parámetro requiere un valor de cadena que especifica el nombre del diseño de formulario.
Si desea mostrar datos dentro del formulario, los datos deben especificarse dentro del elemento xfa:datasets
. Para obtener información sobre la arquitectura XFA, vaya a https://partners.adobe.com/public/developer/xml/index_arch.html.
Escribir el flujo de datos del formulario en el navegador web del cliente
Cuando el servicio Forms procesa un formulario por valor, devuelve una secuencia de datos de formulario que debe escribir en el explorador Web del cliente. Cuando se escribe en el navegador web del cliente, el formulario es visible para el usuario.
Consulte también
Representar un formulario por valor mediante la API de Java
Representación de un formulario por valor mediante la API de servicio Web
Inclusión de archivos de biblioteca Java de AEM Forms
Configuración de las propiedades de conexión
Inicios rápidos de la API de servicio de Forms
Pasar Documentos al servicio Forms
Creación de Aplicaciones web que procesan Forms
Representar un formulario por valor mediante la API de Forms (Java):
Incluir archivos de proyecto
Incluya archivos JAR de cliente, como adobe-forms-client.jar, en la ruta de clases del proyecto Java.
Creación de un objeto de API de Forms Client
ServiceClientFactory
que contenga propiedades de conexión.FormsServiceClient
utilizando su constructor y pasando el objeto ServiceClientFactory
.Hacer referencia al diseño de formulario
java.io.FileInputStream
que represente el diseño de formulario que se va a procesar mediante su constructor y pasando un valor de cadena que especifique la ubicación del archivo XDP.com.adobe.idp.Document
utilizando su constructor y pasando el objeto java.io.FileInputStream
.Representar un formulario por valor
Invoque el método FormsServiceClient
del objeto renderPDFForm
y pase los siguientes valores:
com.adobe.idp.Document
que contiene el diseño de formulario. Normalmente, este valor de parámetro está reservado para datos que se combinan con el formulario.PDFFormRenderSpec
que almacena opciones de tiempo de ejecución. Es un parámetro opcional y puede especificar null
si no desea especificar opciones de tiempo de ejecución.URLSpec
que contiene valores de URI necesarios para el servicio de Forms.java.util.HashMap
que almacena archivos adjuntos. Es un parámetro opcional y puede especificar null
si no desea adjuntar archivos al formulario.El método renderPDFForm
devuelve un objeto FormsResult
que contiene una secuencia de datos de formulario que se puede escribir en el explorador Web del cliente.
Escribir el flujo de datos del formulario en el navegador web del cliente
com.adobe.idp.Document
invocando el método FormsResult
del objeto ‘s getOutputContent
.com.adobe.idp.Document
invocando su método getContentType
.javax.servlet.http.HttpServletResponse
invocando su método setContentType
y pasando el tipo de contenido del objeto com.adobe.idp.Document
.javax.servlet.ServletOutputStream
que se utilice para escribir la secuencia de datos del formulario en el navegador web del cliente invocando el método javax.servlet.http.HttpServletResponse
del objeto getOutputStream
.java.io.InputStream
invocando el método com.adobe.idp.Document
del objeto getInputStream
.InputStream
. Invoque el método InputStream
del objeto available
para obtener el tamaño del objeto InputStream
.InputStream
del objeto read
y pasando la matriz de bytes como argumento.javax.servlet.ServletOutputStream
del objeto write
para enviar la secuencia de datos del formulario al explorador Web del cliente. Pase la matriz de bytes al método write
.Consulte también
Representación de Forms por valor
Inicio rápido (modo SOAP): Representación por valor mediante la API de Java
Inclusión de archivos de biblioteca Java de AEM Forms
Configuración de las propiedades de conexión
Representar un formulario por valor mediante la API de Forms (servicio Web):
Incluir archivos de proyecto
Creación de un objeto de API de Forms Client
Cree un objeto FormsService
y defina los valores de autenticación.
Hacer referencia al diseño de formulario
java.io.FileInputStream
utilizando su constructor. Pase un valor de cadena que especifique la ubicación del archivo XDP.BLOB
utilizando su constructor. El objeto BLOB
se utiliza para almacenar un documento PDF cifrado con una contraseña.java.io.FileInputStream
. Puede determinar el tamaño de la matriz de bytes obteniendo el tamaño del objeto java.io.FileInputStream
mediante su método available
.java.io.FileInputStream
del objeto read
y pasando la matriz de bytes.BLOB
invocando su método setBinaryData
y pasando la matriz de bytes.Representar un formulario por valor
Invoque el método FormsService
del objeto renderPDFForm
y pase los siguientes valores:
BLOB
que contiene el diseño de formulario. Normalmente, este valor de parámetro está reservado para datos que se combinan con el formulario.PDFFormRenderSpec
que almacena opciones de tiempo de ejecución. Es un parámetro opcional y puede especificar null
si no desea especificar opciones de tiempo de ejecución.URLSpec
que contiene valores de URI necesarios para el servicio de Forms.java.util.HashMap
que almacena archivos adjuntos. Es un parámetro opcional y puede especificar null
si no desea adjuntar archivos al formulario.com.adobe.idp.services.holders.BLOBHolder
que se rellena con el método. Se utiliza para almacenar el formulario PDF procesado.javax.xml.rpc.holders.LongHolder
que se rellena con el método. (Este argumento almacena el número de páginas del formulario).javax.xml.rpc.holders.StringHolder
que se rellena con el método. (Este argumento almacena el valor de configuración regional).com.adobe.idp.services.holders.FormsResultHolder
que contendrá los resultados de esta operación.El método renderPDFForm
rellena el objeto com.adobe.idp.services.holders.FormsResultHolder
que se pasa como el último valor de argumento con una secuencia de datos de formulario que debe escribirse en el explorador Web del cliente.
Escribir el flujo de datos del formulario en el navegador web del cliente
FormResult
obteniendo el valor del miembro de datos com.adobe.idp.services.holders.FormsResultHolder
del objeto value
.BLOB
que contenga datos de formulario invocando el método FormsResult
del objeto getOutputContent
.BLOB
invocando su método getContentType
.javax.servlet.http.HttpServletResponse
invocando su método setContentType
y pasando el tipo de contenido del objeto BLOB
.javax.servlet.ServletOutputStream
que se utilice para escribir la secuencia de datos del formulario en el navegador web del cliente invocando el método javax.servlet.http.HttpServletResponse
del objeto getOutputStream
.BLOB
del objeto getBinaryData
. Esta tarea asigna el contenido del objeto FormsResult
a la matriz de bytes.javax.servlet.http.HttpServletResponse
del objeto write
para enviar la secuencia de datos del formulario al explorador Web del cliente. Pase la matriz de bytes al método write
.Consulte también
Representación de Forms por valor
Invocación de AEM Forms mediante codificación Base64