2008-10-23 2 views
54

У меня есть страница, на которой предполагается запустить страницу предварительного просмотра печати.Как можно вызывать предварительный просмотр из Javascript?

Я нашел это:

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 = ""; 

Но ...

  1. он не работает в FireFox.
  2. Это своего рода уродливый.

Есть ли лучший способ для IE или способ, который работает для FireFox?

ответ

34

Вы не можете, Предварительный просмотр печати является особенностью браузера и поэтому должен быть защищен от вызова JavaScript, поскольку это будет угрозой безопасности.

Вот почему ваш пример использует Active X, который обходит проблемы безопасности JavaScript.

Поэтому вместо этого используйте таблицу стилей печати, которую вы уже должны иметь, и покажите ее на носителе = экран, печать вместо media = print.

Прочтите Alist Apart: Going to Print за хорошую статью на тему стилей печати.

+5

Статья на ALA переехала: http://www.alistapart.com/articles/goingtoprint/ – Roman 2009-09-26 16:26:38

18

Я думаю, что лучшее, что возможно в кросс-браузерном JavaScript, - window.print(), которое (в Firefox 3 для меня) вызывает диалог «печать», а не диалог предварительного просмотра.

3

Это можно сделать, используя javascript. Скажите ваш код HTML/ASPX идет следующим образом:

<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" /> 

Здесь на щелчке «Print Preview» кнопку мы открываем окно с данными для печати. Обратите внимание, что 'forPrintPreview' является идентификатором div. Функция для печати предпросмотре идет следующим образом:

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(); 
} 

Обратите внимание, что кнопки «Печать» и «отмена» имеет класс CSS «не-принт», поэтому эти кнопки не будут появляться в печати.

 Смежные вопросы

  • Нет связанных вопросов^_^