ReportViewer 列印本地 RDLC 報表需點擊多次,體驗不佳。RSClientPrint ActiveX 控制項常用於 SSRS 遠端報表,本文探索其直接列印本地報表的可行性。
<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml">
<head><title></title></head>
<BODY onload="Print()">
<OBJECT ID="RSClientPrint"
classid="CLSID:5554DCB0-700B-498D-9B58-4E40E5814405"
CODEBASE="/RSClientPrint-x86.cab" VIEWASTEXT></OBJECT>
<script type="text/javascript">
function Print(oid, name) {
if (typeof RSClientPrint.Print == "undefined") {
alert("Unable to load client print control.");
return;
}
RSClientPrint.MarginLeft = 0;
RSClientPrint.MarginTop = 0;
RSClientPrint.MarginRight = 0;
RSClientPrint.MarginBottom = 0;
RSClientPrint.PageHeight = 296.926;
RSClientPrint.PageWidth = 210.058;
RSClientPrint.Culture = 2052;
RSClientPrint.UICulture = 2052;
RSClientPrint.UseSingleRequest = true;
RSClientPrint.UseEmfPlus = true;
RSClientPrint.Print("https://localhost:2940/JDCJY/ReportHandler.ashx",
"oid=" + escape(oid) + "&name=" + escape(name), "test");
}
</script>
</BODY>
</html>
RSClientPrint-x86.cab(含 32/64 位元版本)。ReportHandler.ashx 實作 IReportServerConnection2,回傳本地 RDLC 渲染的 EMF/PDF 串流。Print(reportUrl, parameters, docName) 直接送印。透過 RSClientPrint 可實現本地 RDLC 報表一鍵列印,大幅提升使用者體驗,但需評估瀏覽器相容性與部署成本。