2011-06-13 17 views
6

Entonces ... de lo que puedo encontrar en Google, no puedo encontrar una forma de usar Javascript para establecer mis preferencias de impresión (léase: márgenes, orientaciones, pie de página, etc.).Establecer preferencias de impresión de JS

Estoy a punto de decirle a mi jefe que lo que él quiere hacer no es posible. Quería comprobar, ¿está bien gente antes de hacer esto. Por favor hagamelo saber.

Descubrí que en FF puede usar algunas configuraciones de user_pref (clave, val) para configurar las preferencias del usuario, pero eso no funciona para más del 90% de mis usuarios. Estoy buscando algo que cubra los IE (tantos como sea posible), FF y Chrome.

Gracias a los ninjas que responden.

+1

No soy un ninja Web por cualquier tramo de la imaginación y no es una solución JS bien, pero no es eso lo que se supone que la hoja de estilos de impresión en el CSS para lograr, entre otras cosas? –

+1

Agregando a Timo de, mira esto para un ejemplo de consulta de medios de impresión para http://www.javascriptkit.com/dhtmltutors/cssmedia.shtml css Básicamente, crear otra hoja de estilo y permítase cambiar totalmente el aspecto de la versión impresa de su página. Por ejemplo, he tenido que establecer comúnmente el color de fondo del cuerpo en #fff para obtener una copia impresa para usar menos tinta y, bueno, ver mejor. – mrk

+0

De hecho, es posible establecer las propiedades de impresión a través de JavaScript utilizando este complemento http://jsprintsetup.mozdev.org/ Saludos cordiales. –

Respuesta

11

Entonces ... después de todo el día buscando, creo que encontré la respuesta a mi propia pregunta. En resumen, la respuesta es que JS y/o CSS no le permitirán anular la configuración de página predeterminada del navegador del cliente.

Esto es lo que probé. Si crea un archivo HTML simple con una cabeza vacía, y un cuerpo que solo contiene el texto "Prueba", podrá ver lo que probé.

  1. Imprimir hojas de estilo no puede resolver su problema. Establecer el margen en el cuerpo en 0px 0px 0px 0px no es lo mismo que hacer clic en Archivo> Configurar página y establecer todos sus márgenes en 0. A pesar de lo que Print Style Sheeters quisiera que usted crea, son diferentes. Pruébalo por ti mismo. Esta es la razón por la cual las hojas de estilo de impresión no resuelven su problema.

  2. JS no puede resolver su problema. ¿Puede obtener una imagen si cada página que visitó modificó sus propiedades JS locales? Permitir que cada página tenga acceso a las configuraciones de impresión locales sería una brecha de seguridad, y no está permitido. Debido a esto, JS no puede resolver su problema.

Me gustaría que alguien responda aquí y me haga saber que estoy equivocado. De lo contrario ... esto apesta ... y tiene que suceder. Tengo un montón de usuarios antiguos ... y lograr que establezcan los márgenes en la configuración de su página es un problema. Además, el cliente no quiere que refaccionaremos la página para que no sea necesario. Estoy en medio de una roca y un lugar difícil.

6

Puede establecer la orientación de página y el margen con CSS:

@page { 
    size: landscape; 
    margin: 10% 
} 

También puede establecer un pie de página en la parte inferior de cada página utilizando el elemento <tfoot>.

EDITAR: Como señaló Beejamin, esta es una casa de mitad de camino. Realmente no puede cambiar las preferencias de la impresora (las que aparecen en el cuadro de diálogo Imprimir al hacer clic en Imprimir). Además, IE tiene una gran falta de soporte para el selector @page, (echó un vistazo para ver si IE9 lo soportaba y no podía encontrar nada). Como alternativa, siempre puedes intentar aplicarlo al cuerpo en tu hoja de estilo de impresión.

body { 
    size: landscape; 
    margin: 10% 
} 

Aunque no estoy seguro de cuán efectivo es esto.

+1

Jaitsu, ¿qué hace @page? No encuentro ninguna documentación css en @page ... y todos los estilos que trato de aplicar no funcionan. – frosty

+1

@page es el elemento de página para los medios paginados (solo impresoras, AFAIK). El soporte no es muy bueno; ciertamente no funcionará en ningún IE que conozca (no sé de 9). Está diseñado para este tipo de cosas, pero aún así no le permitirá ajustar la configuración * de la impresora, solo los márgenes/relleno de la 'caja' de la página que se envía a la impresora (y a la que se agregan los márgenes de la impresora)) – Beejamin

+1

Oops: para incluir el enlace: http://www.w3.org/TR/CSS2/page.html es difícil buscar, porque google quita el signo '@'. – Beejamin

3

Creo que estás muy de suerte tratando de hacer esto en HTML y CSS. Una gran parte del problema es que los márgenes de la impresora son específicos del tipo de impresora: la mayoría de las impresoras tienen un margen mínimo que pueden establecer (equivalente al espacio que necesitan para sujetar la página y el movimiento hacia la izquierda/derecha del cabezal).

márgenes aceptables también variarán según el tamaño del papel (el margen típicamente puede ser más pequeño en una hoja más pequeño que el máximo de la impresora aceptará). Por ejemplo, si carga papel A5 en una impresora A4, los márgenes que puede establecer serán diferentes que si carga A4.

Ninguno de que la información está disponible a la página web, a través de CSS, Javascript, o cualquier cosa.

Ahora, en lo que respecta a una solución, los archivos PDF le permiten incrustar algunas configuraciones predeterminadas de la impresora en el archivo: Acrobat pro le permitirá especificar opciones de escala, números predeterminados de copias, etc. No me importaría apostando a que hay más configuraciones potenciales disponibles en el formato de archivo que Acrobat no expone.

Hay un montón de herramientas con todas las funciones de generación de PDF para cualquier tecnología del lado del servidor que utilice. los buenos incluso le permitirán proporcionar una URL y procesar HTML + CSS a contenido PDF, lo que automatizaría la generación en cierta medida. Sin embargo, la generación de PDF es bastante intensiva en la CPU, y tampoco sería perfecta para el usuario (y requeriría complementos de PDF para la mayoría de los navegadores).

Sé que no es lo ideal, pero es la avenida que me vería en. ¡Buena suerte!

1

El uso de CSS le ayudará a lograr eso.

@page { 
    margin:0cm; 
} 
Cuestiones relacionadas