【发布时间】:2015-10-14 18:56:35
【问题描述】:
如何从控制器获取视图?我正在尝试将页面转换为图像并使用webclientPrint 将图像发送到热敏打印机。
我不能使用window.print();,因为热敏打印机可能不接受数据,而且我也不想向用户显示打印机对话框。
评论
我想捕获整个网页并将其转换为图像。
function Printlabel() {
debugger
if (navigator.appName == "Microsoft Internet Explorer") {
var PrintCommand = '<object ID="PrintCommandObject" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>';
document.body.insertAdjacentHTML('beforeEnd', PrintCommand);
PrintCommandObject.ExecWB(6, -1); PrintCommandObject.outerHTML = "";
}
else {
var contents = document.getElementById("PrintArea").innerHTML;
var frame1 = document.createElement('iframe');
frame1.name = "frame1";
frame1.style.position = "absolute";
frame1.style.top = "-1000000px";
document.body.appendChild(frame1);
var frameDoc = frame1.contentWindow ? frame1.contentWindow : frame1.contentDocument.document ? frame1.contentDocument.document : frame1.contentDocument;
frameDoc.document.open();
frameDoc.document.write('<html><head><title></title>');
frameDoc.document.write('<link rel="stylesheet" type="text/css" href="/Styles/labelStyle.css" media="print">');
frameDoc.document.write('</head><body>');
frameDoc.document.write(contents);
frameDoc.document.write('</body></html>');
frameDoc.document.close();
setTimeout(function () {
window.frames["frame1"].focus();
window.frames["frame1"].print();
document.body.removeChild(frame1);
}, 500);
}
setTimeout("window.open('', '_self', ''); window.close();", 5000);
return false;
}
【问题讨论】:
-
我担心这缺乏足够的细节来回答。
-
我想问的是,我想在控制器中捕获整个页面布局和内容并将其转换为 pdf 文件。类似于打印屏幕。
-
我认为你所追求的不是你在 JavaScript 中所做的——你需要一个浏览器扩展或使用像 phantomJS 这样的无头浏览器来为你生成屏幕截图。跨度>
-
也就是说,我只是注意到您想要页面的图像?!从服务器端这是不可能的。您无法截屏视图/HTML 有效的文本。浏览器将此文本呈现为您可以看到的内容,它是一种标记语言。您需要以某种方式渲染文本,然后将此渲染转换为图像,我看不出这怎么可能
-
您可以将视图呈现为字符串,然后转换为 pdf 并将其发送到打印机。捕获为图像没有实际意义,因为它取决于浏览器/主机(例如,移动设备 vs 40" 显示器,即 vs gc vs ff)。看看这里:stackoverflow.com/questions/1403167/…
标签: javascript c# asp.net-mvc