Printer Interceptor

Bibliothek mit Wasserzeichen für Druckaufträge

entwickelt und getestet von Redwerk
×
Wohin sollen wir unsere BlueCloud-Fallstudie schicken?
Bitte geben Sie Ihre Geschäfts-E-Mail ein ist keine Geschäfts-E-Mail

BlueCloud Technologies bietet IT-Dienstleistungen und -Lösungen für Unternehmen in EMEA an. Das Unternehmen ist spezialisiert auf Unternehmensarchitektur, Anwendungsintegration und Zugriffsmanagement. Ihre Produkte, darunter MailID, ScreenID und OneGate, helfen Unternehmen, ihre Abläufe zu optimieren, die Effizienz zu steigern und die Sicherheit zu erhöhen.

Alle Kunden

Desktop-App-Entwicklung

Wir nutzten unser profundes Wissen über .NET-Technologien und Windows-Plattformen, um eine hochwertige, effiziente und zuverlässige Bibliothek für die Desktop-App unseres Kunden zu entwickeln. Unsere Lösung ist vollständig kompatibel mit einer Vielzahl von Windows-Versionen (8, 10, 11) und -Architekturen (32-Bit, 64-Bit) und kann komplexe Workflows verarbeiten.

Mehr erfahren

Software für Unternehmen

Wir haben die Funktionalität von ScreenID, einer der charakteristischen Unternehmensanwendungen von BlueCloud, erweitert. Wir haben eine Dynamic Link Library entwickelt, die in verschiedene .NET-Anwendungen integriert werden kann. Sie fängt Druckaufträge ab und überwacht sie und ermöglicht Funktionen wie das Einfügen von Wasserzeichen, die Verhinderung von Druckaufträgen und die Verfolgung des Druckerstatus in Echtzeit.

Mehr erfahren

Herausforderung

BlueCloud Technologies suchte das Know-how von Redwerk, um ScreenID, ihre Software zum Anbringen von Wasserzeichen auf dem Bildschirm, zu verbessern. ScreenID wurde entwickelt, um die Bildschirme der Mitarbeiter vor unbefugtem Zugriff zu schützen, und zeigt Wasserzeichen auf allen Windows-Anwendungen und Dokumenten an. BlueCloud Technologies hatte ScreenID zwar intern entwickelt, war aber auf der Suche nach einem Partner mit fundierten Kenntnissen in der Entwicklung von C++- und .NET-Anwendungen.

Dieses Projekt erforderte ein solides Verständnis von .NET und nativer C++-Entwicklung aufgrund mehrerer wichtiger Herausforderungen:

  • Komplexität von XPS-Dateien: XPS-Dateien (XML Paper Specification) sind kompliziert und erfordern spezielle Bibliotheken und APIs. Ihre Struktur, die verschiedene Ressourcen wie Bilder, Schriftarten und Seiten enthält, stellt eine Hürde für die direkte Manipulation dar.
  • Erkennung und Anwendung von Wasserzeichen: Um festzustellen, ob ein Dokument bereits ein Wasserzeichen enthält und wo ein neues platziert werden soll, muss man genau wissen, wie die Ressourcen in XPS-Dateien gespeichert sind.
  • Verarbeitung und Positionierung von Wasserzeichen: Das präzise Anbringen von Bild- und Textwasserzeichen erfordert komplizierte Berechnungen zur Skalierung und Positionierung auf der Grundlage von Dokumentgröße und -auflösung.
  • Dateiverarbeitung: Die Umwandlung von Druckspooldateien in das XPS-Format zum Anbringen von Wasserzeichen und die anschließende Rückkonvertierung stellten Herausforderungen bei der Handhabung großer Dateien, ZIP-ähnlicher Strukturen und der Vermeidung von Datenbeschädigungen dar.
  • Leistung bei großen Dateien: Große, mehrseitige, bildlastige Dokumente drohten bei der Verarbeitung, Extraktion und Neukonvertierung zu Leistungsengpässen zu führen.
  • Fehlersuche und Fehlerbehandlung: Die fehlerfreie Ausführung komplexer Dateiverarbeitung, Wasserzeichen und XPS-Konvertierung bei potenziell fehlerhaften oder unerwarteten Dateiformaten war ein wichtiges Anliegen. Wir mussten sicherstellen, dass der Interceptor Fehler korrekt behandelt und der aufrufenden Anwendung ein informatives Feedback gibt.
  • Cross-Kompatibilität zwischen XPS-Formaten: Die Formate OpenXPS und MS XPS weisen feine Unterschiede in ihren Schemata auf. Wir mussten die Kompatibilität zwischen diesen Formaten während der Konvertierung sicherstellen.
  • Gleichzeitigkeit und Multithreading: Das Hauptproblem ist die sichere Verwaltung mehrerer Threads, da der Code mehrere Drucker und Aufträge überwacht und für jede Aufgabe einen eigenen Thread erzeugt. Dies erfordert eine Synchronisierung, um Race Conditions zu verhindern, bei denen mehrere Threads versuchen könnten, gemeinsam genutzte Ressourcen wie die Druckerliste oder Ereignisobjekte zu ändern.
  • Drucker- und Auftragsbenachrichtigungen: Die Überwachung von Benachrichtigungen über Druckaufträge in Echtzeit ist aufgrund der asynchronen Natur der Auftragsübermittlung, des Auftragsabschlusses und der Druckeränderungen schwierig. Das Programm muss diese Ereignisse effizient erkennen, ohne Benachrichtigungen zu verpassen.

Wir mussten die Kompatibilität mit einer Vielzahl von Windows-Versionen (8, 10, 11) und -Architekturen (32-Bit, 64-Bit) sicherstellen, was aufgrund von Unterschieden bei der Verfügbarkeit und dem Verhalten von APIs eine Herausforderung darstellen kann. Außerdem mussten wir die Kompatibilität mit .NET-Anwendungen und die Möglichkeit sicherstellen, Printer Interceptor als Dynamic Link Library (DLL) oder Paket zu integrieren. Schließlich musste die von uns zu entwickelnde Bibliothek Druckaufträge abfangen, die von einer beliebigen Anwendung ausgelöst wurden, unabhängig von der spezifischen Software oder dem verwendeten Druckgerät.

Lösung

Wir entwickelten Printer Interceptor, eine Dynamic Link Library (DLL), die Druckaufträge auf Windows-Geräten abfängt und modifiziert. DLLs können verwendet werden, um Code zwischen mehreren Anwendungen auszutauschen, was Zeit und Mühe spart. Außerdem können DLLs dazu beitragen, die Größe von Anwendungen zu reduzieren, so dass sie leichter heruntergeladen und installiert werden können. Schließlich können DLLs unabhängig von den Anwendungen, die sie verwenden, aktualisiert werden, was es einfacher macht, sie auf dem neuesten Stand zu halten.

Architektur

Die Architektur von Printer Interceptor besteht aus zwei Modulen. Das erste Modul übernimmt druckerbezogene Aufgaben, wie das Abrufen von Druckerinformationen und die Überwachung von Druckaufträgen. Dieses Modul enthält Callback-Mechanismen für verschiedene Ereignisse wie Druckerbenachrichtigungen, Auftragsbenachrichtigungen, Auftragsabbrüche und Ausnahmen. Das zweite Modul ist für verschiedene Vorgänge im Zusammenhang mit Druckern zuständig, z. B. für die Überwachung von Druckaufträgen und das Aufbringen von Wasserzeichen. Es bietet auch eine native Integration in .NET-Projekte.

Die Kommunikation zwischen den Modulen ist ereignisbasiert und verwendet Delegaten. Wenn das erste Modul einen Druckauftrag abfängt, löst es Delegaten aus, die vom zweiten Modul verarbeitet werden. Darüber hinaus kann die Client-Anwendung Delegaten verarbeiten, die vom zweiten Modul bereitgestellt werden, um Benachrichtigungen, Protokolle und Ausnahmen zu erhalten. Die ereignisbasierte Kommunikation gewährleistet ein entkoppeltes und flexibles Design, das das Hinzufügen oder Ändern von Funktionen erleichtert, ohne die Kernfunktionalität zu beeinträchtigen.

Kernfunktionen

Hier ist ein kurzer Überblick über die Funktionalität von Printer Interceptor:

  • Druckkontrolle: Die Lösung bietet die Möglichkeit, das Drucken für bestimmte Benutzer oder Aufträge zu stoppen, zu deaktivieren und zu ändern. Die Bibliothek ermöglicht das Abfangen sowohl physischer Geräte (Drucker) als auch virtueller Aufträge (Print to PDF, Print to XPS).
  • Wasserzeichen-Anpassung: Wir haben ein flexibles System zur Anpassung von Wasserzeichen implementiert, das verschiedene Textformate, Bildtypen (einschließlich Logos und QR-Codes) und Positionierungsoptionen ermöglicht.
  • Zustände: Die Bibliothek verfolgt den Status von Druckern und Aufträgen. Bei Druckern zeigt der Status an, ob der Drucker abgefangen wird und die Wasserzeichenverarbeitung stattfindet. Außerdem wird angezeigt, ob der Drucker nicht mehr abgefangen wird, was in der Regel unter anderem auf eine Ausnahme zurückzuführen ist. Bei Aufträgen werden die Status „Erstes Spooling“, „Verarbeitung“ und „Abschluss“ mit oder ohne Wasserzeichen angezeigt.

Technische Implementierung & Problemlösung

Um die technischen Herausforderungen zu meistern, haben unsere Entwickler eine Reihe von bewährten Lösungen implementiert:

  • Die Komplexität von XPS-Dateien: Um die Komplexität dieser Dateien zu bewältigen, haben wir eine klare Trennung zwischen Quelldateien, verarbeiteten und gerenderten Dateien vorgenommen. Wir haben uns auf Bibliotheken wie Microsoft XPS verlassen, um XPS-Elemente zu manipulieren und Transformationen anzuwenden.
  • Erkennung und Anwendung von Wasserzeichen: Wir verwendeten eine Methode, die XPS-Dokumente effizient auf vorhandene Wasserzeichen durchsucht, indem sie den Seiteninhalt liest, Bilder und Schriftarten extrahiert und ihre URIs mit einem vordefinierten Salzwert vergleicht. Auf diese Weise wird sichergestellt, dass neue Wasserzeichen nicht auf Seiten aufgebracht werden, auf denen sie bereits vorhanden sind, und eine Duplizierung verhindert.
  • Verarbeitung und Positionierung von Wasserzeichen: Der Code verwendet die Seitenabmessungen und DPI-Berechnungen (dots per inch), um die Wasserzeichen auf die richtige Größe zu skalieren. Außerdem wird die Position auf der Grundlage vordefinierter Aufzählungen für die Platzierung von Wasserzeichen (oben links, in der Mitte und unten rechts) angepasst. Die Erstellung von IXpsOMImageBrush und IXpsOMPath stellt sicher, dass das Wasserzeichen korrekt auf der Seite gezeichnet wird.
  • Dateiverarbeitung: Unsere Lösung extrahiert den XPS-Inhalt sorgfältig aus der Spooldatei und behandelt ihn wie ein komprimiertes Archiv. Anschließend nehmen wir die notwendigen Änderungen am XPS-Inhalt vor, um die Kompatibilität zu gewährleisten und das Anbringen von Wasserzeichen zu ermöglichen. Bei Spooldateien, die in mehrere Teile aufgeteilt sind, fügen wir diese vor der Verarbeitung zu einer einzigen vollständigen Datei zusammen.
  • Leistung bei großen Dateien: Wir haben Leistungsprobleme durch sorgfältige Speicherverwaltung entschärft. Beispielsweise streamt der Code Bilddateien direkt von der Festplatte, anstatt alles auf einmal in den Speicher zu laden. Außerdem werden in verschiedenen Verarbeitungsphasen temporäre Dateien verwendet, anstatt zu versuchen, alles im Speicher abzulegen.
  • Fehlersuche und Fehlerbehandlung: Wir haben ein System entwickelt, das es den Entwicklern ermöglicht, die Dateien in verschiedenen Verarbeitungsphasen zu untersuchen und mögliche Probleme frühzeitig zu erkennen. So können Probleme schnell erkannt und behoben werden. Alle Fehler und Ausnahmen werden sorgfältig aufgezeichnet und liefern wertvolle Informationen für die Fehlersuche und die Verbesserung der Systemstabilität.
  • Kompatibilität zwischen den XPS-Formaten: Wir haben eine Methode verwendet, bei der OpenXPS-Namensräume systematisch durch ihre Microsoft XPS-Entsprechungen ersetzt werden. Dadurch wird sichergestellt, dass XPS-Dateien, die mit dem OpenXPS-Standard erstellt wurden, von den in diesem Projekt verwendeten Microsoft XPS-APIs verarbeitet werden können. Die Verwendung von Stringsubstitutionen für diese URI-Schemata ist eine einfache, aber effektive Lösung zur Gewährleistung der Kompatibilität.
  • Gleichzeitigkeit und Multithreading: Um Wettlaufbedingungen zu verhindern und die Datenintegrität zu gewährleisten, verwenden wir eine Kombination aus Ereignissen und thread-spezifischen Datenstrukturen. Ereignisse signalisieren zwischen Threads und lösen Aktionen wie das Anhalten der Überwachung oder die Wiederaufnahme angehaltener Aufgaben aus. Thread-spezifische Informationen, wie z. B. Drucker- oder Auftragsdetails, werden in einer eigenen Struktur gespeichert, um die Kommunikation und Koordination zu erleichtern.
  • Drucker- und Auftragsbenachrichtigungen: Wir haben uns auf Effizienz und Speichersicherheit konzentriert. Das Programm verfolgt Änderungen am Druckerstatus mithilfe von Windows-APIs. Es verwaltet Benachrichtigungen effektiv, auch solche, die verworfen werden könnten. Der Code gewährleistet eine ordnungsgemäße Speicherverwaltung durch sorgfältige Zuweisung und Freigabe von Ressourcen.

Tests und Qualitätssicherung

Um sicherzustellen, dass wir eine voll funktionsfähige, stabile Lösung liefern, waren umfassende Tests erforderlich. Wir haben die Bibliothek mit vielen verschiedenen Kombinationen von Geräten, Betriebssystemen, Druckern und Dateitypen getestet. Wir überprüften die Kompatibilität mit verschiedenen Dateiformaten, darunter PDF, DOCX, TXT, JPG, XLSX, PNG und HTML, sowie mit gängigen Softwareanwendungen wie Adobe Acrobat, Microsoft Word, Excel, Notepad, Microsoft Photos und verschiedenen Webbrowsern. Wir haben auch mit verschiedenen Optionen zur Anpassung von Wasserzeichen experimentiert, z. B. mit der Verwendung von Text, Bildern oder QR-Codes als Wasserzeichen, und die Größe und Platzierung dieser Wasserzeichen angepasst.

Wir haben eine spezielle Testkonsolenanwendung entwickelt, mit der wir die Funktionalität von Printer Interceptor gründlich testen und debuggen konnten. Wir haben die Kompatibilität mit verschiedenen Anwendungen, Wasserzeichenparametern, Windows-Konfigurationen und Druckermodellen sichergestellt.

Dokumentation und Unterstützung

Wir haben eine ausführliche Dokumentation erstellt, um die Hauptmerkmale, die Funktionalität und die Verwendung des Interceptors klar zu erklären. Es wurde ein umfassender Leitfaden erstellt, der die Entwickler bei der Erstellung des Interceptors aus dem Quellcode unterstützt und so Flexibilität und Anpassungsfähigkeit gewährleistet.

Ein entscheidender Vorteil unseres Ansatzes war die Vermeidung von Herstellerabhängigkeit. Durch die Erstellung einer umfassenden Dokumentation konnten wir unserem Kunden die volle Kontrolle über seine Lösung geben. Diese Flexibilität stellte sicher, dass der Kunde den Interceptor intern weiterentwickeln und anpassen konnte. Gleichzeitig endet das Engagement von Redwerk nicht mit der Auslieferung. Wir bieten fortlaufende Unterstützung und Wartung, damit die Lösungen unserer Kunden immer einsatzbereit sind.

Ergebnis

Durch die Zusammenarbeit mit Redwerk konnte BlueCloud Technologies ScreenID deutlich verbessern, was zu einer höheren Kundenzufriedenheit und -bindung führte. Mit dem nahtlos integrierten Printer Interceptor kann ScreenID nun Druckaufträge abfangen, anpassbare Wasserzeichen (Text oder Bild) aufbringen und die Platzierung und Formatierung der Wasserzeichen präzise steuern.

Printer Interceptor wurde entwickelt, um den Performance-Overhead zu minimieren und stellt sicher, dass Druckaufträge nicht merklich verzögert werden.
Die Zusammenarbeit mit Redwerk führte zu einer leistungsstarken Lösung für Wasserzeichen auf Bildschirmen, die den Wettbewerbsvorteil von BlueCloud Technologies stärkt und namhaften Kunden wie Vodafone, National Bank of Egypt, Commercial International Bank und Credit Agricole Group einen erheblichen Mehrwert bietet.

Sie möchten die Funktionalität Ihres Produkts erweitern?

Lassen Sie uns darüber reden

Technologien

.NET.NET
C++
Reach FrameworkReach Framework
Präsentations FrameworkPräsentations Framework
Microsoft XPSMicrosoft XPS
8Testgeräte
3unterstützte Windows OS Versionen
50+Unternehmensnutzer
100%innerhalb des Umfangs und des Budgets
800bildreiche Seiten in weniger als 2 Minuten mit Wasserzeichen versehen
﹤10Sek. für die Verarbeitung durchschnittlicher Dateien

Redwerk Team Kommentare

Dmytro

Dmytro
Entwickler & Teamleiter

Dieses Projekt bot eine fantastische Gelegenheit, meine Fähigkeiten in der Programmierung auf Systemebene zu verfeinern, insbesondere bei der Echtzeitüberwachung und Verwaltung externer Hardwareressourcen wie Drucker, XPS-Dokumenten-Workflows und Dateikonvertierungsprozessen. Unser Team entwickelte eine robuste Bibliothek zum Abfangen und Überwachen von Druckeraufträgen. Sie fügt effektiv Wasserzeichen ein, verhindert unerwünschte Aufträge und überwacht den Druckerstatus in Echtzeit.

Das herausragende Merkmal der Bibliothek ist ihre Fähigkeit, mehrere Drucker gleichzeitig zu überwachen und gleichzeitig Aufträge abzufangen und zu bearbeiten. Die Möglichkeit, Dokumente vor dem Druck zu ändern, z. B. Wasserzeichen hinzuzufügen, ist ein echter Mehrwert.

Media
Media

Verwandt im Blog

Checkliste für Code-Reviews von Redwerk – Alle Schritte enthalten

Checkliste für Code-Reviews von Redwerk – Alle Schritte enthalten

Haben Sie sich jemals gefragt, ob Ihr IT-Dienstleister gute Arbeit geleistet und eine hochwertige App entwickelt hat? Es ist einfach, dies mit einer unabhängigen Code-Überprüfung zu überprüfen. Code-Reviews, die von externen Experten durchgeführt werden, bieten eine frische und u...

TOP 10 Trends der digitalen Transformation für 2024

TOP 10 Trends der digitalen Transformation für 2024

Das vergangene Jahr war ein Knaller für die digitale Transformation, da Unternehmen endlich KI, Chatbots und robotergestützte Prozessautomatisierung einsetzten, um die Effizienz in nie dagewesene Höhen zu treiben. Dieses Jahr geht noch einen Schritt weiter und bietet Trends für...

Beeindruckt?

Stellen Sie uns ein

Andere Fallstudien

Recruit Media

Recruit Media

Vereinigte Staaten

Von Grund auf entwickeltes, patentiertes Rekrutierungs-SaaS, erworben von HireQuest

Current

Current

Vereinigte Staaten

Entwicklung dieser 100% ADA-konformen E-Government-SaaS, die von Wohlfahrtsverbänden in den USA genutzt wird

MarketBee

MarketBee

New Zealand

Von Grund auf neu entwickelte Marktbewertungssoftware für Zuschlagstoffproduzenten in 12 Ländern