Procesar formularios PDF interactivos rendering-interactive-pdf-forms
Las muestras y los ejemplos de este documento solo son para AEM Forms en un entorno JEE.
El servicio Forms procesa PDF forms interactivos en dispositivos cliente, normalmente exploradores web, para recopilar información de los usuarios. Una vez procesado un formulario interactivo, un usuario puede introducir datos en los campos de formulario y hacer clic en un botón de envío ubicado en el formulario para enviar información de vuelta al servicio de Forms. Adobe Reader o Acrobat deben estar instalados en el equipo que aloja el explorador web del cliente para que un formulario de PDF interactivo sea visible.
Ejemplo de solicitud de préstamo
Se presenta una aplicación de préstamo de ejemplo para demostrar cómo el servicio Forms utiliza formularios interactivos para recopilar información de los usuarios. Esta aplicación permite al usuario rellenar un formulario con los datos necesarios para obtener un préstamo y, a continuación, enviar datos al servicio de Forms. El diagrama siguiente muestra el flujo lógico de la aplicación del préstamo.
En la tabla siguiente se describen los pasos de este diagrama.
GetLoanForm
se invoca desde una página de HTML.GetLoanForm
utiliza la API de cliente del servicio Forms para procesar el formulario de préstamo en el explorador web del cliente. (Consulte Procesar un formulario de PDF interactivo mediante la API de Java).HandleData
. (Consulte "Formulario de préstamo".)HandleData
utiliza la API de cliente del servicio Forms para procesar el envío del formulario y recuperar los datos del formulario. A continuación, los datos se almacenan en una base de datos empresarial. (Consulte Gestión de Forms enviados.)Formulario de préstamo
Este formulario de préstamo interactivo lo procesa el servlet Java GetLoanForm
de la aplicación de préstamo de ejemplo.
Formulario de confirmación
Este formulario lo procesa el servlet Java HandleData
de la aplicación de préstamo de ejemplo.
El servlet Java HandleData
rellena previamente este formulario con el nombre y los apellidos del usuario, así como la cantidad. Una vez rellenado previamente el formulario, se envía al explorador web del cliente. (Consulte Rellenado previo de Forms con diseños flexibles)
Servlets Java
La aplicación de préstamo de ejemplo es un ejemplo de una aplicación de servicio de Forms que existe como servlet Java. Un servlet Java es un programa Java que se ejecuta en un servidor de aplicaciones J2EE, como WebSphere, y contiene el código de API del cliente del servicio Forms.
El siguiente código muestra la sintaxis de un servlet Java denominado GetLoanForm:
public class GetLoanForm extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp
throws ServletException, IOException {
}
public void doPost(HttpServletRequest req, HttpServletResponse resp
throws ServletException, IOException {
}
Normalmente, no colocaría el código de la API del cliente del servicio de Forms dentro del método doGet
o doPost
de un servlet Java. Se recomienda colocar este código en una clase independiente, crear instancias de la clase desde el método doPost
(o el método doGet
) y llamar a los métodos apropiados. Sin embargo, para que el código sea breve, los ejemplos de código de esta sección se mantienen al mínimo y los ejemplos de código se colocan en el método doPost
.
Resumen de los pasos
Para procesar un formulario de PDF interactivo, realice las siguientes tareas:
- Incluir archivos de proyecto.
- Cree un objeto de API de cliente de Forms.
- Especifique los valores de URI.
- Adjuntar archivos al formulario (opcional).
- Procesar un formulario interactivo de PDF.
- 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 realizar mediante programación una operación de la API de cliente del servicio de Forms, debe crear un objeto de la API de cliente de Forms. Si está usando la API de Java, cree un objeto FormsServiceClient
. Si está usando la API del servicio web de Forms, cree un objeto FormsService
.
Especificar valores de URI
Puede especificar los valores de URI que requiere el servicio Forms para procesar un formulario. Se puede hacer referencia a un diseño de formulario que se guarda como parte de una aplicación de Forms mediante el valor de URI de raíz de contenido repository:///
. Por ejemplo, considere el siguiente diseño de formulario denominado Loan.xdp ubicado dentro de una aplicación de Forms denominada FormsApplication:
Para tener acceso a este diseño de formulario, especifique Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
como nombre del formulario (el primer parámetro pasado al método renderPDFForm
) y repository:///
como valor de URI de raíz de contenido.
La ruta a un recurso en una aplicación de Forms es:
Applications/Application-name/Application-version/Folder.../Filename
Los siguientes valores muestran algunos ejemplos de valores de URI:
- Applications/AppraisalReport/1.0/Forms/FullForm.xdp
- Applications/AnotherApp/1.1/Assets/picture.jpg
- Applications/SomeApp/2.0/Resources/Data/XSDs/MyData.xsd
Cuando procesa un formulario interactivo, puede definir valores de URI como la dirección URL de destino donde se publican los datos del formulario. La dirección URL de destino se puede definir de una de las siguientes maneras:
- Haga clic en el botón Enviar mientras diseña el diseño de formulario en Designer.
- Mediante la API de cliente del servicio de Forms
Si la dirección URL de destino se define dentro del diseño de formulario, no la anule con la API de cliente del servicio de Forms. Es decir, al establecer la dirección URL de destino mediante la API de Forms, se restablece la dirección URL especificada en el diseño de formulario a la especificada mediante la API. Si desea enviar el formulario de PDF a la URL de destino especificada en el diseño de formulario, establezca mediante programación la URL de destino en una cadena vacía.
Si tiene un formulario que contiene un botón de envío y un botón de cálculo (con una secuencia de comandos correspondiente que se ejecuta en el servidor), puede definir mediante programación la dirección URL a la que se envía el formulario para ejecutar la secuencia de comandos. Utilice el botón de envío del diseño de formulario para especificar la dirección URL a la que se publican los datos del formulario. (Consulte Cálculo de datos de formulario.)
com.adobe.idp.Document
al servicio Forms. La instancia com.adobe.idp.Document
contiene un diseño de formulario. (Consulte Pasar documentos al servicio de Forms.)Adjuntar archivos al formulario
Puede adjuntar archivos a un formulario. Cuando procesa un formulario de PDF con archivos adjuntos, los usuarios pueden recuperar los archivos adjuntos en Acrobat mediante el panel de archivos adjuntos. JPG Puede adjuntar distintos tipos de archivo a un formulario, como un archivo de texto, o a un archivo binario, como un archivo de.
Procesar un formulario de PDF interactivo
Para procesar un formulario, utilice un diseño de formulario creado en Designer y guardado como archivo XDP o de PDF. Además, puede procesar un formulario creado con Acrobat y guardado como archivo de PDF. Para procesar un formulario de PDF interactivo, invoque el método renderPDFForm
o renderPDFForm2
del objeto FormsServiceClient
.
renderPDFForm
usa un objeto URLSpec
. La raíz de contenido del archivo XDP se pasa al servicio Forms mediante el método setContentRootURI
del objeto URLSpec
. El nombre del diseño del formulario ( formQuery
) se pasa como un valor de parámetro independiente. Los dos valores se concatenan para obtener la referencia absoluta al diseño de formulario.
El método renderPDFForm2
acepta una instancia com.adobe.idp.Document
que contiene el documento XDP o de PDF que se va a procesar.
Procesar un formulario interactivo de PDF mediante la API de Java render-an-interactive-pdf-form-using-the-java-api
Procesar un formulario interactivo de PDF 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
-
Especificar valores de URI
- Cree un objeto
URLSpec
que almacene valores de URI mediante su constructor. - Invoque el método
setApplicationWebRoot
del objetoURLSpec
y pase un valor de cadena que represente la raíz web de la aplicación. - Invoque el método
setContentRootURI
del objetoURLSpec
y pase un valor de cadena que especifique el valor del URI de raíz de contenido. Asegúrese de que el diseño del formulario esté en el URI raíz del contenido. Si no es así, el servicio Forms genera una excepción. Para hacer referencia al repositorio, especifiquerepository:///
. - Invoque el método
setTargetURL
del objetoURLSpec
y pase un valor de cadena que especifique el valor de la dirección URL de destino donde se publican los datos del formulario. Si define la dirección URL de destino en el diseño de formulario, puede pasar una cadena vacía. También puede especificar la dirección URL a la que se envía un formulario para realizar cálculos.
- Cree un objeto
-
Adjuntar archivos al formulario
-
Cree un objeto
java.util.HashMap
para almacenar los archivos adjuntos mediante su constructor. -
Invoque el método
put
del objetojava.util.HashMap
para que cada archivo se adjunte al formulario procesado. Pase los siguientes valores a este método:- Valor de cadena que especifica el nombre del archivo adjunto, incluida la extensión del nombre de archivo.
-
Objeto
com.adobe.idp.Document
que contiene el archivo adjunto.
note note NOTE Repita este paso para cada archivo que desee adjuntar al formulario. Este paso es opcional y puede pasar null
si no desea enviar archivos adjuntos. -
-
Procesar un formulario interactivo de PDF
Invoque el método
renderPDFForm
del objetoFormsServiceClient
y pase los siguientes valores:- Un valor de cadena que especifica el nombre del diseño del formulario, incluida la extensión del nombre de archivo. Si hace referencia a un diseño de formulario que forma parte de una aplicación de Forms, asegúrese de especificar la ruta de acceso completa, como
Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
. - Objeto
com.adobe.idp.Document
que contiene datos para combinar con el formulario. Si no desea combinar datos, pase un objetocom.adobe.idp.Document
vacío. - 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 debe escribirse en el explorador web del cliente. - Un valor de cadena que especifica el nombre del diseño del formulario, incluida la extensión del nombre de archivo. Si hace referencia a un diseño de formulario que forma parte de una aplicación de Forms, asegúrese de especificar la ruta de acceso completa, como
-
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 rellénela 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
Procesar un formulario interactivo de PDF mediante la API de servicio web render-an-interactive-pdf-form-using-the-web-service-api
Procesar un formulario interactivo de PDF mediante 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. -
Especificar valores de URI
- Cree un objeto
URLSpec
que almacene valores de URI mediante su constructor. - Invoque el método
setApplicationWebRoot
del objetoURLSpec
y pase un valor de cadena que represente la raíz web de la aplicación. - Invoque el método
setContentRootURI
del objetoURLSpec
y pase un valor de cadena que especifique el valor del URI de raíz de contenido. Asegúrese de que el diseño del formulario esté en el URI raíz del contenido. Si no es así, el servicio Forms genera una excepción. Para hacer referencia al repositorio, especifiquerepository:///
. - Invoque el método
setTargetURL
del objetoURLSpec
y pase un valor de cadena que especifique el valor de la dirección URL de destino donde se publican los datos del formulario. Si define la dirección URL de destino en el diseño de formulario, puede pasar una cadena vacía. También puede especificar la dirección URL a la que se envía un formulario para realizar cálculos.
- Cree un objeto
-
Adjuntar archivos al formulario
-
Cree un objeto
java.util.HashMap
para almacenar los archivos adjuntos mediante su constructor. -
Invoque el método
put
del objetojava.util.HashMap
para que cada archivo se adjunte al formulario procesado. Pase los siguientes valores a este método:- Valor de cadena que especifica el nombre del archivo adjunto, incluida la extensión del nombre de archivo
-
Objeto
BLOB
que contiene el archivo adjunto
note note NOTE Repita este paso para cada archivo que desee adjuntar al formulario. -
-
Procesar un formulario interactivo de PDF
Invoque el método
renderPDFForm
del objetoFormsService
y pase los siguientes valores:- Un valor de cadena que especifica el nombre del diseño del formulario, incluida la extensión del nombre de archivo. Si hace referencia a un diseño de formulario que forma parte de una aplicación de Forms, asegúrese de especificar la ruta de acceso completa, como
Applications/FormsApplication/1.0/FormsFolder/Loan.xdp
. - Objeto
BLOB
que contiene datos para combinar con el formulario. Si no desea combinar datos, pasenull
. - 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 almacenará 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 almacenará 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. - Un valor de cadena que especifica el nombre del diseño del formulario, incluida la extensión del nombre de archivo. Si hace referencia a un diseño de formulario que forma parte de una aplicación de Forms, asegúrese de especificar la ruta de acceso completa, como
-
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
Escriba el flujo de datos del formulario en el explorador web del cliente
Cuando el servicio Forms procesa un formulario, 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.