打印 DIV 的内容

IT技术 javascript jquery html printing
2021-01-16 10:36:05

打印 DIV 内容的最佳方法是什么?

6个回答

与早期版本相比略有变化 - 在 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;
}
^ 添加 newwindow.focus(); 启用跨浏览器打印。
2021-03-13 10:36:05
如果无法加载打印预览,有时会发生这种情况,可能是当要打印的内容很大时(我只注意到 Chrome 的情况,而同一页面在 Firefox 中打印完美,但我不排除它也可能发生在 Firefox 或其他浏览器中)。我发现的最好方法是仅在加载 Windows 后运行打印(并关闭)。所以之后:mywindow.document.write(data);添加这个:mywindow.document.write('<script type="text/javascript">$(window).load(function() { window.print(); window.close(); });</script>');并删除:mywindow.print();mywindow.close();
2021-03-31 10:36:05
这是一个快速的解决方案。理想的解决方案是使用单独的 CSS 进行打印。也许您可以详细说明问题的详细信息(要求)。
2021-04-01 10:36:05
@Rahil 将其更改为:mywindow.document.close(); mywindow.focus(); mywindow.print(); mywindow.close();
2021-04-04 10:36:05
您可以在弹出窗口中引用样式表。在 <head> 标签之间添加另一行代码: mywindow.document.write('<link rel="stylesheet" href="main.css" type="text/css" />');
2021-04-06 10:36:05

我认为有更好的解决方案。使您的 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;
    }
}
不幸的是,它不会像预期的那样在 IE 中工作,请参阅:stackoverflow.com/questions/975129/...
2021-03-12 10:36:05
完美,比弹出窗口好得多。
2021-03-26 10:36:05
你可能需要把 z-index: 9999999; 如果您有其他元素位于更高的位置。
2021-03-30 10:36:05
应该溢出到多个页面的内容似乎在 Chrome 中被截断了。
2021-03-31 10:36:05
在 IE 上,您需要隐藏文档的其余部分。修改上面的内容如下:@media print { body * { display:none; } .myDivToPrint { 显示:块;背景颜色:白色;高度:100%;宽度:100%;位置:固定;顶部:0;左:0;边距:0;填充:15px;字体大小:14px;行高:18px;} }
2021-04-02 10:36:05

虽然@gabe已经说过了,但如果您使用的是 jQuery,则可以使用我的printElement插件。

有一个样品在这里,和有关该插件的详细信息在这里

用法相当简单,只需使用 jQuery 选择器抓取一个元素并打印它:

$("#myDiv").printElement();

我希望它有帮助!

我的 printElement 未定义
2021-03-14 10:36:05
8 年后,这将产生“a.browser 未定义”,因为 .browser 调用已在 jquery 1.9 中删除
2021-03-23 10:36:05

使用 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>
这个更好。它包括打印时的页面设计,与上面提到的不同,我仍然需要从标题等中放置 css 链接。谢谢!
2021-03-19 10:36:05
$('body').html(restorepage); 将无法工作,因为当时没有可用的 body 元素。因此最好用 location.reload() 替换它;
2021-03-20 10:36:05
不会。如果您重新加载页面,您将删除表单中的任何信息,或可能需要存在的任何其他设置。它工作得很好。如果您花时间查看代码,您将看到 var restorepage 确实具有可用于进行替换的所有页面信息。停止尝试编辑我的代码,要么自己测试,要么学习函数的每个部分的作用。
2021-03-21 10:36:05
我今天总是使用这种方法我注意到它在 android 设备(谷歌浏览器)上不能正常工作。页面的可打印区域每次都会发生变化,并且包含一些额外的部分el我认为打印命令是在恢复身体时发送的。
2021-03-23 10:36:05
你通过的方式el很糟糕,尤其是因为使用 jQ。简单地通过selector并摆脱硬编码要好得多#
2021-04-04 10:36:05

从这里https://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>
需要进行修改才能将 footerStr 拆分为 2 部分。因为 brwoser 使用“</body>”作为当前页面的主要结尾。var footstr1 = "</"; var footstr2 = "body>"; var footstr=footstr1 +footstr12;
2021-03-23 10:36:05