Как печатать HTML-контент одним нажатием кнопки, но не страницей?
Я хочу напечатать некоторый HTML-контент, когда пользователь нажимает кнопку. Как только пользователь нажмет на эту кнопку, откроется диалоговое окно печати браузера, но он не распечатает веб-страницу. Вместо этого он распечатает другой контент HTML, который не отображается на странице.
При задании этого вопроса мне приходит в голову несколько решений. Но я не уверен, что это хорошие идеи или что-то лучше. Одним из таких решений является:
Я могу сохранить этот HTML-контент в div и сделать его display:
для печати, но display: none
для отображения. Все остальные элементы веб-страницы можно сделать для display: none
для печати и display:
для экрана. Затем нажмите на печать.
Любая лучшая идея?
Ответы
Ответ 1
Я столкнулся с другим элегантным решением для этого:
Поместите свою часть для печати внутри div с таким идентификатором:
<div id="printableArea">
<h1>Print me</h1>
</div>
<input type="button" onclick="printDiv('printableArea')" value="print a div!" />
Теперь создайте действительно простой javascript:
function printDiv(divName) {
var printContents = document.getElementById(divName).innerHTML;
var originalContents = document.body.innerHTML;
document.body.innerHTML = printContents;
window.print();
document.body.innerHTML = originalContents;
}
ИСТОЧНИК: SO ответ
Ответ 2
Вот чистая версия css
.example-print {
display: none;
}
@media print {
.example-screen {
display: none;
}
.example-print {
display: block;
}
}
<div class="example-screen">You only see me in the browser</div>
<div class="example-print">You only see me in the print</div>
Ответ 3
В соответствии с этой ссылкой SO вы можете напечатать определенный div с помощью
w=window.open();
w.document.write(document.getElementsByClassName('report_left_inner')[0].innerHTML);
w.print();
w.close();
Ответ 4
Я хочу видеть это
Пример http://jsfiddle.net/35vAN/
<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.print();
mywindow.close();
return true;
}
</script>
</head>
<body>
<div id="mydiv">
This will be printed. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a quam at nibh adipiscing interdum. Nulla vitae accumsan ante.
</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>
Ответ 5
Ниже код может помочь вам:
<html>
<head>
<script>
function printPage(id)
{
var html="<html>";
html+= document.getElementById(id).innerHTML;
html+="</html>";
var printWin = window.open('','','left=0,top=0,width=1,height=1,toolbar=0,scrollbars=0,status =0');
printWin.document.write(html);
printWin.document.close();
printWin.focus();
printWin.print();
printWin.close();
}
</script>
</head>
<body>
<div id="block1">
<table border="1" >
</tr>
<th colspan="3">Block 1</th>
</tr>
<tr>
<th>1</th><th>XYZ</th><th>athock</th>
</tr>
</table>
</div>
<div id="block2">
This is Block 2 content
</div>
<input type="button" value="Print Block 1" onclick="printPage('block1');"></input>
<input type="button" value="Print Block 2" onclick="printPage('block2');"></input>
</body>
</html>
Ответ 6
Если вы добавите и удалите innerHTML, все javascript, css и другие будут загружены дважды, а события будут срабатывать дважды (это случилось со мной), лучше скрыть контент, используя jQuery и css, как это:
function printDiv(selector) {
$('body .site-container').css({display:'none'});
var content = $(selector).clone();
$('body .site-container').before(content);
window.print();
$(selector).first().remove();
$('body .site-container').css({display:''});
}
div-site-container содержит весь сайт, поэтому вы можете вызвать функцию, например:
printDiv('.someDiv');