javascript - jquery print pdf directly
Javascript Imprimir solo contenido iframe (10)
En este momento, no hay necesidad de la etiqueta de script dentro del iframe. Esto funciona para mí (probado en Chrome, Firefox, IE11 y node-webkit 0.12):
<script>
window.onload = function() {
var body = ''dddddd'';
var newWin = document.getElementById(''printf'').contentWindow;
newWin.document.write(body);
newWin.document.close(); //important!
newWin.focus(); //IE fix
newWin.print();
}
</script>
<iframe id="printf"></iframe>
Gracias a todas las respuestas, salva mi día.
Este es mi código
<script>
var body = "dddddd"
var script = "<script>window.print();</scr''+''ipt>";
var newWin = $("#printf")[0].contentWindow.document;
newWin.open();
newWin.close();
$("body",newWin).append(body+script);
</script>
<iframe id="printf"></iframe>
Esto funciona pero imprime la página principal, ¿cómo hago para imprimir solo el iframe?
La manera fácil (probada en ie7 +, firefox, Chrome, safari) sería esta
//id is the id of the iframe
function printFrame(id) {
var frm = document.getElementById(id).contentWindow;
frm.focus();// focus on contentWindow is needed on some ie versions
frm.print();
return false;
}
Me pregunto cuál es tu propósito de hacer la impresión de iframe.
Hace un momento encontré un problema similar: use la vista previa de impresión de Chrome para generar un archivo PDF de un iframe.
Finalmente resolví mi problema con un truco:
$(''#print'').click(function() {
$(''#noniframe'').hide(); // hide other elements
window.print(); // now, only the iframe left
$(''#noniframe'').show(); // show other elements again.
});
No esperaría que eso funcione
prueba en cambio
window.frames["printf"].focus();
window.frames["printf"].print();
y use
<iframe id="printf" name="printf"></iframe>
Alternativamente, intenta hacerlo bien
var newWin = window.frames["printf"];
newWin.document.write(''<body onload="window.print()">dddd</body>'');
newWin.document.close();
si jQuery no puede hackearlo
Puedes usar este comando:
document.getElementById(''iframeid'').contentWindow.print();
Este comando básicamente es igual que window.print (), pero como la ventana que queremos imprimir está en el iframe, primero necesitamos obtener una instancia de esa ventana como un objeto javascript.
Entonces, en referencia a ese iframe, primero obtenemos el iframe usando su id, y luego es contentWindow el que devuelve un objeto de ventana (DOM). Entonces, podemos usar directamente la función window.print () en este objeto.
Si está configurando el contenido de IFrame utilizando javascript document.write()
, debe cerrar el documento por newWin.document.close();
de lo contrario, el siguiente código no funcionará y la impresión imprimirá los contenidos de toda la página en lugar de solo los contenidos de IFrame.
var frm = document.getElementById(id).contentWindow;
frm.focus();// focus on contentWindow is needed on some ie versions
frm.print();
Tuve problemas con todas las soluciones anteriores en IE8, he encontrado una solución decente que se prueba en IE 8 + 9, Chrome, Safari y Firefox. Para mi situación, necesitaba imprimir un informe que se generó de forma dinámica:
// create content of iframe
var content = ''<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">''+
''<head><link href="/css/print.css" media="all" rel="stylesheet" type="text/css"></head>''+
''<body>(rest of body content)''+
''<script type="text/javascript">function printPage() { window.focus(); window.print();return; }</script>''+
''</body></html>'';
Tenga en cuenta el método javascript printPage () antes de la etiqueta body close.
A continuación, cree el iframe y añádalo al cuerpo principal para que su contentWindow esté disponible:
var newIframe = document.createElement(''iframe'');
newIframe.width = ''0'';
newIframe.height = ''0'';
newIframe.src = ''about:blank'';
document.body.appendChild(newIframe);
A continuación, establece el contenido:
newIframe.contentWindow.contents = content;
newIframe.src = ''javascript:window["contents"]'';
Aquí estamos configurando la variable de contenido dinámico para el objeto de ventana del iframe y luego invocándolo a través del esquema javascript:
Finalmente para imprimir; enfoque el iframe y llame a la función javascript printPage () dentro del contenido del iframe:
newIframe.focus();
setTimeout(function() {
newIframe.contentWindow.printPage();
}, 200);
return;
El setTimeout no es necesariamente necesario, sin embargo, si está cargando grandes cantidades de contenido, creo que Chrome ocasionalmente no pudo imprimir sin él, por lo que se recomienda este paso. La alternativa es ajustar ''newIframe.contentWindow.printPage ();'' en una captura de prueba y coloque la versión envuelta setTimeout en el bloque catch.
Espero que esto ayude a alguien, ya que pasé mucho tiempo buscando una solución que funcionara bien en múltiples navegadores. Gracias a SpareCycles .
EDITAR:
En lugar de usar setTimeout para llamar a la función printPage, use lo siguiente:
newIframe.onload = function() {
newIframe.contentWindow.printPage();
}
Use este código para IE9 y superior:
window.frames["printf"].focus();
window.frames["printf"].print();
Para IE8:
window.frames[0].focus();
window.frames[0].print();
una opción alternativa, que puede o no ser adecuada, pero más limpia si es:
Si siempre quiere imprimir el iframe desde la página, puede tener una hoja de estilo "@media print {}" que oculte todo además del iframe. Entonces puedes simplemente imprimir la página normalmente.
document.getElementById("printf").contentWindow.print();
Se aplica la misma política de origen .