2009-08-07 24 views
6

Sé que puede usar window.print() para imprimir la página actual ... pero lo que quiero saber es si puedo crear un documento usando javascript para llenarlo con datos e imprimirlo.¿Cómo funciona la función de impresión de Javascript? ¿Puedo crear un documento usando javascript e imprimirlo?

Al igual que usted puede tener html/xml como un objeto JavaScript, se puede hacer algo similar a esto:

var name = "Matt"; 
var htmlDocumentToPrint = "<html><body><div style='width:300px; height:20px; background-color:#000; text-align:center;'>My name is " + name + "</div></body></html>"; 

htmlDocumentToPrint.print(); 

que realmente no se preocupan por la adición de colores todos los que mucho-- sólo quieren dar formato un documento, rellene con datos e imprímalo. es posible?

Respuesta

4

Print() es un método en el objeto ventana. Si crea un documento en una ventana usando javascript, y luego imprime call en ese objeto de ventana, debería funcionar.

<script type="text/javascript"> 
    var myWindow = window.open('','','width=200,height=100') 
    myWindow.document.write("This is 'myWindow'") 
    myWindow.print(); 
</script> 

ejemplo modificado de w3schools.com ventana ejemplo abierta.

+1

También puede utilizar un iframe oculto para imprimir documentos ocultos! – James

+0

Esto no parece funcionar en Chrome u Opera. Ambos navegadores parecen imprimir la ventana principal cuando se invocan self.print() o window.print() en un iFrame oculto. – Jack

+0

De hecho, no parece funcionar con un iframe con alto y ancho de 0px tampoco ... – Jack

0

Si está haciendo esto mientras se está cargando el documento, puede usar document.write para escribir el documento actual y luego imprimirlo.

Si la página ha terminado de cargarse, puede usar las funciones para manipular el DOM, o preferiblemente usar una biblioteca como jQuery o Prototype, luego imprima el documento actual.

1

print() básicamente solo activa el diálogo de impresión nativo para una ventana determinada.

Pero como estás pensando, funcionará en cualquier ventana o (i) marco.

por lo tanto, si escribe contenido en un marco, puede llamarlo para imprimirlo.

window.frameName.print(); 

nota el único inconveniente (y es un grande), es que este botón activa el diálogo de impresión ... no la ventana de vista previa de impresión ... de este modo el usuario en realidad no tienen la oportunidad de ver lo que están imprimiendo y/o escalar para que se ajuste a su impresora/papel.

Deseo personalmente que todos los navegadores implementen lo siguiente para solucionar el problema anterior. ;-)

window.printPreview(); 
1

Mi primer pensamiento:

Se puede crear un iframe mediante programación, asignar el código HTML para ser impreso, llamar a la función print() en el contexto de la iframe.contentWindow, y luego retire el marco flotante del DOM:

function printHTML(input){ 
    var iframe = document.createElement("iframe"); // create the element 
    document.body.appendChild(iframe); // insert the element to the DOM 

    iframe.contentWindow.document.write(input); // write the HTML to be printed 
    iframe.contentWindow.print(); // print it 
    document.body.removeChild(iframe); // remove the iframe from the DOM 
} 

printHTML('<h1>Test!</h1>'); 

Puede probar el fragmento de arriba here.

+0

No funciona en IE. Si recuerdo correctamente, debe enfocar() la ventana antes de imprimirla, o algo similar. – James

+0

Esto bloquea Google Chrome –

1

¿Por qué no hacer que todo sea invisible para media = print y luego hacer visibles solo algunos bloques con su código especial?

0

Jack, ¿has probado window.print() dentro del iframe después de cargar el documento?

0

Hay una solución simple disponible sin necesidad de escribir una función y eso es - ventana.imprimir()

donde quiera usarlo simplemente ponga - onClick = "window.print();"

Ejemplo

<a href="" onClick="window.print();">Print</a> 

I testículos que todos los navegadores y funciona como un encanto!

0

Existen tres enfoques para imprimir dos de los cuales funcionarán.

  1. Imprimir toda la ventana: window.print(); funcionará.

  2. Imprima solo un marco específico: window.parent._frame_id_.print(); funcionará.

  3. Imprimir un documentFragment no va a funcionar (al menos en Firefox): document.createDocumentFragment().print();//undefined

Cuestiones relacionadas