2011-01-31 15 views
17

Estoy desarrollando una extensión interna de Google Chrome que necesita una forma de iniciar la impresión de la página actual en la impresora. No quiero que aparezca el cuadro de diálogo Imprimir predeterminado (por lo tanto, javascript: window.print() está fuera de toda duda).Extensión de Google Chrome: Imprima la página en silencio

Por lo que yo entiendo, esto no es posible solo con el complemento JS + HTML, por lo que también estoy abierto a usar el plugin NPAPI (con un tipo de mímica ficticio). Y me preocupa solo la plataforma de Windows.

También estoy abierto para varios hacks/workarounds si es posible, aunque una solución estándar sería agradable.

Si cree que esto no es posible, avíseme si conoce alguna solicitud de función registrada para ello.

Cualquier sugerencia/aclaraciones son bienvenidos ..

+1

¿Alguna vez terminó la extensión? Es exactamente lo que estoy buscando ... –

+0

No, no pude hacer nada para la impresión silenciosa. :( –

Respuesta

0

Hay varias extensiones que tomar instantáneas de la página Web actual (por ejemplo, this one); podría adaptar uno para enviar la imagen a una impresora a través de un plugin NPAPI.

+0

¿Hay alguna otra forma que conozcas/pienses sin usar la captura de pantalla? Además, ¿puedes proporcionarme información/vínculo sobre cómo "enviar la imagen a una impresora" en Windows? –

+0

No dije nada sobre capturas de pantalla; vaya a ver el complemento al que he vinculado. En realidad, muestra la página (incluidas las partes desplazadas fuera de la vista) en una imagen, no toma una captura de pantalla. – smorgan

+0

Si necesita aprender a escribir código de impresión nativo en Windows, sugiero publicar una nueva pregunta, es totalmente tangencial a las extensiones de Chrome y NPAPI. – smorgan

1

Dado que NPAPI le permite crear complementos nativos de C++ con los que puede interactuar a través de una etiqueta de objeto (que puede usar desde una extensión), esa sería probablemente la forma de hacerlo.

El truco es que no sé de una buena manera de obtener los bits para imprimir la página. La única persona que conozco que ha hecho algo similar a esto obtuvo el identificador de ventana del navegador (disponible a través de NPAPI) y eliminó los bits para imprimir de esa manera, pero eso no tendrá en cuenta las hojas de estilo de impresión ni nada . También podría intentar usar eventos de automatización para tratar de controlar el diálogo de impresión, pero no tengo idea de si eso funcionaría o no.

Por diseño, los navegadores no deje que se hace algo así, ya que podría abrir algunas vulnerabilidades graves si cualquier sitio web sólo podría comenzar cosas de impresión a la impresora sin confirmación ...

De todos modos, si encuentre una manera de hacerlo con C++ puede usar FireBreath para facilitar la creación del plugin NPAPI.

+1

"Lo difícil es que no conozco una buena forma de obtener los bits para imprimir la página". <- Esta parte se puede hacer un nivel de extensión, en lugar del nivel de complemento – smorgan

16

En cromo (v18 +) tenemos los interruptores --kiosk --kiosk-printing. Uno puede imprimir automáticamente a la impresora predeterminada sin confirmación de impresión.

Se puede ver a partir de este video http://www.youtube.com/watch?v=D6UHjuvI7IE

+0

Posible desde la línea de comando? – dfrankow

+0

¿Estas opciones estarán disponibles en chrome: // flags también? ¿O son solo de línea de comando? –

+0

Chrome no funciona bien con nuestra impresora de etiquetas. Si IE tuviera un cambio similar, ¡sería genial! –

0

Recientemente he estado en busca de una capacidad similar, y parece que sería muy posible utilizando la nueva API nativa de mensajería de Chrome.

https://developer.chrome.com/extensions/nativeMessaging

Hay un montón de ejemplos de esto con C#, pero aquí es un ejemplo rápido de mensajería nativa solución de problemas Chrome con un # aplicación básica C

Native messaging from chrome extension to native host written in C#

que se dan cuenta de que esto puede ser una un día tarde y un dólar corto, pero en caso de que alguien más se encuentre con esta pregunta, esta es la solución que funcionó para mí. Desde dentro de una aplicación C#, puede imprimir directamente a las impresoras instaladas utilizando la clase PrintDocument. Si descubrió una forma de obtener la imagen de la página, esto sería mucho más fácil que usar Firebreath o NPAPI.

Cuestiones relacionadas