2011-04-14 22 views
8

Tenemos una aplicación existente multiplataforma (Mac, Windows, Linux) escrita en Java, que envía un documento por programación a la impresora predeterminada sin mostrar un cuadro de diálogo de impresión.Desactivar programáticamente 'imprimir en archivo'

En diferentes plataformas, es posible configurar una impresora para imprimir en un archivo. Por ejemplo, en Windows, es posible configurar XPS Document Writer como la impresora predeterminada o cambiar las propiedades de una impresora, de modo que conserve una copia de todos los documentos.

¿Es posible detectar esto? Estoy abierto a cualquier sugerencia, pero la solución debe funcionar multiplataforma. Supongo que esos detalles son de un nivel demasiado bajo (y depende de la plataforma), por lo que una solución Java probablemente no sea factible, pero sería ideal si fuera posible.

No estamos buscando necesariamente una solución a prueba de balas, por lo que cualquier sugerencia sería útil, ¡no importa lo raro que sea!

Editar:

Soy consciente de que hay toda una serie de problemas no técnicos aquí, lo que podría provocar un gran debate (quien lo hubiera pensado?). Quiero dejar en claro que no soy un fanático de DRM (como se ha comparado con esto) y no tratando de ser malvado :).

Aprecio que estos problemas sean reales, y al hacer mis recomendaciones lo dejaré muy claro. Sin embargo, tengo que investigar la solución técnica antes de poder hacer esto.

+0

Esto puede ser algo relacionado con la lectura: [¿Qué color son sus bits?] (Http://ansuz.sooke.bc.ca/lawpoli/colour/2004061001.php) – Piskvor

Respuesta

9

Se puede hacer todo tipo de detección raro OS-dependiente (que se usa somedriver.dll?), O el nombre de detectores ("¿contiene 'XPS'?") Pero al final :

  • 1) que no es asunto de su negocio cómo puedo imprimir mis documentos,
  • 2) debido a las abstracciones involucrados, es prácticamente imposible detectar si la impresora lógica dada realmente imprimir en una impresora física o en alguna parte más;
  • 3) esto es por no hablar de los controladores de red (lo que está en \\joescomputer\someprinter Es difícil de decir:? Podría ser una impresora, podría ser un generador de PDF, podría ser tía Matilde red añade otra capa de abstracción entre el programa y la física hardware)
  • 4) si realmente realmente quiero una copia que no sea en papel, tomaré una captura de pantalla o incluso una foto real, o
  • 5) saque la maldita impresión de papel de la impresora física y la alimente un escáner, maldiciendo por interferir con mi flujo de trabajo sin una buena razón.
  • Tenga en cuenta también que 6) hay printing solutions de escala media y grande que exponen una interfaz de "impresora de red" y luego permiten al usuario hacer muchas cosas con el documento (que en ese momento solo existe como un archivo de cola en un servidor en alguna parte): imprima en cualquiera de las impresoras n conectadas al sistema, correo electrónico, fax, lo que sea, para que no sepa con anticipación si el documento se imprimirá físicamente (o dónde), incluso si la impresión el trabajo deja la computadora.

En esencia, estás luchando una batalla de DRM en un entorno ligeramente diferente (esto no es un juicio moral, sino una afirmación de hecho: "Quiero limitar las opciones que tienen los usuarios de mi software" es el núcleo de DRM, y de su pregunta, independientemente de cualquier opinión que pueda tener sobre el tema); como sabrá, son desordenados y tienen efectos secundarios desagradables ("¿qué quiere decir con que no puedo imprimir en mi impresora física porque se llama WinXPStation?!?" "mi antivirus dice que su software está tratando de meterse con mis controladores de impresión, ¿estás impulsando el spyware?!?), y no se pueden ganar, siempre hay una solución.

Ni siquiera creo que de hecho deshabilitar algo que usted puede pensar es un controlador de impresión a archivo: fiasco en cuenta DRM de Sony, y tenga en cuenta que es posible que se demandado por la manipulación ilegal con el ordenador.

En una nota más pragmática, si su software desactiva alguna otra parte del sistema, y ​​luego esa otra parte no funciona porque es deshabilitado, la palabra saldrá. "Instalé SomeSoftware by NigelSoft, y se rompió mi impresora" no es una buena reputación para adquirir, y difícil de borrar, la gente se quejará, y, bueno, todo lo que sucede en Internet puede permanecer allí para siempre (tenga en cuenta los diversos incidentes similares que Descubriré buscando "(proveedor de antivirus) rompe Windows"). Tenga en cuenta también que el vendedor en cuestión no estará contento: "su software # @ $ @ está deliberadamente rompiendo mi Maravillosa Impresora Arcoíris Especial (tm), nos debe el dinero que tuvimos que reembolsar, y aquí hay un par de demandas en su contra ".

En otras palabras, creo que hay algún requisito no técnico detrás de esto, que, lamentablemente, no se puede resolver simplemente por medios técnicos (y definitivamente no con las abstracciones profundas de Java). Es posible que tenga que seguir la ruta legal, como incluir "no tiene permitido guardar las copias impresas electrónicamente" y mostrar esto en enormes letras rojas intermitentes en cada punto donde se solicita la impresión. Esto será igualmente ineficaz como la solución técnica, pero puede ser suficiente para CYA (ya que claramente se cambiará la decisión al usuario).

+0

Gracias. Si pudiera enumerar estos mecanismos de 'detección extraña que depende del sistema operativo', estaría muy agradecido :). Aunque estoy totalmente de acuerdo con sus puntos, estoy interesado en cualquier idea sobre cómo hacer esto. Por ejemplo, he visto aplicaciones específicas de Windows que pueden hacerlo con éxito. Aunque estos, sin duda, no son infalibles, sí muestran que las implementaciones (aunque sean limitadas) son posibles. – Nigel

+0

+1 para "no es de tu incumbencia cómo imprimo mis documentos". Buen post. –

+0

+1 de hecho. Este es un ejemplo de un cliente que le pide que cambie los principios básicos de Internet y los sistemas operativos. No es un problema técnico en absoluto. –

Cuestiones relacionadas