2016-08-24 2 views
0

У меня есть две функции для печати element и распечатать pageпечать другой страницы с помощью JQuery

function printPage(page,redirect,dontPrint=false) 
{ 
    if($('.printThis').length == 0) 
    { 
     $('body').append('<div class="printThis hide"></div>'); 
    } 
    $('.printThis').load(page,function(){ 
     printContent($('.printThis'),redirect,dontPrint); 
     $('.printThis').remove(); 
    }); 
} 

function printContent(div_id,redirect,dontPrint=false) 
{ 
    var DocumentContainer = div_id.html(); 
    var html = '<html><head>'+ 
        '<link href="'+tmpl+'assets/css/print.css" rel="stylesheet" type="text/css" />'+ 
        '</head><body style="background:#ffffff;">'+ 
        DocumentContainer+ 
        '</body></html>'; 
    var WindowObject = window.open("", "PrintWindow", 
    "width=750,height=650,top=50,left=50,toolbars=no,scrollbars=yes,status=no,resizable=yes"); 
    WindowObject.document.write(html); 
    WindowObject.document.close(); 
    WindowObject.focus(); 
    setTimeout(function() { 
     if(!dontPrint) 
     { 
      WindowObject.print(); 
      WindowObject.close(); 
     } 
     if(redirect) 
     window.location.assign(redirect); 
    }, 50); 
} 

образуют любую страницу я поставить кнопку с функцией вкл Нажмите, чтобы распечатать страницу

<button class="btn btn-primary btn-xs" onclick="printPage('/myproject/prints/bill/sales/5','')">Print Bill</button> 

когда пользователь нажимает кнопка для first time это всплывающее окно blank page !!!! в любое время, когда он нажимает кнопку снова, он отлично работает

Вы можете помочь?

ответ

1

Чтобы решить проблему, нужно добавить этот в HTML-код для печати:

<script> 
    window.onload = function(){ 
     window.print(); 
    } 
</script> 

Это запустит процесс печати, как только содержание все загружается и отображается. Больше никаких тайм-аутов!


Вне пределов вашего ответа:

DO NOT использовать всплывающие окна (строку, которая говорит window.open). Множество людей блокирует их (я глубоко благодарю тех, кто изобрел блокировщики всплывающих окон), и это может даже не работать вообще на некоторых устройствах.

Что вы можете сделать, так это создать и выгрузить его.

Сорта, как это:

<a href="/myproject/prints/bill/sales/5" target="print" class="btn btn-primary btn-xs">Print Bill</button> 
<iframe id="print" name="print" style="display:none;"></iframe> 

При нажатии на ссылку, он будет открывать страницу внутри . Поскольку вы генерируете вывод , вы можете добавить указанный код javascript к выходу.

Это сэкономит вам массу усилий и будет максимально совместимым. Не говоря уже легко!

-2

Хорошо, я нашел мою проблему

это было время моей страницы полной загрузки, поэтому я увеличить задержку до 700 он работает отлично спасибо

+0

Почему так? Вы можете просто добавить '' в ваш iframe, и он работает. –

+0

Избегайте использования тайм-аутов, подобных этому: у пользователей есть разные типы соединений. Используйте функцию «onload», чтобы выполнить то, что вы ищете. – FrankerZ

+0

Как использовать функцию 'onload' с' .load', я вызываю другую страницу? и 'no iframe' –

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