2012-06-07 17 views
5

[versión simplificada de esta pregunta:]iFrames problemas de impresión

¿Por qué iFrames veces se niegan a imprimir? Por ejemplo, golpear print preview en estas dos páginas:

  1. http://fiddle.jshell.net/gJDv4/1/show/
  2. http://fiddle.jshell.net/gJDv4/2/show/

En vista previa de impresión, los iFrames son visibles en el primer ejemplo, pero oculto en la segunda. El SOLO código de diferencia entre first y second iFrames es una propiedad de CSS (margin: 20px;) se ha agregado a los iFrames en el segundo ejemplo.


[largo (original) Versión:]

Estoy construyendo una página de vista previa/impresión que reúne un montón de archivos HTML independientes referencia a su propio estilo y técnica javascript archivos.

La idea es que todos los archivos se muestran en iFrames para la vista previa, y luego cuando se imprima, cada marco flotante (que probablemente abarcar varias páginas) imprime como si fuera su propio documento .

Sin embargo, cuando imprimo (o vista previa de impresión) los iFrames no muestran contenido, o solo imprimen la primera página, truncando las páginas restantes del iFrame.

Los iFrames impresos (e imprimir-previamente) bien antes de que yo les hacía varias páginas:

¿Cuál es la razón de este comportamiento?

+0

Hehe, dudo que haya una solución, pero haré +1 a quien logre hacer que esto funcione correctamente: p Y +1 por gastar el representante en él para obtener respuestas mientras tiene ese pequeño usted mismo. :) – sg3s

+0

Si no hay una respuesta real, seguramente te mereces la recompensa por reconocer eso de inmediato. ;) – brentonstrine

Respuesta

3

Puede imprimir los documentos en los marcos flotantes individuales llamando a la función print() en sus ventanas ....

Así que algo como esto para imprimir el archivo 2:

$('#iframeTwo')[0].contentWindow.print() 

Y aquí un jsFiddle donde he añadido botones que activan las impresiones individuales ...

http://jsfiddle.net/sg3s/GJKkm/17/

en cuanto a por qué el navegador haga no imprime el contenido dentro de iframes cuando imprime su documento principal. Probablemente tiene que hacer algo con el hecho de que esos documentos no son realmente parte del documento que se muestran en ...Piense en ello como una ventana separada (una que puede generar con window.open() en js) pero luego hackeó hábilmente en el documento principal con la ventana gráfica limitada a lo que se especifica en el iframe con algo de magia.

+0

El problema con la impresión de los iframes individualmente es que abre la posibilidad de que otro trabajo de impresión finalice entre dos de los archivos HTML que se imprimen, ya que (supongo) entrarían en la cola de impresión como trabajos de impresión separados; . La explicación sobre por qué el contenido no aparece es lo que estaba adivinando, pero todavía existe el problema de que los iFrames DO aparecen cuando no se transfieren a una página diferente. – brentonstrine

+0

Si quiere mantener sus trabajos de impresión juntos, probablemente sea mucho mejor que junte los dos documentos, teniendo un cuidado especial para separar los estilos usando clases ... Y sí, ese comportamiento ES extraño, pero si lo piensa es increíble se muestran en absoluto ... Probablemente intente renderizarlo como html normal, pero dado que existen limitaciones para enmarcar los errores de contenido. Por cierto, no puedo reproducir eso en Chrome, así que si intentas que esto funcione en el navegador cruzado, también puedes parar ahora: p – sg3s

+0

Para juntar los dos documentos con diferentes hojas de estilo. Esto podría requerir un poco de trabajo intensivo, pero probablemente funcionaría; Tome los dos documentos, coloque el html en nodos 'raíz' separados que identifiquen los diferentes documentos. Obtenga las hojas de estilo para los documentos y compile en un precompilador css dentro de una estructura anidada (como [LESS] (http://lesscss.org/#-nested-rules)) deje que el precompilador cree la hoja de estilo, con los nodos dentro de un conjunto anidado que aplica los estilos en esa hoja de estilo solo al documento relevante. Incluye la hoja de estilos generada. Ganar. – sg3s