2012-08-04 14 views
6

Tengo una aplicación de escritorio oscilante existente que deseo convertir a una aplicación web. Lo primero que se detiene al hacerlo es que la aplicación de escritorio se ocupa de escribir y leer desde archivos PDF. Además, el usuario rellena los formularios PDF que debe leer la aplicación.Aplicación web que se ocupa de los archivos-descarga de descarga

Ahora, un caso de uso típico en la aplicación de escritorio es como, el usuario inicia sesión abre un formulario en PDF y lo llena. La aplicación swing maneja dónde se almacena el archivo para que vaya al archivo y lea el formulario, extraiga los datos y almacene los datos en el archivo db. Es posible que el usuario no complete el formulario de una sola vez. Él podría guardarlo volver más tarde y continuar.

Todo esto tiene que hacerse ahora con la aplicación web. Mi problema es que no quiero que el usuario descargue y cargue el formulario varias veces en el servidor. Eso me comería el ancho de banda y también pediría que el uso para guardar el archivo localmente y cargarlo una vez que complete el formulario no me atrae, ya que la aplicación de escritorio también se usa para administrar la ubicación de estos archivos.

¿Tendría que implementar algo así como un tipo de Dropbox? ¿Un pequeño demonio se ejecuta continuamente para verificar qué archivo se ha actualizado y subirlo al servidor? Eso sería difícil ya que en el servidor no sabría si el archivo era el último o no. ¿Hay algo como esto que alguien haya hecho antes?

Respuesta

5

Tengo otra sugerencia: por qué no mostrar al usuario un formulario con los mismos campos y transferirlos al PDF después de que el usuario lo envíe. De esta forma, el Pdf no abandona el servidor y usted transmite la cantidad mínima de datos.

+0

gracias por la respuesta. Pero consulte el comentario bajo jowierun .. – sethu

3

Cambiar a una versión web de la aplicación puede obligarlo a volver a pensar en la forma en que está haciendo las cosas. Ciertamente, los navegadores están intencionalmente limitados en su acceso al sistema de archivos local, lo que presenta un gran obstáculo para su modo de operación actual.

Incluso si pudiera visualizar el PDF dentro de un navegador, detectar la finalización de ediciones y enviarlo al servidor desde dentro del código del navegador (lo que probablemente sea posible), estará sujeto a navegadores diferentes haciendo cosas diferentes (extraño) cosas con cualquier plugin pdf está instalado.

Como ya se mencionó en Vitaliy, el cambio al poder completar un formulario (web) en el navegador significa que todo el problema de carga de descargas desaparece. Pero luego tiene que tomar lo que el usuario ha hecho en una página web y bombear eso en un PDF de alguna manera. Si no TIENE que comenzar con un PDF, pero podría recopilar los datos y producir un PDF al final, es posible que tenga más opciones. Por ejemplo, puede usar iText para crear un PDF directamente si no tiene demasiados estilos de documento para trabajar. Puede usar algo como Docmosis, que le puede dar plantillas y hacer que se llene y renderice archivos PDF más adelante. Con la opción Docmosis también puede solicitar a Docmosis la lista de campos en la plantilla, de modo que pueda crear un formulario web basado en la plantilla seleccionada, permita que el usuario lo complete y luego inserte esos datos en Docmosis para generar el archivo.

Afortunadamente, hay algunas opciones que son útiles para usted.

+0

Desafortunadamente, eso sería difícil de hacer. Estos pdfs tienen una gran cantidad de campos. Ellos no son de mi propiedad. Son formularios XFA con firmas digitales y archivos adjuntos y otras cosas. De todos modos, el problema no se limita a los formularios en pdf. Hay documentos de Word, Excel y cualquier otro documento con el que el usuario quiera trabajar. Lo siento, debería haber mencionado esto en la pregunta anterior. – sethu

0

Adobe documents how to do this here. Nunca subestimes el poder del diseño por google. Sé que esto puede funcionar porque he usado formularios PDF en línea.

+0

Los formularios PDF no son los simples datos FDF exportados, sino más bien XFA http://partners.adobe.com/public/developer/xml/index_arch.html que son mucho más complejo. Realmente no quiero tener un campo de formulario en mi página html reemplazando cada campo en el formulario. Es por eso que la forma está allí en primer lugar. – sethu

0

Trabajé en un problema similar hace algunos años, aunque no estaba tratando con formularios firmados. La firma definitivamente lo hace un poco más difícil. Sin embargo, pude usar iText para crear un formulario en PDF con campos y solo enviar los datos de campo al servidor. Por fuera, lamentablemente no recuerdo exactamente qué/cómo lo hicimos, pero podemos confirmar que es factible (con limitaciones/advertencias).Ej: El usuario debe tener el complemento de lector de PDF instalado & El usuario se vio obligado a d/l el pdf cada vez.

Básicamente lo que hice fue usar iText para crear un FDF a partir de un PDF (con los campos de formularios existentes). El botón de enviar en el FDF en realidad envía los datos del formulario a la URL que elijas (similar a un formulario HTML). Una vez que tenga esos datos, creo que fusioné los campos de formulario (desde el FDF) con el PDF en el lado del servidor usando iText.

Una vez que utiliza el servidor para mantener todos los datos del formulario, el proceso de sincronización/bloqueo que utiliza para asegurarse de que un solo usuario esté actualizando los mejores y más recientes datos del formulario depende de usted.

Su comentario en jowierun indica que también desea tratar con documentos de Word/Excel/etc, por lo que no estoy del todo seguro de que entienda sus necesidades. En su publicación inicial se discutió la necesidad de completar formularios PDF localmente, pero luego parece que está buscando un sistema para compartir archivos.

¿Puede aclarar exactamente lo que está tratando de lograr?

+0

Hola Eric, tienes razón, sería un sistema para compartir archivos. Pero estoy más preocupado con los formularios PDF. Mi servidor leerá/escribirá en estos formularios PDF. El problema es que cuando el usuario completa el formulario y necesito leer los datos del formulario en el servidor, necesito saber que el formulario es el último. No quiero pedirle a mi usuario que revise el ciclo de carga y descarga que es bastante tedioso. En cambio, si el ciclo se vuelve a llenar y luego el servidor sabe que necesita obtener el formulario del sistema del usuario antes de que proceda, sería ideal – sethu

+0

Actualicé mi respuesta para darle un poco de información adicional sobre lo que hice. Pero su requisito no tiene mucho sentido. ¿Desea almacenar el PDF guardado en el cliente y hacer que su servidor recupere el PDF del cliente cuando lo necesite? Casi suena como un sistema P2P ahora. ¿Qué pasa si el cliente está fuera de línea? ¿O los bloqueos de HD del cliente, etc.? Y el proceso de carga solo cargaría los datos del campo, por lo que no sería más tedioso que hacer clic en "guardar". –

+0

No p2p, sino que estaba pensando que una Dropbox como Deamon podría seguir ejecutándose en el fondo del cliente. Esto seguirá comprobando si se ha modificado algún archivo descargado, de ser así, lo cargará al servidor. Y no puedo pedirle al usuario que escriba los campos de formulario y los combine con el PDF porque es tedioso, ya que hay más de 100 formularios. Estos formularios no son FDF, sino más bien formas XFA. Puedo hacer que el deamon se comunique con el servidor, así sabría si el deamon no se estaba ejecutando cuando el cliente inicia sesión. – sethu

Cuestiones relacionadas