Procesar formularios por valor rendering-forms-by-value
Las muestras y los ejemplos de este documento solo son para AEM Forms en un entorno JEE.
Normalmente, un diseño de formulario creado en Designer se pasa por referencia al servicio de Forms. Los diseños de formulario pueden ser grandes y, como resultado, es más eficaz pasarlos por referencia para evitar tener que calcular las referencias de 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 almacene 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 caché. El valor UUID es único para todos los diseños de formulario y se utiliza para identificar un formulario de forma exclusiva. Al procesar un formulario por valor, el formulario solo debe almacenarse en caché cuando se utiliza repetidamente. Sin embargo, si el formulario no se utiliza repetidamente y debe ser único, puede evitar almacenar en caché el formulario mediante las opciones de almacenamiento en caché establecidas mediante 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. Se supone que el contenido vinculado siempre es relativo a la ubicación del diseño del formulario. Por lo tanto, para resolver el contenido vinculado es necesario 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. Pasar un diseño de formulario por valor es 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 el tiempo de 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 de Forms.
Limitaciones al pasar un formulario por valor
Cuando se pasa un diseño de formulario por valor, se aplican las siguientes limitaciones:
- No se puede incluir contenido vinculado relativo dentro del diseño de formulario. Todas las imágenes y fragmentos deben incrustarse dentro del diseño de formulario o deben mencionarse absolutamente.
- Los cálculos del lado del servidor no se pueden realizar después de procesar el formulario. Si el formulario se devuelve al servicio Forms, los datos se extraen y se devuelven sin ningún cálculo del lado del servidor.
- Como HTML solo puede utilizar imágenes vinculadas en tiempo de ejecución, no es posible generar un HTML con imágenes incrustadas. Esto se debe a que el servicio Forms admite imágenes incrustadas con HTML al recuperar las imágenes de un diseño de formulario al que se hace referencia. Dado que un diseño de formulario transferido por un valor no tiene una ubicación a la que se haga referencia, las imágenes incrustadas no se pueden extraer cuando se muestra la página del HTML. Por lo tanto, las referencias de imagen deben ser rutas absolutas para que se representen en HTML.
Resumen de los pasos summary-of-steps
Para procesar un formulario por valor, realice los siguientes pasos:
- Incluir archivos de proyecto.
- Cree un objeto de API de cliente de Forms.
- Hacer referencia al diseño de formulario.
- Procesar un formulario por valor.
- Escriba el flujo de datos del formulario en el explorador web del cliente.
Incluir archivos de proyecto
Incluya los archivos necesarios en el proyecto de desarrollo. Si está creando una aplicación cliente mediante Java, incluya los archivos JAR necesarios. Si utiliza servicios web, asegúrese de incluir los archivos proxy.
Crear un objeto de API de cliente de Forms
Para poder importar datos mediante programación en una API de cliente de formulario de PDF, debe crear un cliente de servicio de integración de datos. Al crear un cliente de servicios, 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 desea 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.
Procesar un formulario por valor
Para procesar un formulario por valor, pase una instancia de 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.). Este valor de parámetro se reserva normalmente para los datos que se combinan con el formulario. Igualmente, 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.
xfa:datasets
. Para obtener información acerca de la arquitectura XFA, vaya a https://www.pdfa.org/norm-refs/XFA-3_3.pdf.Escriba el flujo de datos del formulario en el explorador web del cliente
Cuando el servicio Forms procesa un formulario por valor, devuelve un flujo de datos de formulario que debe escribir en el explorador web del cliente. Cuando se escribe en el explorador web del cliente, el formulario es visible para el usuario.
Consulte también
Procesar un formulario por valor mediante la API de Java
Procesar un formulario por valor mediante la API de servicio web
Incluir archivos de biblioteca Java de AEM Forms
Estableciendo propiedades de conexión
Inicio rápido de la API del servicio de Forms
Procesar un formulario por valor mediante la API de Java render-a-form-by-value-using-the-java-api
Procesar 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 clase del proyecto Java.
-
Crear un objeto de API de cliente de Forms
- Cree un objeto
ServiceClientFactory
que contenga propiedades de conexión. - Cree un objeto
FormsServiceClient
utilizando su constructor y pasando el objetoServiceClientFactory
.
- Cree un objeto
-
Hacer referencia al diseño de formulario
- Cree un objeto
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. - Cree un objeto
com.adobe.idp.Document
utilizando su constructor y pasando el objetojava.io.FileInputStream
.
- Cree un objeto
-
Procesar un formulario por valor
Invoque el método
renderPDFForm
del objetoFormsServiceClient
y pase los siguientes valores:- Un valor de cadena vacío. (Normalmente, este parámetro requiere un valor de cadena que especifica el nombre del diseño de formulario).
- Objeto
com.adobe.idp.Document
que contiene el diseño de formulario. Normalmente, este valor de parámetro se reserva para los datos que se combinan con el formulario. - Objeto
PDFFormRenderSpec
que almacena opciones en tiempo de ejecución. Este es un parámetro opcional y puede especificarnull
si no desea especificar opciones en tiempo de ejecución. - Un objeto
URLSpec
que contiene valores de URI requeridos por el servicio Forms. - Objeto
java.util.HashMap
que almacena datos adjuntos de archivos. Este es un parámetro opcional y puede especificarnull
si no desea adjuntar archivos al formulario.
El método
renderPDFForm
devuelve un objetoFormsResult
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 explorador web del cliente
- Cree un objeto
com.adobe.idp.Document
invocando el métodogetOutputContent
del objetoFormsResult
. - Obtenga el tipo de contenido del objeto
com.adobe.idp.Document
invocando su métodogetContentType
. - Establezca el tipo de contenido del objeto
javax.servlet.http.HttpServletResponse
invocando su métodosetContentType
y pasando el tipo de contenido del objetocom.adobe.idp.Document
. - Cree un objeto
javax.servlet.ServletOutputStream
utilizado para escribir el flujo de datos de formulario en el explorador web del cliente invocando el métodogetOutputStream
del objetojavax.servlet.http.HttpServletResponse
. - Cree un objeto
java.io.InputStream
invocando el métodogetInputStream
del objetocom.adobe.idp.Document
. - Cree una matriz de bytes y asigne el tamaño del objeto
InputStream
. Invoque el métodoavailable
del objetoInputStream
para obtener el tamaño del objetoInputStream
. - Rellene la matriz de bytes con la secuencia de datos de formulario invocando el método
read
del objetoInputStream
y pasando la matriz de bytes como argumento. - Invoque el método
write
del objetojavax.servlet.ServletOutputStream
para enviar la secuencia de datos de formulario al explorador web del cliente. Pase la matriz de bytes al métodowrite
.
- Cree un objeto
Consulte también
Procesar formularios por valor
SOAP Inicio rápido (modo de): Procesamiento por valor mediante la API de Java
Procesar un formulario por valor mediante la API de servicio web render-a-form-by-value-using-the-web-service-api
Procesar un formulario por valor utilizando la API de Forms (servicio web):
-
Incluir archivos de proyecto
- Cree clases de proxy Java que consuman el WSDL del servicio Forms.
- Incluya las clases de proxy Java en la ruta de clase.
-
Crear un objeto de API de cliente de Forms
Cree un objeto
FormsService
y establezca los valores de autenticación. -
Hacer referencia al diseño de formulario
- Crear un objeto
java.io.FileInputStream
mediante su constructor. Pase un valor de cadena que especifique la ubicación del archivo XDP. - Crear un objeto
BLOB
mediante su constructor. El objetoBLOB
se usa para almacenar un documento de PDF cifrado con una contraseña. - Cree una matriz de bytes que almacene el contenido del objeto
java.io.FileInputStream
. Puede determinar el tamaño de la matriz de bytes obteniendo el tamaño del objetojava.io.FileInputStream
mediante su métodoavailable
. - Rellene la matriz de bytes con datos de secuencia invocando el método
read
del objetojava.io.FileInputStream
y pasando la matriz de bytes. - Rellene el objeto
BLOB
invocando su métodosetBinaryData
y pasando la matriz de bytes.
- Crear un objeto
-
Procesar un formulario por valor
Invoque el método
renderPDFForm
del objetoFormsService
y pase los siguientes valores:- Un valor de cadena vacío. (Normalmente, este parámetro requiere un valor de cadena que especifica el nombre del diseño de formulario).
- Objeto
BLOB
que contiene el diseño de formulario. Normalmente, este valor de parámetro se reserva para los datos que se combinan con el formulario. - Objeto
PDFFormRenderSpec
que almacena opciones en tiempo de ejecución. Este es un parámetro opcional y puede especificarnull
si no desea especificar opciones en tiempo de ejecución. - Un objeto
URLSpec
que contiene valores de URI requeridos por el servicio Forms. - Objeto
java.util.HashMap
que almacena datos adjuntos de archivos. Este es un parámetro opcional y puede especificarnull
si no desea adjuntar archivos al formulario. - Un objeto
com.adobe.idp.services.holders.BLOBHolder
vacío que ha rellenado el método. Se utiliza para almacenar el formulario de PDF procesado. - Un objeto
javax.xml.rpc.holders.LongHolder
vacío que ha rellenado el método. (Este argumento almacena el número de páginas del formulario.) - Un objeto
javax.xml.rpc.holders.StringHolder
vacío que ha rellenado el método. (Este argumento almacena el valor de configuración regional.) - Un objeto
com.adobe.idp.services.holders.FormsResultHolder
vacío que contendrá los resultados de esta operación.
El método
renderPDFForm
rellena el objetocom.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 explorador web del cliente
- Cree un objeto
FormResult
obteniendo el valor del miembro de datosvalue
del objetocom.adobe.idp.services.holders.FormsResultHolder
. - Cree un objeto
BLOB
que contenga datos de formulario invocando el métodogetOutputContent
del objetoFormsResult
. - Obtenga el tipo de contenido del objeto
BLOB
invocando su métodogetContentType
. - Establezca el tipo de contenido del objeto
javax.servlet.http.HttpServletResponse
invocando su métodosetContentType
y pasando el tipo de contenido del objetoBLOB
. - Cree un objeto
javax.servlet.ServletOutputStream
utilizado para escribir el flujo de datos de formulario en el explorador web del cliente invocando el métodogetOutputStream
del objetojavax.servlet.http.HttpServletResponse
. - Cree una matriz de bytes y rellénela invocando el método
getBinaryData
del objetoBLOB
. Esta tarea asigna el contenido del objetoFormsResult
a la matriz de bytes. - Invoque el método
write
del objetojavax.servlet.http.HttpServletResponse
para enviar la secuencia de datos de formulario al explorador web del cliente. Pase la matriz de bytes al métodowrite
.
- Cree un objeto
Consulte también
Procesar formularios por valor
Invocar AEM Forms con codificación Base64