Pregunta

Tengo una página que se supone que inicie la carga de la página Vista previa de impresión.

Encontré esto:

var OLECMDID = 7;
/* OLECMDID values:
* 6 - print
* 7 - print preview
* 1 - open window
* 4 - Save As
*/
var PROMPT = 1; // 2 DONTPROMPTUSER
var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
WebBrowser1.ExecWB(OLECMDID, PROMPT);
WebBrowser1.outerHTML = "";

Pero ...

  1. no funciona en Firefox.
  2. es un poco feo.

¿Existe una forma mejor para IE o una que funcione para FireFox?

¿Fue útil?

Solución

No se puede, la Vista previa de impresión es una función de un navegador, y por lo tanto, debe estar protegida de ser llamada por JavaScript, ya que sería un riesgo de seguridad.

Es por eso que su ejemplo usa Active X, que evita los problemas de seguridad de JavaScript.

Entonces, en lugar de eso, use la hoja de estilo de impresión que ya debería tener y muéstrela para media = screen, imprima en lugar de media = imprima.

Lea Alist Apart: Going to Print para obtener un buen artículo sobre el tema de imprimir hojas de estilo .

Otros consejos

Creo que lo mejor que es posible en JavaScript entre navegadores es window.print () , que (en Firefox 3, para mí) muestra el diálogo 'imprimir' y no el diálogo de vista previa de impresión .

Se puede hacer usando javascript. Digamos que su código html / aspx es así:

<span>Main heading</span>
<asp:Label ID="lbl1" runat="server" Text="Contents"></asp:Label>
<asp:Label Text="Contractor Name" ID="lblCont" runat="server"></asp:Label>
<div id="forPrintPreview">
  <asp:Label Text="Company Name" runat="server"></asp:Label>
  <asp:GridView runat="server">

      //GridView Content goes here

  </asp:GridView
</div>

<input type="button" onclick="PrintPreview();" value="Print Preview" />

Aquí, al hacer clic en " Vista previa de impresión " abro una ventana con datos para imprimir. Observe que 'forPrintPreview' es el id de un div. La función para la vista previa de impresión es la siguiente:

function PrintPreview() {
 var Contractor= $('span[id*="lblCont"]').html();
 printWindow = window.open("", "", "location=1,status=1,scrollbars=1,width=650,height=600");
 printWindow.document.write('<html><head>');
 printWindow.document.write('<style type="text/css">@media print{.no-print, .no-print *{display: none !important;}</style>');
 printWindow.document.write('</head><body>');
 printWindow.document.write('<div style="width:100%;text-align:right">');

  //Print and cancel button
 printWindow.document.write('<input type="button" id="btnPrint" value="Print" class="no-print" style="width:100px" onclick="window.print()" />');
 printWindow.document.write('<input type="button" id="btnCancel" value="Cancel" class="no-print"  style="width:100px" onclick="window.close()" />');

 printWindow.document.write('</div>');

 //You can include any data this way.
 printWindow.document.write('<table><tr><td>Contractor name:'+ Contractor +'</td></tr>you can include any info here</table');

 printWindow.document.write(document.getElementById('forPrintPreview').innerHTML);
 //here 'forPrintPreview' is the id of the 'div' in current page(aspx).
 printWindow.document.write('</body></html>');
 printWindow.document.close();
 printWindow.focus();
}

Observe que los botones 'imprimir' y 'cancelar' tienen la clase css 'no-print', por lo que estos botones no aparecerán en la impresión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top