【问题标题】:Image and back color is not printing with Cross browser rdlc report printing with report viewer control in Asp.Net使用 Asp.Net 中的报表查看器控件打印跨浏览器 rdlc 报表不打印图像和背景颜色
【发布时间】:2017-05-13 05:50:46
【问题描述】:

为了在 asp.net mvc web 应用程序的报表查看器控件中实现 rdlc 报表的打印功能,我遵循了这个解决方案。它对我有用https://stackoverflow.com/a/14052577/870561

这个 jquery 脚本在报表查看器工具栏中添加了一个打印按钮,点击后会显示一个打印预览对话框,很酷。但它不会在打印中添加图像和背景颜色样式。

请建议一种方法来包含 rdlc 报告中使用的图像以及背景颜色。我的代码附在下面。

function pageLoad() {
    try {
        if (!$("#ff_print").length) {
            var ControlName = 'ReportViewer1';
            var innerTbody = '<tbody><tr><td><input type="image" style="border-width: 0px; padding: 2px; height: 16px; width: 16px;" alt="Print" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&amp;Version=11.0.0.0&amp;Name=Microsoft.Reporting.WebForms.Icons.Print.gif" title="Print"></td></tr></tbody>';
            var innerTable = '<table title="Print" onclick="PrintFunc(\'' + ControlName + '\'); return false;" id="ff_print" style="border: 1px solid rgb(236, 233, 216); background-color: rgb(236, 233, 216); cursor: default;">' + innerTbody + '</table>'
            var outerDiv = '<div style="display: inline; font-size: 8pt; height: 30px;" class=" "><table cellspacing="0" cellpadding="0" style="display: inline;"><tbody><tr><td height="28px">' + innerTable + '</td></tr></tbody></table></div>';

            $("#ReportViewer1_ctl05 > div").append(outerDiv);
        }
    }
    catch (e) { alert(e); }

}

function PrintFunc() {
    var strFrameName = ("printer-" + (new Date()).getTime());
    var jFrame = $("<iframe name='" + strFrameName + "'>");
    jFrame
    .css("width", "1px")
    .css("height", "1px")
    .css("position", "absolute")
    .css("left", "-2000px")
    .appendTo($("body:first"));

    var objFrame = window.frames[strFrameName];
    var objDoc = objFrame.document;
    var jStyleDiv = $("<div>").append($("style").clone());

    objDoc.open();
    objDoc.write($("head").html());
    objDoc.write($("#VisibleReportContentReportViewer1_ctl09").html());
    objDoc.write("<style>@page { size: auto; margin:5mm } </style>")
    objDoc.close();
    objFrame.print();

    setTimeout(function () { jFrame.remove(); }, (60 * 1000));
}

【问题讨论】:

    标签: c# jquery asp.net-mvc rdlc reportviewer


    【解决方案1】:

    以下几点正在生效 1. CSS 对于背景颜色添加 css -webkit-print-color-adjust: exactfor more info 2. 要打印图像,您需要将此 css 属性添加到包含图像的 img 标签或 div。 display:block;visibility:visible 3、Chrome加载图片的速度不快,打印前需要加暂停。这个技巧对我有用。

    我得到的最终解决方案是:

      function PrintFunc() {
            var strFrameName = ("printer-" + (new Date()).getTime());
            var jFrame = $("<iframe name='" + strFrameName + "'>");
            jFrame
            .css("width", "1px")
            .css("height", "1px")
            .css("position", "absolute")
            .css("left", "-2000px")
            .appendTo($("body:first"));
    
            var objFrame = window.frames[strFrameName];
            var objDoc = objFrame.document;
            var jStyleDiv = $("<div>").append($("style").clone());
    
            objDoc.open();
            objDoc.write($("head").html());
            objDoc.write($("#VisibleReportContentReportViewer1_ctl09").html());
            var style = "<style>";
            style = style + "@page { size: auto; margin: 0.845in 1in 0.845in 1in }";
            style = style + "@media print { body {-webkit-print-color-adjust: exact; } img{ visibility : visible; } }";
            style = style + "</style>";
            objDoc.write(style);
    
            setTimeout(function () {
                objDoc.close();
                objFrame.print();
            }, 750);
    
            setTimeout(function () { jFrame.remove(); }, (60 * 1000));
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多