Printer Interceptor
BlueCloud Technologies proporciona servicios y soluciones de TI a organizaciones empresariales en EMEA. Están especializados en arquitectura empresarial, integración de aplicaciones y gestión de accesos. Sus productos, como MailID, ScreenID y OneGate, ayudan a las empresas a agilizar las operaciones, mejorar la eficacia y aumentar la seguridad.
Todos los clientesDesarrollo de aplicaciones de escritorio
Utilizamos nuestro profundo conocimiento de las tecnologías .NET y las plataformas Windows para ofrecer una biblioteca de alta calidad, eficiente y fiable para la aplicación de escritorio de nuestro cliente. Nuestra solución es totalmente compatible con una amplia gama de versiones de Windows (8, 10, 11) y arquitecturas (32 bits, 64 bits), y puede manejar flujos de trabajo complejos.
Más informaciónSoftware para empresas
Ampliamos la funcionalidad de ScreenID, una de las aplicaciones empresariales emblemáticas de BlueCloud. Desarrollamos una biblioteca de vínculos dinámicos que puede integrarse con diversas aplicaciones .NET. Intercepta y supervisa los trabajos de impresión, permitiendo funciones como la inserción de marcas de agua, la prevención de trabajos de impresión y el seguimiento del estado de la impresora en tiempo real.
Más informaciónDesafío
BlueCloud Technologies buscó la experiencia de Redwerk para mejorar ScreenID, su software de marca de agua para pantallas. Diseñado para proteger los monitores de los empleados de capturas no autorizadas, ScreenID muestra marcas de agua en todas las aplicaciones y documentos de Windows. Aunque BlueCloud Technologies había desarrollado ScreenID internamente, buscaba un socio con más experiencia en el desarrollo de aplicaciones C++ y .NET.
Este proyecto requería una sólida comprensión de .NET y del desarrollo nativo en C++ debido a varios retos clave:
- Complejidad de los archivos XPS: Los archivos XPS (XML Paper Specification) son complejos y requieren bibliotecas y API especializadas. Su estructura, que contiene diversos recursos como imágenes, fuentes y páginas, supone un obstáculo para su manipulación directa.
- Detección y aplicación de marcas de agua: Determinar si un documento ya tiene una marca de agua y dónde colocar una nueva requiere un profundo conocimiento de cómo se almacenan los recursos en los archivos XPS.
- Procesamiento y colocación de marcas de agua: La aplicación precisa de marcas de agua de imagen y texto requiere cálculos complejos de escala y posicionamiento basados en el tamaño y la resolución del documento.
- Gestión de archivos: La transformación de los archivos de cola de impresión en formato XPS para la marca de agua y su posterior conversión planteó retos en el manejo de archivos de gran tamaño, estructuras tipo ZIP y la prevención de la corrupción de datos.
- Rendimiento con archivos de gran tamaño: Los documentos grandes, de varias páginas y con muchas imágenes amenazaban con crear cuellos de botella en el rendimiento durante el procesamiento, la extracción y el reempaquetado.
- Depuración y gestión de errores: Garantizar la ejecución perfecta del procesamiento de archivos complejos, la marca de agua y la conversión XPS con formatos de archivo potencialmente malformados o inesperados era una preocupación importante. Tuvimos que asegurarnos de que el interceptor gestionaba los errores con elegancia y proporcionaba información a la aplicación que los ejecutaba.
- Compatibilidad cruzada entre formatos XPS: Los formatos OpenXPS y MS XPS presentan sutiles diferencias en sus esquemas. Necesitábamos garantizar la compatibilidad entre estos formatos durante las conversiones.
- Concurrencia y multihilo: El principal problema es la gestión segura de múltiples hilos, ya que el código monitoriza múltiples impresoras y trabajos, generando hilos para cada tarea. Esto requiere sincronización para evitar condiciones de carrera en las que varios subprocesos intenten modificar recursos compartidos como la lista de impresoras o los objetos de eventos.
- Notificaciones de impresoras y trabajos: Monitorizar las notificaciones de trabajos de impresión en tiempo real es difícil debido a la naturaleza asíncrona del envío de trabajos, la finalización de trabajos y los cambios de impresora. El programa debe detectar estos eventos eficientemente sin perder ninguna notificación.
Tuvimos que garantizar la compatibilidad con una amplia gama de versiones de Windows (8, 10, 11) y arquitecturas (32 bits, 64 bits), lo que puede suponer un reto debido a las diferencias en la disponibilidad y el comportamiento de las API. También teníamos que garantizar la compatibilidad con aplicaciones .NET y la capacidad de integrar Printer Interceptor como una biblioteca de vínculos dinámicos (DLL) o un paquete. Por último, la biblioteca que necesitábamos desarrollar tenía que interceptar los trabajos de impresión iniciados por cualquier aplicación, independientemente del software específico o del dispositivo de impresión utilizado.
Solución
Desarrollamos Printer Interceptor, una biblioteca de vínculos dinámicos (DLL) que intercepta y modifica los trabajos de impresión en dispositivos Windows. Las DLL pueden utilizarse para compartir código entre varias aplicaciones, lo que ahorra tiempo y esfuerzo. Además, las DLL pueden ayudar a reducir el tamaño de las aplicaciones, facilitando su descarga e instalación. Por último, las DLL pueden actualizarse independientemente de las aplicaciones que las utilizan, lo que facilita su puesta al día.
Arquitectura
La arquitectura de Printer Interceptor consta de dos módulos. El primer módulo se encarga de las tareas relacionadas con la impresora, como la recuperación de información sobre la impresora y la supervisión de los trabajos de impresión. Este módulo incluye mecanismos de devolución de llamada para varios eventos como notificaciones de impresora, notificaciones de trabajos, intercepciones de trabajos y excepciones. El segundo módulo se encarga de diversas operaciones relacionadas con las impresoras, como la supervisión de los trabajos de impresión y la aplicación de marcas de agua. También proporciona integración nativa en proyectos .NET.
La comunicación entre los módulos se basa en eventos, utilizando delegados. Cuando el primer módulo intercepta un trabajo de impresión, activa los delegados gestionados por el segundo módulo. Además, la aplicación cliente puede manejar los delegados proporcionados por el segundo módulo para recibir notificaciones, registros y excepciones. La comunicación basada en eventos garantiza un diseño flexible y desacoplado, lo que facilita la adición o modificación de funciones sin afectar a la funcionalidad principal.
Características principales
He aquí un breve resumen de la funcionalidad de Printer Interceptor:
- Control de impresión: La solución ofrece la posibilidad de detener, desactivar y modificar la impresión para determinados usuarios o trabajos. La librería permite interceptar tanto dispositivos físicos (impresora) como trabajos virtuales (Print to PDF, Print to XPS).
- Personalización de marcas de agua: Implementamos un sistema flexible de personalización de marcas de agua que permite varios formatos de texto, tipos de imagen (incluyendo logotipos y códigos QR) y opciones de posicionamiento.
- Estados: La biblioteca realiza un seguimiento de los estados de las impresoras y los trabajos. En el caso de las impresoras, los estados indican si la impresora está siendo interceptada y se aplica el procesamiento de marcas de agua. También indica si la impresora ya no está siendo interceptada, normalmente debido a una excepción, entre otras cosas. Para los trabajos, los estados incluyen la cola de impresión inicial, el procesamiento y la finalización con o sin marcas de agua.
Implementación técnica y resolución de problemas
Para superar los retos técnicos, nuestros desarrolladores aplicaron una serie de soluciones de eficacia probada:
- Complejidad de los archivos XPS: Para hacer frente a las complejidades de estos archivos, implementamos una clara separación entre los archivos de origen, procesados y renderizados. Nos basamos en bibliotecas como Microsoft XPS para manipular elementos XPS y aplicar transformaciones.
- Detección y aplicación de marcas de agua: Utilizamos un método que escanea eficazmente los documentos XPS en busca de marcas de agua existentes leyendo el contenido de la página, extrayendo imágenes y fuentes, y comparando sus URI con un valor de sal predefinido. Esto garantiza que no se apliquen nuevas marcas de agua a páginas que ya las tienen, evitando así la duplicación.
- Procesamiento y posicionamiento de marcas de agua: El código utiliza las dimensiones de la página y los cálculos de PPP (puntos por pulgada) para escalar las marcas de agua al tamaño correcto. También ajusta la posición basándose en enumeraciones predefinidas para la colocación de la marca de agua (arriba a la izquierda, en el centro y abajo a la derecha). La creación de IXpsOMImageBrush y IXpsOMPath garantiza que la marca de agua se dibuje correctamente en la página.
- Gestión de archivos: Nuestra solución extrae cuidadosamente el contenido XPS del archivo spool, tratándolo como un archivo comprimido. A continuación, realizamos los cambios necesarios en el contenido XPS para garantizar la compatibilidad y permitir la marca de agua. En el caso de los archivos spool divididos en varias partes, los combinamos en un único archivo completo antes de procesarlos.
- Rendimiento con archivos de gran tamaño: Mitigamos los problemas de rendimiento mediante una cuidadosa gestión de la memoria. Por ejemplo, el código transmite los archivos de imagen directamente desde el disco en lugar de cargarlos todos a la vez en la memoria. También utiliza archivos temporales en distintas fases de procesamiento en lugar de intentar hacerlo todo en memoria.
- Depuración y gestión de errores: Hemos creado un sistema que permite a los desarrolladores examinar los archivos en distintas fases de procesamiento y detectar posibles problemas desde el principio. Esto ayuda a identificar y resolver los problemas con rapidez. Todos los errores y excepciones se registran cuidadosamente, lo que proporciona información valiosa para solucionar problemas y mejorar la estabilidad del sistema.
- Compatibilidad cruzada entre formatos XPS: Utilizamos un método que sustituye sistemáticamente los espacios de nombres de OpenXPS por sus homólogos de Microsoft XPS. Esto garantiza que los archivos XPS creados a partir del estándar OpenXPS puedan ser procesados por las API XPS de Microsoft utilizadas en este proyecto. El uso de sustituciones de cadenas para estos esquemas URI es una solución sencilla pero eficaz para garantizar la compatibilidad.
- Concurrencia y multihilo: Para evitar condiciones de carrera y garantizar la integridad de los datos, utilizamos una combinación de eventos y estructuras de datos específicas de los subprocesos. Los eventos señalarán entre hilos, desencadenando acciones como detener la monitorización o reanudar tareas en pausa. La información específica de cada subproceso, como los detalles de la impresora o del trabajo, se almacena en una estructura específica, lo que facilita la comunicación y la coordinación.
- Notificaciones de impresoras y trabajos: Nos hemos centrado en la eficiencia y la seguridad de la memoria. El programa realiza un seguimiento de los cambios de estado de los trabajos de impresión mediante las API de Windows. Gestiona eficazmente las notificaciones, incluidas las que podrían descartarse. El código garantiza una gestión adecuada de la memoria asignando y liberando recursos cuidadosamente.
Pruebas y control de calidad
Fue necesario realizar pruebas exhaustivas para asegurarnos de que entregábamos una solución totalmente funcional y estable. Probamos la biblioteca con muchas combinaciones diferentes de dispositivos, sistemas operativos, impresoras y tipos de archivo. Verificamos la compatibilidad con varios formatos de archivo, como PDF, DOCX, TXT, JPG, XLSX, PNG y HTML, así como con aplicaciones de software populares como Adobe Acrobat, Microsoft Word, Excel, Bloc de notas, Microsoft Photos y diferentes navegadores web. También experimentamos con distintas opciones de personalización de las marcas de agua, como el uso de texto, imágenes o códigos QR, y el ajuste de su tamaño y ubicación.
Desarrollamos una aplicación de consola de pruebas específica para ayudarnos a probar y depurar a fondo la funcionalidad de Printer Interceptor. Garantizamos la compatibilidad con diversas aplicaciones, parámetros de marca de agua, configuraciones de Windows y modelos de impresora.
Documentación y soporte
Preparamos una documentación detallada para explicar claramente las características principales, la funcionalidad y el uso del interceptor. Se creó una guía completa para ayudar a los desarrolladores a crear el interceptor a partir del código fuente, garantizando la flexibilidad y la personalización.
Una ventaja clave de nuestro enfoque fue la eliminación de la dependencia del proveedor. Al redactar una documentación exhaustiva, permitimos a nuestro cliente mantener un control total sobre su solución. Esta flexibilidad les permitió seguir desarrollando y personalizando el interceptor internamente. Al mismo tiempo, el compromiso de Redwerk no termina con la entrega. Ofrecemos asistencia y mantenimiento continuos para que las soluciones de nuestros clientes sigan funcionando.
Resultado
Al asociarse con Redwerk, BlueCloud Technologies mejoró significativamente ScreenID, lo que se tradujo en una mayor satisfacción y retención de los clientes. Con Printer Interceptor perfectamente integrado, ScreenID puede ahora interceptar trabajos de impresión, aplicar marcas de agua personalizables (texto o imagen) y controlar con precisión la colocación y el formato de las marcas de agua.
Diseñado para minimizar la sobrecarga de rendimiento, Printer Interceptor garantiza que los trabajos de impresión no sufran retrasos notables.
La colaboración de Redwerk ha dado como resultado una potente solución de marcas de agua en pantalla que refuerza la ventaja competitiva de BlueCloud Technologies y aporta un valor significativo a clientes de alto perfil como Vodafone, el Banco Nacional de Egipto, Commercial International Bank y Credit Agricole Group.
¿Quiere ampliar las funciones de su producto?
Hablemos deTecnologías
Comentario del equipo Redwerk
Dmytro
Desarrollador y jefe de equipo
Este proyecto supuso una fantástica oportunidad para perfeccionar mis habilidades en la programación a nivel de sistema, especialmente en la supervisión y gestión en tiempo real de recursos de hardware externos como impresoras, flujos de trabajo de documentos XPS y procesos de conversión de archivos. Nuestro equipo desarrolló una sólida biblioteca para la interceptación y supervisión de trabajos de impresión. Inserta eficazmente marcas de agua, evita trabajos no deseados y supervisa el estado de la impresora en tiempo real.
La característica más destacada de la biblioteca es su capacidad para supervisar simultáneamente varias impresoras al tiempo que gestiona la interceptación y la interacción de los trabajos. Su capacidad para modificar documentos antes de imprimirlos, como añadir marcas de agua, me parece un verdadero valor añadido.
Relacionado en Blog
10 principales tendencias en transformación digital 2024
El año pasado fue un éxito para la transformación digital, ya que las empresas finalmente adoptaron la IA, los chatbots y la automatización robótica de procesos para impulsar la eficiencia a niveles sin precedentes. Este año va aún más lejos al ofrecer tendencias en transformac...
Leer másChecklist para Revisión de Código de Redwerk
¿Alguna vez se ha preguntado si su proveedor de TI ha hecho un buen trabajo y ha creado una aplicación de alta calidad? Es fácil comprobarlo con una revisión independiente del código. Las revisiones del código realizadas por expertos externos aportan una perspectiva nueva e impar...
Leer más¿Impresionado?
ContrátenosOtros casos prácticos
Current
Desarrollo de un SaaS de administración electrónica 100% conforme con la ADA, utilizado por las divisiones de asistencia social de todo EE.UU.
MarketBee
Software de evaluación de mercado creado desde cero para productores de áridos de 12 países.
Recruit Media
La plataforma de reclutamiento única que luego fue adquirida por HireQuest.