You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET项目jQuery打印图片:移除页眉页脚及每页多图实现问询

问题:ASP.NET项目中通过jQuery/CSS控制打印页眉页脚及每页图片数量

我正在开发一个ASP.NET项目,当前页面需要打印图片,已使用jQuery实现打印功能,代码如下:

function VoucherSourcetoPrint(source) { 
    var width = $("#imgWidth").val(); 
    var height = $("#imgHeight").val(); 
    return "<html><head><script>function step1(){\n" + 
        "setTimeout('step2()', 10);}\n" + 
        "function step2(){window.print();window.close()}" + 
        "\n<\/script></head><body onload='step1()'>\n" + 
        "<img src='" + source + "' style='width: " + width + "px; height: " + height + "px;' /></body></html>"; 
} 
function VoucherPrint(source) { 
    source = $('#imgCtrl').attr('src'); 
    Pagelink = "about:blank"; 
    var pwa = window.open(Pagelink, "_new"); 
    pwa.document.open(); 
    pwa.document.write(VoucherSourcetoPrint(source)); 
    pwa.document.close(); 
}

如代码所示,图片宽高取自文本框,调用VoucherPrint函数后会弹出打印对话框。我希望实现:通过代码移除打印页眉页脚,以及设置每页打印的图片数量,请问能否通过jQuery或CSS实现?


嘿,这两个需求都可以通过**CSS的打印媒体查询(@media print)**来实现,配合你现有的jQuery代码就能搞定,我给你一步步拆解:

一、移除打印页眉页脚

浏览器默认的打印页眉页脚(比如页码、网址)没办法完全通过JS强制移除,但可以用CSS来隐藏它们,同时设置打印区域的边距为0,让内容占满页面。你需要在生成的打印页面的<head>里添加打印专属样式:

修改你的VoucherSourcetoPrint函数,在<head>里插入<style>标签:

function VoucherSourcetoPrint(source) { 
    var width = $("#imgWidth").val(); 
    var height = $("#imgHeight").val(); 
    // 添加打印样式
    var printStyles = "&lt;style&gt;" +
        "@media print {" +
            "/* 隐藏浏览器默认页眉页脚 */" +
            "@page {" +
                "size: auto;" +
                "margin: 0mm;" + // 设为0边距,覆盖默认页眉页脚空间
            "}" +
            "body {" +
                "margin: 10mm;" + // 给内容加一点内边距,避免贴边
            "}" +
            "/* 针对Chrome等webkit内核浏览器的额外处理 */" +
            "header, footer { display: none !important; }" +
        "}" +
        "&lt;/style&gt;";

    return "&lt;html&gt;&lt;head&gt;" + printStyles + "&lt;script&gt;function step1(){\n" + 
        "setTimeout('step2()', 10);}\n" + 
        "function step2(){window.print();window.close()}" + 
        "\n&lt;\/script&gt;&lt;/head&gt;&lt;body onload='step1()'&gt;\n" + 
        "&lt;img src='" + source + "' style='width: " + width + "px; height: " + height + "px;' /&gt;&lt;/body&gt;&lt;/html&gt;"; 
}

注意:不同浏览器的表现略有差异,比如Firefox可能需要用户在打印设置里手动关闭“页眉和页脚”,但上述CSS已经能覆盖大部分场景,让内容不会被默认页眉页脚遮挡。

二、设置每页打印的图片数量

这个可以通过CSS的分页属性和**布局(Grid/Flex)**来实现,比如你想每页打印2张图片:

  1. 首先,假设你现在要打印多张图片(如果是单张的话,先调整代码循环生成img标签),然后在打印样式里添加布局和分页规则:

修改VoucherSourcetoPrint函数里的printStyles,加上布局和分页控制:

var printStyles = "&lt;style&gt;" +
    "@media print {" +
        "@page {" +
            "size: auto;" +
            "margin: 0mm;" +
        "}" +
        "body {" +
            "margin: 10mm;" +
            "display: grid;" +
            "grid-template-columns: 1fr;" + // 单列布局,每页2张的话设为1fr,然后控制行数
            "grid-auto-rows: auto;" +
            "gap: 10mm;" + // 图片之间的间距
        "}" +
        ".print-img {" +
            "width: " + width + "px;" +
            "height: " + height + "px;" +
            "page-break-inside: avoid;" + // 避免图片被分页截断
        "}" +
        /* 每2张图片后强制分页 */
        ".print-img:nth-child(2n) {" +
            "page-break-after: always;" +
        "}" +
        "header, footer { display: none !important; }" +
    "}" +
    "&lt;/style&gt;";
  1. 然后,如果你要打印多张图片,修改生成HTML的部分,循环创建带.print-img类的img标签,比如:
// 假设你有一个图片数组imgSources
var imgHtml = "";
imgSources.forEach(function(src) {
    imgHtml += "&lt;img class='print-img' src='" + src + "' /&gt;";
});
// 替换原来的单张img代码
return "&lt;html&gt;&lt;head&gt;" + printStyles + "&lt;script&gt;...&lt;/script&gt;&lt;/head&gt;&lt;body onload='step1()'&gt;" + imgHtml + "&lt;/body&gt;&lt;/html&gt;";

如果是固定每页N张,只需要调整nth-child(Nn)的数值,比如每页3张就写nth-child(3n)。另外,page-break-inside: avoid可以防止单张图片被拆分到两页,提升打印体验。


内容的提问来源于stack exchange,提问作者J M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:13:40