Как лучше всего распечатать содержимое DIV?

Небольшие изменения по сравнению с более ранней версией — протестировано на CHROME

function PrintElem(elem)
{
    var mywindow = window.open('', 'PRINT', 'height=400,width=600');

    mywindow.document.write('<html><head><title>'   document.title    '</title>');
    mywindow.document.write('</head><body >');
    mywindow.document.write('<h1>'   document.title    '</h1>');
    mywindow.document.write(document.getElementById(elem).innerHTML);
    mywindow.document.write('</body></html>');

    mywindow.document.close(); // necessary for IE >= 10
    mywindow.focus(); // necessary for IE >= 10*/

    mywindow.print();
    mywindow.close();

    return true;
}

Я думаю, что есть лучшее решение. Сделайте так, чтобы ваш div для печати покрывал весь документ, но только тогда, когда он напечатан:

@media print {
    .myDivToPrint {
        background-color: white;
        height: 100%;
        width: 100%;
        position: fixed;
        top: 0;
        left: 0;
        margin: 0;
        padding: 15px;
        font-size: 14px;
        line-height: 18px;
    }
}

Хотя @ gmcalab сказал это, если вы используете jQuery, вы можете использовать мой плагин printElement.

Существует пример говорится, что и дополнительная информация о плагине говорится, что Глядя на вывод

Использование довольно простое, просто возьмите элемент с селектором jQuery и напечатайте его:

$("myDiv").printElement();

Надеюсь, это поможет!

Используя Jquery, просто используйте эту функцию:

<script>
function printContent(el){
var restorepage = $('body').html();
var printcontent = $('#'   el).clone();
$('body').empty().html(printcontent);
window.print();
$('body').html(restorepage);
}
</script>

Ваша кнопка печати будет выглядеть следующим образом:

<button id="print" onclick="printContent('id name of your div');" >Print</button>

Редактировать: если у вас действительно есть данные формы, которые вам нужно сохранить, клон не скопирует их, поэтому вы просто нужно собрать все данные формы и заменить их после восстановления следующим образом:

<script>
function printContent(el){
var restorepage = $('body').html();
var printcontent = $('#'   el).clone();
var enteredtext = $('#text').val();
$('body').empty().html(printcontent);
window.print();
$('body').html(restorepage);
$('#text').html(enteredtext);
}
</script>
<textarea id="text"></textarea>

Отсюда http://forums.asp.net/t/1261525.aspx

<html>
<head>
<script language="javascript">
function printdiv(printpage)
{
var headstr = "<html><head><title></title></head><body>";
var footstr = "</body>";
var newstr = document.all.item(printpage).innerHTML;
var oldstr = document.body.innerHTML;
document.body.innerHTML = headstr newstr footstr;
window.print();
document.body.innerHTML = oldstr;
return false;
}
</script>
<title>div print</title>
</head>


<body>
//HTML Page
//Other content you wouldn't like to print
<input name="b_print" type="button" class="ipt"   onClick="printdiv('div_print');" value=" Print ">


<div id="div_print">


<h1 style="Color:Red">The Div content which you want to print</h1>


</div>
//Other content you wouldn't like to print
//Other content you wouldn't like to print
</body>


</html>

Я использовал Bill Paetzke ответ на печать Div содержит изображения, но он не работает с Google Chrome

, мне просто нужно было добавить эта строка myWindow.onload=function(){, чтобы сделать это работать и вот полный код

<html>
<head>
    <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.1.min.js"> </script>
    <script type="text/javascript">
        function PrintElem(elem) {
            Popup($(elem).html());
        }

        function Popup(data) {
            var myWindow = window.open('', 'my div', 'height=400,width=600');
            myWindow.document.write('<html><head><title>my div</title>');
            /*optional stylesheet*/ //myWindow.document.write('<link rel="stylesheet" href="main.css" type="text/css" />');
            myWindow.document.write('</head><body >');
            myWindow.document.write(data);
            myWindow.document.write('</body></html>');
            myWindow.document.close(); // necessary for IE >= 10

            myWindow.onload=function(){ // necessary if the div contain images

                myWindow.focus(); // necessary for IE >= 10
                myWindow.print();
                myWindow.close();
            };
        }
    </script>
</head>
<body>
    <div id="myDiv">
        This will be printed.
        <img src="image.jpg"/>
    </div>
    <div>
        This will not be printed.
    </div>
    <div id="anotherDiv">
        Nor will this.
    </div>
    <input type="button" value="Print Div" onclick="PrintElem('#myDiv')" />
</body>
</html>

функцию высшего порядка. На этот раз мы обертываем

вот чистый код javascript, чтобы сделать это

<html>
<head>
    <script type="text/javascript">
        function PrintDiv(id) {
            var data=document.getElementById(id).innerHTML;
            var myWindow = window.open('', 'my div', 'height=400,width=600');
            myWindow.document.write('<html><head><title>my div</title>');
            /*optional stylesheet*/ //myWindow.document.write('<link rel="stylesheet" href="main.css" type="text/css" />');
            myWindow.document.write('</head><body >');
            myWindow.document.write(data);
            myWindow.document.write('</body></html>');
            myWindow.document.close(); // necessary for IE >= 10

            myWindow.onload=function(){ // necessary if the div contain images

                myWindow.focus(); // necessary for IE >= 10
                myWindow.print();
                myWindow.close();
            };
        }
    </script>
</head>
<body>
    <div id="myDiv">
        This will be printed.
        <img src="image.jpg"/>
    </div>
    <div>
        This will not be printed.
    </div>
    <div id="anotherDiv">
        Nor will this.
    </div>
    <input type="button" value="Print Div" onclick="PrintDiv('myDiv')" />
</body>
</html>

я надеюсь, что это может кому-то помочь

function printdiv(printdivname)
{
var headstr = "<html><head><title>Booking Details</title></head><body>";
var footstr = "</body>";
var newstr = document.getElementById(printdivname).innerHTML;
var oldstr = document.body.innerHTML;
document.body.innerHTML = headstr newstr footstr;
window.print();
document.body.innerHTML = oldstr;
return false;
}

Это напечатает область div, которую вы хотите, и вернет содержимое обратно, как было. printdivname это div для печати.

Создайте отдельную таблицу стилей печати, которая скрывает все остальные элементы, кроме содержимого, которое вы хотите распечатать. Отметьте его, используя 'media="print" при загрузке:

<link rel="stylesheet" type="text/css" media="print" href="print.css" />

Это позволит вам загрузить совершенно другую таблицу стилей для распечаток.

Если вы хотите, чтобы диалоговое окно печати браузера отображалось для страницы, вы можете сделать это при загрузке с помощью JQuery:

$(function() { window.print(); });

или вызванное любое другое событие, например, нажатие пользователем кнопки.

Я создал плагин для решения этого сценария. Я был недоволен плагинами и решил сделать что-то более обширное / настраиваемое.

https://github.com/jasonday/printThis

Я думаю, что предлагаемые решения имеют следующие недостатки:

  1. Решения для медиа-запросов CSS предполагают, что для печати требуется только один div.
  2. Решения javascript работают только в определенных браузерах.
  3. Уничтожение содержимого родительского окна и воссоздание, которое создает беспорядок.

Я улучшил решения выше. Вот кое-что, что я протестировал, которое действительно хорошо работает со следующими преимуществами.

  1. Работает во всех браузерах, включая IE, Chrome, Safari и Firefox.
  2. Не разрушает и не перезагружает родительское окно.
  3. Может печатать любое количество DIV на странице.
  4. Использует HTML-шаблоны, чтобы избежать склонной к ошибкам конкатенации строк.

Ключевые моменты, на которые следует обратить внимание:

  1. Должен иметь onload = «window.print ()» во вновь созданном окне.
  2. Не вызывайте targetwindow.close () или targetwindow.print () из родительского объекта.
  3. Убедитесь, что вы выполняете targetwindow.document.close () и target.focus ()
  4. Я использую jquery, но вы можете сделать ту же технику, используя обычный javascript.
  5. adOpenForwardOnly http://math.tools/table/multiplication . Вы можете распечатать каждую таблицу отдельно, нажав на кнопку печати в заголовке окна.
<script id="print-header" type="text/x-jquery-tmpl">
   <html>
   <header>
       <title>Printing Para {num}</title>
       <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
       <style>
          body {
            max-width: 300px;
          }
       </style>
   </header>
   <body onload="window.print()">
   <h2>Printing Para {num} </h2>
   <h4>http://math.tools</h4>
</script>
<script id="print-footer" type="text/x-jquery-tmpl">
    </body>
    </html>
</script>
<script>
$('.printthis').click(function() {
   num = $(this).attr("data-id");
   w = window.open();
   w.document.write(
                   $("#print-header").html().replace("{num}",num)   
                   $("#para-"   num).html()  
                   $("#print-footer").html() 
                   );
   w.document.close();
   w.focus();
   //w.print(); Don't do this otherwise chrome won't work. Look at the onload on the body of the newly created window.
   ///w.close(); Don't do this otherwise chrome won't work
});
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<a class="btn printthis" data-id="1" href="#" title="Print Para 1"><i class="fa fa-print"></i> Print Para 1</a>
<a class="btn printthis" data-id="2" href="#" title="Print Para 2"><i class="fa fa-print"></i> Print Para 2</a>
  
<p class="para" id="para-1">
  Para 1 : Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
  

<p class="para" id="para-2">
  Para 2 : Lorem 2 ipsum 2 dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
  

Принятое решение не работает. Chrome печатал пустую страницу, потому что не загружал изображение вовремя. Этот подход работает:

Редактировать: кажется, что принятое решение было изменено после моего поста. Почему отрицательный голос? Это решение работает также.

    function printDiv(divName) {

        var printContents = document.getElementById(divName).innerHTML;
        w = window.open();

        w.document.write(printContents);
        w.document.write('<scr'   'ipt type="text/javascript">'   'window.onload = function() { window.print(); window.close(); };'   '</sc'   'ript>');

        w.document.close(); // necessary for IE >= 10
        w.focus(); // necessary for IE >= 10

        return true;
    }

Я знаю, что это старый вопрос, но я решил эту проблему с помощью jQuery.

function printContents(id)
{
    var contents = $("#" id).html();

    if ($("#printDiv").length == 0)
    {
    var printDiv = null;
    printDiv = document.createElement('div');
    printDiv.setAttribute('id','printDiv');
    printDiv.setAttribute('class','printable');
    $(printDiv).appendTo('body');
    }

    $("#printDiv").html(contents);

    window.print();

    $("#printDiv").remove();


}

https://developers.google.com/web/updates/2018/03/clipboardapi

  @media print {
    .non-printable, .fancybox-outer { display: none; }
    .printable, #printDiv { 
        display: block; 
        font-size: 26pt;
    }
  }

Хотя ответ @BC был лучшим, чтобы напечатать одну страницу.

Но для одновременной печати нескольких страниц формата A4 с помощью ctrl P может помочь следующее решение.

@media print{
html *{
    height:0px!important;
    width:0px !important;
    margin: 0px !important;
    padding: 0px !important;
    min-height: 0px !important;
    line-height: 0px !important;
    overflow: visible !important;
    visibility: hidden ;


}


/*assing myPagesClass to every div you want to print on single separate A4 page*/

 body .myPagesClass {
    z-index: 100 !important;
    visibility: visible !important;
    position: relative !important;
    display: block !important;
    background-color: lightgray !important;
    height: 297mm !important;
    width: 211mm !important;
    position: relative !important;

    padding: 0px;
    top: 0 !important;
    left: 0 !important;
    margin: 0 !important;
    orphans: 0!important;
    widows: 0!important;
    overflow: visible !important;
    page-break-after: always;

}
@page{
    size: A4;
    margin: 0mm ;
    orphans: 0!important;
    widows: 0!important;
}}
  • Открыть новое окно
  • Откройте объект документа нового окна и запишите в него простой документ, в котором нет ничего, кроме полученного div, необходимого заголовка html и т. Д. — вы также можете захотеть, чтобы документ извлекался в таблице стилей, в зависимости от вашего содержимого is
  • Поместите скрипт на новую страницу для вызова window.print ()
  • Запустите скрипт

Вот мой плагин для печати jquery

(function ($) {

$.fn.printme = function () {
    return this.each(function () {
        var container = $(this);

        var hidden_IFrame = $('<iframe></iframe>').attr({
            width: '1px',
            height: '1px',
            display: 'none'
        }).appendTo(container);

        var myIframe = hidden_IFrame.get(0);

        var script_tag = myIframe.contentWindow.document.createElement("script");
        script_tag.type = "text/javascript";
        script = myIframe.contentWindow.document.createTextNode('function Print(){ window.print(); }');
        script_tag.appendChild(script);

        myIframe.contentWindow.document.body.innerHTML = container.html();
        myIframe.contentWindow.document.body.appendChild(script_tag);

        myIframe.contentWindow.Print();
        hidden_IFrame.remove();

    });
};
})(jQuery);

В Opera попробуйте:

    print_win.document.write('</body></html>');
    print_win.document.close(); // This bit is important
    print_win.print();
    print_win.close();

Вот решение IFrame, которое работает для IE и Chrome:

function printHTML(htmlString) {
    var newIframe = document.createElement('iframe');
    newIframe.width = '1px';
    newIframe.height = '1px';
    newIframe.src = 'about:blank';

    // for IE wait for the IFrame to load so we can access contentWindow.document.body
    newIframe.onload = function() {
        var script_tag = newIframe.contentWindow.document.createElement("script");
        script_tag.type = "text/javascript";
        var script = newIframe.contentWindow.document.createTextNode('function Print(){ window.focus(); window.print(); }');
        script_tag.appendChild(script);

        newIframe.contentWindow.document.body.innerHTML = htmlString;
        newIframe.contentWindow.document.body.appendChild(script_tag);

        // for chrome, a timeout for loading large amounts of content
        setTimeout(function() {
            newIframe.contentWindow.Print();
            newIframe.contentWindow.document.body.removeChild(script_tag);
            newIframe.parentElement.removeChild(newIframe);
        }, 200);
    };
    document.body.appendChild(newIframe);
}

Я изменил ответ @BillPaetski, чтобы использовать querySelector, добавить необязательный CSS, удалить принудительный тег H1 и сделать заголовок необязательно указанным или извлеченным из окна. Кроме того, он больше не выполняет автоматическую печать и предоставляет доступ к внутренним компонентам, чтобы их можно было переключать в функции-обертки или по своему усмотрению.

Единственные две приватные переменные — это tmpWindow и tmpDoc, хотя я считаю, что доступ title, css и elem может различаться, следует полагать, что все аргументы функции являются закрытыми.

Код:

function PrintElem(elem, title, css) {
    var tmpWindow = window.open('', 'PRINT', 'height=400,width=600');
    var tmpDoc = tmpWindow.document;

    title = title || document.title;
    css = css || "";

    this.setTitle = function(newTitle) {
        title = newTitle || document.title;
    };

    this.setCSS = function(newCSS) {
        css = newCSS || "";
    };

    this.basicHtml5 = function(innerHTML) {
        return '<!doctype html><html>' (innerHTML || "") '</html>';
    };

    this.htmlHead = function(innerHTML) {
        return '<head>' (innerHTML || "") '</head>';
    };

    this.htmlTitle = function(title) {
        return '<title>' (title || "") '</title>';
    };

    this.styleTag = function(innerHTML) {
        return '<style>' (innerHTML || "") '</style>';
    };

    this.htmlBody = function(innerHTML) {
        return '<body>' (innerHTML || "") '</body>';
    };

    this.build = function() {
        tmpDoc.write(
            this.basicHtml5(
                this.htmlHead(
                    this.htmlTitle(title)   this.styleTag(css)
                )   this.htmlBody(
                    document.querySelector(elem).innerHTML
                )
            )
        );
        tmpDoc.close(); // necessary for IE >= 10
    };

    this.print = function() {
        tmpWindow.focus(); // necessary for IE >= 10*/
        tmpWindow.print();
        tmpWindow.close();
    };

    this.build();
    return this;
}

Использование:

DOMPrinter = PrintElem('#app-container');
DOMPrinter.print();

Примечание: для классов и

С этим классным приемом все очень просто. У меня это работало в браузере Google Chrome . Firefox не позволит вам печатать в PDF без плагина.

  1. Сначала откройте инспектор, используя (Ctrl Shift I) / (Cmd Option I).
  2. Введите этот код в консоли

var jq = document.createElement('script');

jq.src = "https://cdnjs.cloudflare.com/ajax/libs/jQuery.print/1.5.1/jQuery.print.min.js";

document.getElementsByTagName('body')[0].appendChild(jq)

$("#myDivWithStyles").print() // Replace ID with yours
  1. Запускает диалог печати. Возьмите физический отпечаток или сохраните его в PDF (в хром). Готово!

Логика проста. Мы создаем новый тег сценария и прикрепляем его перед закрывающим тегом тела. Мы ввели расширение для печати jQuery в HTML. Измените myDivWithStyles на свой собственный идентификатор тега Div. Теперь он занимается подготовкой печатного виртуального окна.

Попробуйте на любом сайте. Только предостережение иногда хитро написанного CSS может привести к отсутствию стилей. Но мы получаем контент в большинстве случаев.

Если вы хотите получить все стили из исходного документа (включая встроенные стили), вы можете использовать этот подход.

  1. Скопируйте полный документ
  2. Замените тело на элемент, который вы хотите напечатать.

Реализация:

class PrintUtil {
  static printDiv(elementId) {
    let printElement = document.getElementById(elementId);
    var printWindow = window.open('', 'PRINT');
    printWindow.document.write(document.documentElement.innerHTML);
    setTimeout(() => { // Needed for large documents
      printWindow.document.body.style.margin = '0 0';
      printWindow.document.body.innerHTML = printElement.outerHTML;
      printWindow.document.close(); // necessary for IE >= 10
      printWindow.focus(); // necessary for IE >= 10*/
      printWindow.print();
      printWindow.close();
    }, 1000)
  }   
}

Создано что-то общее для использования с любым элементом HTML

HTMLElement.prototype.printMe = printMe;
function printMe(query){             
     var myframe = document.createElement('IFRAME');
     myframe.domain = document.domain;
     myframe.style.position = "absolute";
     myframe.style.top = "-10000px";
     document.body.appendChild(myframe);
     myframe.contentDocument.write(this.innerHTML) ;
     setTimeout(function(){
        myframe.focus();
        myframe.contentWindow.print();
        myframe.parentNode.removeChild(myframe) ;// remove frame
     },3000); // wait for images to load inside iframe
     window.focus();
}
//usage
document.getElementById('xyz').printMe();
document.getElementsByClassName('xyz')[0].printMe();

Надеюсь, это поможет.

Код ниже копирует все соответствующие узлы, на которые нацеливает селектор запросов, копирует их стили, как видно на экране, так как многие родительские элементы, используемые для нацеливания на селекторы css, будут отсутствовать. Это вызывает некоторую задержку, если есть много дочерних узлов с большим количеством стилей.

В идеале у вас должна быть готовая таблица стилей печати, но это в тех случаях, когда нет таблицы стилей печати, которую нужно вставить, и вы хотите печатать, как видно на экране.

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

 function() {
    /**
     * copied from  https://stackoverflow.com/questions/19784064/set-javascript-computed-style-from-one-element-to-another
     * @author Adi Darachi https://stackoverflow.com/users/2318881/adi-darachi
     */
    var copyComputedStyle = function(from,to){
        var computed_style_object = false;
        //trying to figure out which style object we need to use depense on the browser support
        //so we try until we have one
        computed_style_object = from.currentStyle || document.defaultView.getComputedStyle(from,null);

        //if the browser dose not support both methods we will return null
        if(!computed_style_object) return null;

            var stylePropertyValid = function(name,value){
                        //checking that the value is not a undefined
                return typeof value !== 'undefined' &&
                        //checking that the value is not a object
                        typeof value !== 'object' &&
                        //checking that the value is not a function
                        typeof value !== 'function' &&
                        //checking that we dosent have empty string
                        value.length > 0 &&
                        //checking that the property is not int index ( happens on some browser
                        value != parseInt(value)

            };

        //we iterating the computed style object and compy the style props and the values
        for(property in computed_style_object)
        {
            //checking if the property and value we get are valid sinse browser have different implementations
                if(stylePropertyValid(property,computed_style_object[property]))
                {
                    //applying the style property to the target element
                        to.style[property] = computed_style_object[property];

                }   
        }   

    };


    // Copy over all relevant styles to preserve styling, work the way down the children tree.
    var buildChild = function(masterList, childList) {
        for(c=0; c<masterList.length; c  ) {
           var master = masterList[c];
           var child = childList[c];
           copyComputedStyle(master, child);
           if(master.children && master.children.length > 0) {
               buildChild(master.children, child.children);
           }
        }
    }

    /** select elements to print with query selector **/
    var printSelection = function(querySelector) {
        // Create an iframe to make sure everything is clean and ordered.
        var iframe = document.createElement('iframe');
        // Give it enough dimension so you can visually check when modifying.
        iframe.width = document.width;
        iframe.height = document.height;
        // Add it to the current document to be sure it has the internal objects set up.
        document.body.append(iframe);

        var nodes = document.querySelectorAll(querySelector);
        if(!nodes || nodes.length == 0) {
           console.error('Printing Faillure: Nothing to print. Please check your querySelector');
           return;
        }

        for(i=0; i < nodes.length; i  ) {

            // Get the node you wish to print.
            var origNode = nodes[i];

            // Clone it and all it's children
            var node = origNode.cloneNode(true);

            // Copy the base style.
            copyComputedStyle(origNode, node);

            if(origNode.children && origNode.children.length > 0) {
                buildChild(origNode.children, node.children);
            }

            // Add the styled clone to the iframe. using contentWindow.document since it seems the be the most widely supported version.

            iframe.contentWindow.document.body.append(node);
        }
        // Print the window
        iframe.contentWindow.print();

        // Give the browser a second to gather the data then remove the iframe.
        window.setTimeout(function() {iframe.parentNode.removeChild(iframe)}, 1000);
    }
window.printSelection = printSelection;
}();
printSelection('.default.prettyprint.prettyprinted')

Это действительно старый пост, но вот одно из моих обновлений, которое я сделал, используя правильный ответ. Мое решение также использовать JQuery.

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

function PrintElem(elem, title, offset)
{
    // Title constructor
    title = title || $('title').text();
    // Offset for the print
    offset = offset || 0;

    // Loading start
    var dStart = Math.round(new Date().getTime()/1000),
        $html = $('html');
        i = 0;

    // Start building HTML
    var HTML = '<html';

    if(typeof ($html.attr('lang')) !== 'undefined') {
        HTML =' lang='   $html.attr('lang');
    }

    if(typeof ($html.attr('id')) !== 'undefined') {
        HTML =' id='   $html.attr('id');
    }

    if(typeof ($html.attr('xmlns')) !== 'undefined') {
        HTML =' xmlns='   $html.attr('xmlns');
    }

    // Close HTML and start build HEAD
    HTML ='><head>';

    // Get all meta tags
    $('head > meta').each(function(){
        var $this = $(this),
            $meta = '<meta';

        if(typeof ($this.attr('charset')) !== 'undefined') {
            $meta =' charset='   $this.attr('charset');
        }

        if(typeof ($this.attr('name')) !== 'undefined') {
            $meta =' name='   $this.attr('name');
        }

        if(typeof ($this.attr('http-equiv')) !== 'undefined') {
            $meta =' http-equiv='   $this.attr('http-equiv');
        }

        if(typeof ($this.attr('content')) !== 'undefined') {
            $meta =' content='   $this.attr('content');
        }

        $meta =' />';

        HTML = $meta;
        i  ;

    }).promise().done(function(){

        // Insert title
        HTML = '<title>'   title    '</title>';

        // Let's pickup all CSS files for the formatting
        $('head > link[rel="stylesheet"]').each(function(){
            HTML = '<link rel="stylesheet" href="'   $(this).attr('href')   '" />';
            i  ;
        }).promise().done(function(){
            // Print setup
            HTML = '<style>body{display:none;}@media print{body{display:block;}}</style>';

            // Finish HTML
            HTML = '</head><body>';
            HTML = '<h1 class="text-center mb-3">'   title    '</h1>';
            HTML = elem.html();
            HTML = '</body></html>';

            // Open new window
            var printWindow = window.open('', 'PRINT', 'height='   $(window).height()   ',width='   $(window).width());
            // Append new window HTML
            printWindow.document.write(HTML);

            printWindow.document.close(); // necessary for IE >= 10
            printWindow.focus(); // necessary for IE >= 10*/
console.log(printWindow.document);
            /* Make sure that page is loaded correctly */
            $(printWindow).on('load', function(){                   
                setTimeout(function(){
                    // Open print
                    printWindow.print();

                    // Close on print
                    setTimeout(function(){
                        printWindow.close();
                        return true;
                    }, 3);

                }, (Math.round(new Date().getTime()/1000) - dStart) i offset);
            });
        });
    });
}

Позже вам просто нужно что-то вроде этого:

$(document).on('click', '.some-print', function() {
    PrintElem($(this), 'My Print Title');
    return false;
});

Попробуйте.

То же, что лучший ответ, на тот случай, если вам нужно напечатать изображение, как я:

Если вы хотите напечатать изображение:

function printElem(elem)
    {
        Popup(jQuery(elem).attr('src'));
    }

    function Popup(data) 
    {
        var mywindow = window.open('', 'my div', 'height=400,width=600');
        mywindow.document.write('<html><head><title>my div</title>');
        mywindow.document.write('</head><body >');
        mywindow.document.write('<img src="' data '" />');
        mywindow.document.write('</body></html>');

        mywindow.print();
        mywindow.close();

        return true;
    }

Лучший способ сделать это — отправить содержимое div в сервер и откройте новое окно, где сервер может поместить это содержимое в новом окне.

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