DIV의 내용을 인쇄하는 가장 좋은 방법은 무엇입니까?
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;
}
mywindow.document.write(data);
이 추가 mywindow.document.write('<script type="text/javascript">$(window).load(function() { window.print(); window.close(); });</script>');
및 제거 : mywindow.print();
와mywindow.close();
더 나은 해결책이 있다고 생각합니다. 인쇄 할 때만 전체 문서를 인쇄하도록 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;
}
}
이것은 @gabe 에 의해 언급 되었지만 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>
편집 : 보관해야 할 양식 데이터가있는 경우 clone은 해당 사본을 복사하지 않으므로 모든 양식 데이터를 가져 와서 복원 후 교체해야합니다.
<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>
el
특히 jQ를 사용했기 때문에 전달한 방식 이 끔찍합니다. 간단히 전달하고 selector
하드 코딩 된 코드를 제거 하는 것이 훨씬 좋습니다.#
el
. 본문이 복원 될 때 인쇄 명령이 전송되는 것 같습니다.
여기에서 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 크롬에서는 작동하지 않습니다.
나는이 줄을 추가 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>
또한 누군가가 ID로 div를 인쇄 해야하는 경우 jquery를로드 할 필요가 없습니다.
여기에 순수한 자바 스크립트 코드가 있습니다.
<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
는 IS div
인쇄하려면.
인쇄 할 내용을 제외한 다른 모든 요소를 숨기는 별도의 인쇄 스타일 시트를 만듭니다. 'media="print"
당신이 그것을로드 할 때 사용하여 플래그 :
<link rel="stylesheet" type="text/css" media="print" href="print.css" />
이렇게하면 출력물에 대해 완전히 다른 스타일 시트를로드 할 수 있습니다.
브라우저의 인쇄 대화 상자가 페이지에 나타나도록하려면 JQuery를 사용하여로드시 다음과 같이 할 수 있습니다.
$(function() { window.print(); });
또는 사용자가 버튼을 클릭하는 등 원하는 다른 이벤트가 발생했을 때 트리거됩니다.
지금까지 제안 된 솔루션에는 다음과 같은 단점이 있다고 생각합니다.
위의 솔루션을 개선했습니다. 다음은 다음과 같은 이점으로 실제로 작동하는 테스트 한 것입니다.
요점 :
<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();
}
CSS
@media print {
.non-printable, .fancybox-outer { display: none; }
.printable, #printDiv {
display: block;
font-size: 26pt;
}
}
@BC 답변이 한 페이지를 인쇄하는 것이 가장 좋지만.
그러나 Ctrl + P를 사용하여 A4 크기의 여러 페이지를 동시에 인쇄하면 다음 해결책이 도움이 될 수 있습니다.
@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;
}}
여기 내 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);
원본 문서의 모든 스타일 (인라인 스타일 포함)을 원한다면이 방법을 사용할 수 있습니다.
이행:
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)
}
}
참고 : 이것은 jQuery 사용 사이트에서만 작동합니다
이 멋진 트릭으로 매우 간단합니다. Chrome 브라우저 에서 나를 위해 일했습니다 . Firefox에서는 플러그인없이 PDF로 인쇄 할 수 없습니다.
var jqchild = document.createElement('script');
jqchild.src = "https://cdnjs.cloudflare.com/ajax/libs/jQuery.print/1.5.1/jQuery.print.min.js";
document.getElementsByTagName('body')[0].appendChild(jqchild);
$("#myDivWithStyles").print(); // Replace ID with yours
논리는 간단합니다. 새 스크립트 태그를 작성하고 닫는 body 태그 앞에 첨부합니다. HTML에 jQuery 인쇄 확장 프로그램을 삽입했습니다. 자신의 Div 태그 ID로 myDivWithStyles 를 변경하십시오 . 이제 인쇄 가능한 가상 창을 준비합니다.
어느 사이트에서나 사용해보십시오. 주의해야 할 점은 가끔 까다로운 CSS만으로 스타일이 누락 될 수 있다는 것입니다. 그러나 우리는 내용을 대부분 얻습니다.
IE 및 Chrome에서 작동하는 IFrame 솔루션은 다음과 같습니다.
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);
}
모든 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();
도움이 되었기를 바랍니다.
querySelector를 사용하고 선택적 CSS를 추가하고 강제 H1 태그를 제거하고 제목을 선택적으로 지정하거나 창에서 가져 오도록 @BillPaetski 응답을 수정했습니다. 또한 더 이상 자동 인쇄하지 않으며 내부를 노출하므로 래퍼 기능이나 원하는대로 전환 할 수 있습니다.
제목, css 및 elem 액세스가 다를 수 있지만 모든 함수 인수가 개인 것으로 가정해야한다고 생각하지만 유일한 두 개인 변수는 tmpWindow 및 tmpDoc입니다.
암호: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();
<input>
요소 의 값을 복사하지 않습니다 . 사용자가 입력 한 내용을 포함하여 이것을 어떻게 사용할 수 있습니까?
<input>
, <select>
, <textarea>
compontents는 런타임 값이 될 수 있습니다. 대안이 있지만이 스크립트에는 문제가 없지만 브라우저 작동 방식에 문제가 innerHTML
있고 입력, 캔버스 등이있는 문서의 속성을 얻는 데 문제가 있습니다 .
.attr('value',)
. 텍스트 영역 (추가)과 확인란 ( .attr('checked',)
)에 대해서도 수행했습니다 . 내가 요구 한 것에 대해 충분히 생각하지 않으면 유감 입니다.
아래 코드는 CSS 선택기를 타겟팅하는 데 사용되는 많은 상위 요소가 없기 때문에 쿼리 선택자가 대상으로하는 모든 관련 노드를 복사하고 화면에 표시된대로 해당 스타일을 복사합니다. 스타일이 많은 자식 노드가 많으면 약간의 지연이 발생합니다.
인쇄 스타일 시트가 준비되어있는 것이 이상적이지만, 삽입 할 인쇄 스타일 시트가없고 화면에 표시된대로 인쇄하려는 사용 사례를위한 것입니다.
이 페이지의 브라우저 콘솔에서 아래 항목을 복사하면이 페이지의 모든 코드 스 니펫이 인쇄됩니다.
+function() {
/**
* copied from /programming/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;
}
load
팝업에 이벤트 가 없습니다 . 그렇지 않으면 이미지가로드되지 않아 빈 페이지가 인쇄됩니다. =>$(popup).load(function(){ popup.focus(); popup.print(); });
가장 좋은 방법은 div의 내용을 서버에 제출하고 서버가 해당 내용을 새 창에 넣을 수있는 새 창을 여는 것입니다.
이것이 옵션이 아닌 경우 javascript와 같은 클라이언트 측 언어를 사용하여 해당 div를 제외한 페이지의 모든 것을 숨기고 페이지를 인쇄하십시오.