Programmatisch das "Drucken in Datei" deaktivieren

8

Wir haben eine bestehende plattformübergreifende Anwendung (Mac, Windows, Linux), die in Java geschrieben ist und programmatisch ein Dokument an den Standarddrucker sendet, ohne einen Druckdialog anzuzeigen.

Auf verschiedenen Plattformen ist es möglich, einen Drucker zum Drucken in eine Datei einzurichten. Unter Windows ist es beispielsweise möglich, den XPS Document Writer als Standarddrucker festzulegen oder die Eigenschaften eines Druckers so zu ändern, dass eine Dateikopie aller Dokumente beibehalten wird.

Ist das möglich? Ich bin offen für alle Vorschläge, aber die Lösung muss plattformübergreifend funktionieren. Ich gehe davon aus, dass solche Details zu niedrig (und plattformabhängig) sind, so dass eine Java-Lösung wahrscheinlich nicht möglich ist, aber wenn möglich ideal wäre.

Wir suchen nicht unbedingt nach einer kugelsicheren Lösung, also wären alle Vorschläge hilfreich, egal wie verrückt!

Bearbeiten:

Mir ist klar, dass es hier eine ganze Reihe von nichttechnischen Problemen gibt, die eine Menge Diskussionen provozieren könnten (wer hätte das gedacht?). Ich möchte klarstellen, dass ich kein Fan von DRM bin (wie man das gesehen hat) und nicht versuche, böse zu sein:).

Ich weiß zu schätzen, dass diese Probleme real sind, und wenn ich meine Empfehlungen formuliere, werde ich dies sehr deutlich machen. Allerdings muss ich die technische Lösung untersuchen, bevor ich das tun kann.

    
Nigel 14.04.2011, 12:09
quelle

1 Antwort

9

Nein.

Sie könnten alle Arten von seltsamer, vom Betriebssystem abhängiger Erkennung durchführen (verwendet somedriver.dll ?) oder Namen-Sniffing ("enthält es 'XPS'?"), aber am Ende:

  • 1) Es geht dich nichts an, wie ich meine Dokumente drucke,
  • 2) aufgrund der beteiligten Abstraktionen ist es praktisch unmöglich zu erkennen, ob der angegebene logische Drucker tatsächlich auf einen physischen Drucker oder anderswo gedruckt wird;
  • 3) Dies ist nicht Netzwerktreiber zu nennen (was ist in \joescomputer\someprinter ? schwer zu sagen: könnte ein Drucker sein, könnte ein PDF-Generator sein, könnte Tante Matilda sein; Netzwerk fügt eine weitere Ebene der Abstraktion zwischen Ihrem Programm und die physische Hardware)
  • 4) Wenn ich wirklich eine Kopie in Papierform möchte, mache ich einen Screenshot oder sogar ein Foto oder
  • 5) nehmen Sie den verdammten Papierausdruck vom physischen Drucker und füttern Sie ihn durch einen Scanner und fluchen Sie, um mit meinem Arbeitsablauf ohne guten Grund zu verwirren.
  • Beachten Sie auch, dass 6) Drucklösungen für mittlere und große Mengen verfügbar sind eine "Netzwerkdrucker" -Schnittstelle, und dann erlauben Sie dem Benutzer, viele Dinge mit dem Dokument zu tun (das zu diesem Zeitpunkt nur als Spool-Datei auf einem Server existiert): Drucken Sie auf einem der n Drucker verbunden mit dem System, E-Mail, Fax, was auch immer - so wissen Sie nicht im Voraus, ob das Dokument physisch (oder wo) gedruckt wird, auch wenn der Druckauftrag den Computer verlässt.

Sie kämpfen im Grunde eine DRM-Schlacht in einer etwas anderen Umgebung (dies ist keine moralische Beurteilung, sondern eine Feststellung der Tatsache: "Ich möchte die Auswahl einschränken, die Benutzer meiner Software haben" ist der Kern von DRM, und Ihrer Frage - unabhängig von meiner Meinung zu dem Thema); Wie Sie vielleicht wissen, sind diese unordentlich und haben unangenehme Nebenwirkungen ("Was meinen Sie, ich kann nicht auf meinem physischen Drucker drucken, weil es WinXPStation heißt?!?" "Mein Antivirenprogramm sagt, dass Ihre Software versucht, sich damit zu messen meine Druckertreiber, drückst du Spyware?!? "), und sie sind nicht gewinnbar - es gibt immer einen Workaround.

Denken Sie nicht einmal daran, deaktivieren etwas, was Sie denken ist ein Print-to-File-Treiber: Beachten Sie Sony DRM Fiasko, und beachten Sie, dass Sie möglicherweise verklagt werden für illegale Manipulation des Computers.

Wenn Ihre Software einen anderen Teil des Systems deaktiviert, und dieser andere Teil dann nicht funktioniert, weil deaktiviert ist, wird das Wort rausgehen. "Ich habe SomeSoftware von NigelSoft installiert, und es hat meinen Drucker kaputt gemacht" ist kein guter Ruf zu erwerben, und schwer zu löschen - Leute werden sich beschweren, und, was auch immer im Internet läuft, könnte dort für immer bleiben (beachten Sie die verschiedenen ähnlichen Vorfälle werde durch die Suche nach "(Antivirus-Anbieter) Windows" entdecken. Beachten Sie auch, dass der fragliche Anbieter weniger als glücklich ist: "Ihre # @ $ @ Software bricht absichtlich meinen Wonderful Special Rainbow Printer (TM), Sie schulden uns das Geld, das wir zurückzahlen mussten, aa und hier sind ein paar Klagen gegen Sie ".

Mit anderen Worten, ich denke, es gibt eine nicht-technische Voraussetzung, die - leider - nicht rein technisch gelöst werden kann (und definitiv nicht mit den tiefen Abstraktionen von Java). Möglicherweise müssen Sie den legalen Weg gehen, wie zum Beispiel "Sie dürfen die Ausdrucke nicht elektronisch speichern" und dies an jedem Punkt, an dem gedruckt werden soll, in riesigen rot blinkenden Buchstaben anzeigen. Dies wird ähnlich unwirksam sein wie die technische Lösung, aber möglicherweise genug für CYA (da Sie die Entscheidung eindeutig an den Benutzer verschieben werden).

    
Piskvor 14.04.2011, 12:32
quelle

Tags und Links