Printer Interceptor
BlueCloud Technologies fournit des services et des solutions informatiques aux entreprises de la région EMEA. L'entreprise est spécialisée dans l'architecture d'entreprise, l'intégration d'applications et la gestion des accès. Ses produits, notamment MailID, ScreenID et OneGate, aident les entreprises à rationaliser leurs opérations, à améliorer leur efficacité et à renforcer leur sécurité.
Tous les clientsDéveloppement d'applications de bureau
Nous avons utilisé notre profonde connaissance des technologies .NET et des plateformes Windows pour fournir une bibliothèque de haute qualité, efficace et fiable pour l'application de bureau de notre client. Notre solution est entièrement compatible avec une large gamme de versions de Windows (8, 10, 11) et d'architectures (32 bits, 64 bits), et elle peut gérer des flux de travail complexes.
En savoir plusLogiciels d'entreprise
Nous avons étendu les fonctionnalités de ScreenID, l'une des applications d'entreprise phares de BlueCloud. Nous avons développé une bibliothèque de liens dynamiques qui peut être intégrée à diverses applications .NET. Elle intercepte et surveille les travaux d'impression, permettant des fonctionnalités telles que l'insertion de filigranes, la prévention des travaux d'impression et le suivi en temps réel de l'état de l'imprimante.
En savoir plusDéfi
BlueCloud Technologies a fait appel à l’expertise de Redwerk pour améliorer ScreenID, leur logiciel de filigrane d’écran. Conçu pour protéger les écrans des employés contre la capture non autorisée, ScreenID affiche des filigranes sur toutes les applications et tous les documents Windows. Bien que BlueCloud Technologies ait développé ScreenID en interne, ils recherchaient un partenaire ayant une expertise approfondie en développement d’applications C++ et .NET.
Ce projet a nécessité une solide compréhension du développement .NET et C++ natif en raison de plusieurs défis clés :
- Complexité des fichiers XPS : Les fichiers XPS (XML Paper Specification) sont complexes et nécessitent des bibliothèques et des API spécialisées. Leur structure, contenant diverses ressources telles que des images, des polices et des pages, représentait un obstacle à la manipulation directe.
- Détection et application des filigranes : Déterminer si un document possède déjà un filigrane et où placer un nouveau filigrane nécessite une compréhension approfondie de la manière dont les ressources sont stockées dans les fichiers XPS.
- Traitement et positionnement des filigranes : L’application précise de filigranes d’image et de texte a exigé des calculs complexes pour la mise à l’échelle et le positionnement en fonction de la taille et de la résolution du document.
- Gestion des fichiers : La transformation des fichiers spool d’impression en format XPS pour le filigrane, puis leur conversion inverse, a posé des défis en matière de gestion des fichiers volumineux, de structures similaires à ZIP et de prévention de la corruption des données.
- Performances avec les fichiers volumineux : Les documents volumineux, comportant plusieurs pages et de nombreuses images, menaçaient de créer des goulets d’étranglement de performance lors du traitement, de l’extraction et du reconditionnement.
- Débogage et gestion des erreurs : Assurer une exécution sans faille du traitement complexe des fichiers, du filigrane et de la conversion XPS avec des formats de fichiers potentiellement malformés ou inattendus était une préoccupation majeure. Nous avons dû nous assurer que l’intercepteur gérait gracieusement les erreurs et fournissait un retour d’information pertinent à l’application appelante.
- Compatibilité inter-formats XPS : Les formats OpenXPS et MS XPS présentent des différences subtiles dans leurs schémas. Nous devions garantir la compatibilité entre ces formats lors des conversions.
- Concurrence et multithreading : Le problème principal est la gestion sécurisée de plusieurs threads, car le code surveille plusieurs imprimantes et tâches, créant des threads pour chaque tâche. Cela nécessite une synchronisation pour éviter les conditions de concurrence où plusieurs threads pourraient tenter de modifier des ressources partagées telles que la liste des imprimantes ou les objets d’événement.
- Notifications d’imprimante et de tâche : La surveillance en temps réel des notifications de tâches d’impression est difficile en raison de la nature asynchrone de la soumission, de l’achèvement des tâches et des changements d’imprimante. Le programme doit détecter ces événements efficacement sans manquer aucune notification.
Nous avons dû assurer la compatibilité avec un large éventail de versions de Windows (8, 10, 11) et d’architectures (32 bits, 64 bits), ce qui peut être difficile en raison des différences dans la disponibilité et le comportement des API. Nous avons également dû assurer la compatibilité avec les applications .NET et la possibilité d’intégrer Printer Interceptor sous forme de bibliothèque de liens dynamiques (DLL) ou de package. Enfin, la bibliothèque que nous devions développer devait intercepter les travaux d’impression initiés par n’importe quelle application, quel que soit le logiciel spécifique ou le périphérique d’impression utilisé.
Solution
Nous avons développé Printer Interceptor, une bibliothèque de liens dynamiques (DLL) qui intercepte et modifie les travaux d’impression sur les appareils Windows. Les DLL peuvent être utilisées pour partager du code entre plusieurs applications, ce qui permet d’économiser du temps et des efforts. De plus, les DLL peuvent contribuer à réduire la taille des applications, ce qui facilite leur téléchargement et leur installation. Enfin, les DLL peuvent être mises à jour indépendamment des applications qui les utilisent, ce qui permet de les maintenir facilement à jour.
Architecture
L’architecture de Printer Interceptor se compose de deux modules. Le premier module gère les tâches liées à l’imprimante, telles que la récupération des informations sur l’imprimante et la surveillance des travaux d’impression. Ce module comprend des mécanismes de rappel pour divers événements tels que les notifications d’imprimante, les notifications de travaux, les interceptions de travaux et les exceptions. Le second module est responsable de diverses opérations liées aux imprimantes, telles que la surveillance des travaux d’impression et l’application de filigranes. Il offre également une intégration native dans les projets .NET.
La communication entre les modules est basée sur des événements, à l’aide de délégués. Lorsque le premier module intercepte un travail d’impression, il déclenche des délégués gérés par le second module. De plus, l’application cliente peut gérer les délégués fournis par le second module pour recevoir des notifications, des journaux et des exceptions. La communication basée sur les événements garantit une conception découplée et flexible, ce qui facilite l’ajout ou la modification de fonctionnalités sans affecter la fonctionnalité principale.
Fonctionnalités principales
Voici un bref aperçu des fonctionnalités de Printer Interceptor :
- Contrôle de l’impression : La solution offre la possibilité d’arrêter, de désactiver et de modifier l’impression pour certains utilisateurs ou certains travaux. La bibliothèque permet d’intercepter à la fois les périphériques physiques (imprimante) et les travaux virtuels (Impression vers PDF, Impression vers XPS).
- Personnalisation des filigranes : Nous avons mis en œuvre un système de personnalisation flexible des filigranes qui permet divers formats de texte, types d’images (y compris les logos et les codes QR) et options de positionnement.
- Statuts : La bibliothèque suit les statuts des imprimantes et des travaux. Pour les imprimantes, les statuts indiquent si l’imprimante est interceptée et si le traitement du filigrane est appliqué. Elle indique également si l’imprimante n’est plus interceptée, généralement en raison d’une exception, entre autres choses. Pour les travaux, les statuts incluent la mise en file d’attente initiale, le traitement et l’achèvement avec ou sans filigranes.
Implémentation technique et résolution de problèmes
Pour surmonter les défis techniques, nos développeurs ont mis en œuvre une série de solutions éprouvées :
- Complexité des fichiers XPS : Pour gérer les subtilités de ces fichiers, nous avons mis en place une séparation claire entre les fichiers source, traités et rendus. Nous nous sommes appuyés sur des bibliothèques telles que Microsoft XPS pour manipuler les éléments XPS et appliquer des transformations.
- Détection et application des filigranes : Nous avons utilisé une méthode qui analyse efficacement les documents XPS pour détecter les filigranes existants en lisant le contenu des pages, en extrayant les images et les polices, et en comparant leurs URI à une valeur de sel prédéfinie. Cela garantit que de nouveaux filigranes ne sont pas appliqués aux pages qui en ont déjà, évitant ainsi les duplications.
- Traitement et positionnement des filigranes : Le code utilise les dimensions de la page et les calculs de DPI (points par pouce) pour redimensionner les filigranes à la taille correcte. Il ajuste également la position en fonction d’énumérations prédéfinies pour le placement du filigrane (en haut à gauche, au centre et en bas à droite). La création d’IXpsOMImageBrush et d’IXpsOMPath garantit que le filigrane est correctement dessiné sur la page.
- Gestion des fichiers : Notre solution extrait soigneusement le contenu XPS du fichier de mise en file d’attente, le traitant comme une archive compressée. Nous apportons ensuite les modifications nécessaires au contenu XPS pour garantir la compatibilité et permettre le filigranage. Pour les fichiers de mise en file d’attente divisés en plusieurs parties, nous les combinons en un seul fichier complet avant le traitement.
- Performances avec les gros fichiers : Nous avons atténué les problèmes de performance grâce à une gestion minutieuse de la mémoire. Par exemple, le code lit les fichiers image directement depuis le disque au lieu de tout charger en mémoire en une seule fois. Il utilise également des fichiers temporaires à différentes étapes de traitement plutôt que d’essayer de tout faire en mémoire.
- Débogage et gestion des erreurs : Nous avons créé un système qui permet aux développeurs d’examiner les fichiers à différentes étapes de traitement et de détecter les problèmes potentiels à un stade précoce. Cela permet d’identifier et de résoudre rapidement les problèmes. Toutes les erreurs et exceptions sont soigneusement enregistrées, fournissant des informations précieuses pour le dépannage et l’amélioration de la stabilité du système.
- Compatibilité inter-formats XPS : Nous avons utilisé une méthode qui remplace systématiquement les espaces de noms OpenXPS par leurs homologues Microsoft XPS. Cela garantit que les fichiers XPS créés à partir du standard OpenXPS peuvent être traités par les API Microsoft XPS utilisées dans ce projet. L’utilisation de substitutions de chaînes pour ces schémas URI est une solution simple mais efficace pour garantir la compatibilité.
- Concurrence et multithreading : Pour éviter les conditions de concurrence et garantir l’intégrité des données, nous utilisons une combinaison d’événements et de structures de données spécifiques aux threads. Les événements signalent entre les threads, déclenchant des actions telles que l’arrêt de la surveillance ou la reprise de tâches mises en pause. Les informations spécifiques au thread, telles que les détails de l’imprimante ou du travail, sont stockées dans une structure dédiée, facilitant la communication et la coordination.
- Notifications d’imprimante et de travail : Nous nous sommes concentrés sur l’efficacité et la sécurité de la mémoire. Le programme suit les changements de statut des travaux d’impression à l’aide des API Windows. Il gère efficacement les notifications, y compris celles qui pourraient être rejetées. Le code assure une gestion appropriée de la mémoire en allouant et en libérant soigneusement les ressources.
Tests et assurance qualité
Des tests complets ont été nécessaires pour nous assurer que nous avons livré une solution entièrement fonctionnelle et stable. Nous avons testé la bibliothèque avec de nombreuses combinaisons différentes d’appareils, de systèmes d’exploitation, d’imprimantes et de types de fichiers. Nous avons vérifié la compatibilité avec divers formats de fichiers, notamment PDF, DOCX, TXT, JPG, XLSX, PNG et HTML, ainsi qu’avec des applications logicielles populaires telles qu’Adobe Acrobat, Microsoft Word, Excel, Notepad, Microsoft Photos et différents navigateurs web. Nous avons également expérimenté différentes options de personnalisation des filigranes, comme l’utilisation de texte, d’images ou de codes QR comme filigranes, et l’ajustement de la taille et du placement de ces filigranes.
Nous avons développé une application console de test dédiée pour nous aider à tester et déboguer en profondeur les fonctionnalités de Printer Interceptor. Nous avons assuré la compatibilité avec diverses applications, paramètres de filigranage, configurations Windows et modèles d’imprimantes.
Documentation et assistance
Nous avons préparé une documentation détaillée pour expliquer clairement les fonctionnalités principales, le fonctionnement et l’utilisation de l’intercepteur. Un guide complet a été créé pour aider les développeurs à construire l’intercepteur à partir du code source, garantissant ainsi la flexibilité et la personnalisation.
Un avantage clé de notre approche a été l’élimination de la dépendance vis-à-vis d’un fournisseur unique. En rédigeant une documentation complète, nous avons permis à notre client de garder le contrôle total de sa solution. Cette flexibilité a garanti qu’il pouvait continuer à développer et à personnaliser l’intercepteur en interne. Dans le même temps, l’engagement de Redwerk ne s’arrête pas à la livraison. Nous offrons une assistance et une maintenance continues pour que les solutions de nos clients restent opérationnelles.
Résultat
En collaborant avec Redwerk, BlueCloud Technologies a considérablement amélioré ScreenID, ce qui a entraîné une plus grande satisfaction et fidélisation de la clientèle. Avec Printer Interceptor intégré de manière transparente, ScreenID peut désormais intercepter les travaux d’impression, appliquer des filigranes personnalisables (texte ou image) et contrôler précisément le placement et le formatage des filigranes.
Conçu pour minimiser la surcharge de performance, Printer Interceptor garantit que les travaux d’impression ne sont pas sensiblement retardés.
La collaboration de Redwerk a abouti à une solution puissante de filigrane d’écran, renforçant l’avantage concurrentiel de BlueCloud Technologies et apportant une valeur significative à des clients de premier plan tels que Vodafone, la Banque Nationale d’Égypte, la Commercial International Bank et le groupe Crédit Agricole.
Vous souhaitez étendre les fonctionnalités de votre produit ?
Parlons-enTechnologies
Commentaire de l'équipe Redwerk
Dmytro
Développeur et chef d'équipe
Ce projet a été une formidable occasion d'affiner mes compétences en programmation système, en particulier dans la surveillance en temps réel et la gestion des ressources matérielles externes telles que les imprimantes, les flux de documents XPS et les processus de conversion de fichiers. Notre équipe a développé une bibliothèque robuste pour l'interception et la surveillance des travaux d'impression. Elle insère efficacement des filigranes, empêche les travaux indésirables et surveille l'état de l'imprimante en temps réel.
La caractéristique remarquable de la bibliothèque est sa capacité à surveiller simultanément plusieurs imprimantes tout en gérant l'interception et l'interaction des travaux. Je trouve sa capacité à modifier les documents avant l'impression, comme l'ajout de filigranes, une véritable valeur ajoutée.


Articles similaires dans le blog
TOP 10 des tendances de transformation numérique pour 2024
L'année précédente fut faste pour la transformation numérique, les entreprises ayant enfin adopté l'IA, les chatbots et l'automatisation des processus robotisés pour porter leur efficacité à des niveaux sans précédent. Cette année va encore plus loin en proposant des tendances e...
En savoir plus
Liste de contrôle pour la revue de code par Redwerk – toutes les étapes incluses
Vous êtes-vous déjà demandé si votre prestataire informatique avait fait du bon travail et créé une application de haute qualité ? Il est facile de le vérifier grâce à une revue de code indépendante. Les revues de code réalisées par des experts externes apportent une perspective ...
En savoir plusImpressionné ?
Engagez-nousAutres études de cas
Current
Développement de cette application SaaS 100 % conforme aux normes ADA, utilisée par les services sociaux à travers les États-Unis
MarketBee
Logiciel d'évaluation du marché développé à partir de zéro pour les producteurs d'agrégats dans 12 pays
Recruit Media
Développement d'une solution SaaS de recrutement en instance de brevet, développée de A à Z, qui a ensuite été acquise par HireQuest
