使用html/css/javascript打印宽html表格(具有响应性设计)
我曾经尝试过在一个页面中打印我的宽表的代码,这只适用于谷歌浏览器。无法使其在文章和评论中提到的IE上工作。下面是我在IE上的示例代码,我尝试了几个小时都没有解决这个问题使用html/css/javascript打印宽html表格(具有响应性设计),javascript,jquery,html,css,Javascript,Jquery,Html,Css,我曾经尝试过在一个页面中打印我的宽表的代码,这只适用于谷歌浏览器。无法使其在文章和评论中提到的IE上工作。下面是我在IE上的示例代码,我尝试了几个小时都没有解决这个问题 function printGrid() { var gridElement = $('#grid'), printableContent = '', win = window.open('', '', 'scrollbars=1,resizable=1,width=1150,height=650,left=
function printGrid() {
var gridElement = $('#grid'),
printableContent = '',
win = window.open('', '', 'scrollbars=1,resizable=1,width=1150,height=650,left=0,top=0'),
doc = win.document.open(),
dataSource = $("#grid").data("kendoGrid").dataSource;
var htmlStart =
'<!DOCTYPE html>' +
'<html>' +
'<head>' +
'<meta charset="utf-8" />' +
'<link href="../Content/kendo/2014.1.318/kendo.common.min.css" rel="stylesheet" />' +
'<style>' +
'html { font: 11pt sans-serif; }' +
'.k-grid { border-top-width: 0;}' +
'.k-grid, .k-grid-content { height: auto !important;}' +
'.k-grid-content { overflow: visible !important; }' +
'div.k-grid table { table-layout: fixed; border:1px solid #000000; width: 100% !important; }' +
'.k-grid .k-grid-header th { border-top: 1px solid; border:1px solid #000000;}' +
'.k-grid td {border:1px solid #000000;} ' +
'.k-grid-toolbar, .k-grid-pager > .k-link { display: none; }' +
'@media only screen and (max-width: 760px),(min-device-width: 768px) and (max-device-width: 1024px) {table, thead, tbody, th, td, tr { display:block;width:100%;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;float:left;clear:left;}' +
'thead tr {position: absolute;top: -9999px;left: -9999px;}' +
'tr {border: 1px solid #ccc;}' +
'td {border: none;border-bottom: 1px solid #eee;position: relative;padding-left: 50%;height:10px;}' +
'td:before {position: absolute;top: 6px;left: 6px;width: 45%;padding-right: 10px;white-space: nowrap;}' +
'td:nth-of-type(1):before {content: "Column1";}' +
'td:nth-of-type(1):before {content: "Column2";}' +
'td:nth-of-type(1):before {content: "Column3";}' +
'td:nth-of-type(1):before {content: "Column4";}' +
'td:nth-of-type(1):before {content: "Column5";}' +
'td:nth-of-type(1):before {content: "Column6";}' +
'td:nth-of-type(1):before {content: "Column7";}' +
'td:nth-of-type(1):before {content: "Column8";}' +
'td:nth-of-type(1):before {content: "Column9";}' +
'td:nth-of-type(1):before {content: "Column10";}' +
'td:nth-of-type(1):before {content: "Column11";}' +
'td:nth-of-type(1):before {content: "Column12";}' +
'td:nth-of-type(1):before {content: "Column13";}' +
'td:nth-of-type(1):before {content: "Column14";}' +
'td:nth-of-type(1):before {content: "Column15";}' +
'}' +
'@media only screen and (min-device-width : 320px) and (max-device-width : 480px) {' +
'body {padding: 0;margin: 0;width: 320px;}' +
'}' +
'@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {' +
'body {width: 495px;}' +
'}' +
'</style>' +
'</head>' +
'<body>';
var htmlEnd =
'</body>' +
'</html>';
var gridHeader = gridElement.children('.k-grid-header');
if (gridHeader[0]) {
var thead = gridHeader.find('thead').clone().addClass('k-grid-header');
printableContent = gridElement
.clone()
.children('.k-grid-header').remove()
.end()
.children('.k-grid-content')
.find('table')
.first()
.children('tbody').before(thead)
.end()
.end()
.end()
.end()[0].outerHTML;
} else {
printableContent = gridElement.clone()[0].outerHTML;
}
doc.write(htmlStart + printableContent + htmlEnd);
doc.close();
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/ ') >= 0;
var isChrome = !!window.chrome && !isOpera;
if (!isChrome)
win.print();
}
函数printGrid(){
var gridElement=$(“#grid”),
可打印内容=“”,
win=窗口。打开(“”,,”滚动条=1,可调整大小=1,宽度=1150,高度=650,左侧=0,顶部=0'),
doc=win.document.open(),
数据源=$(“#网格”).data(“kendoGrid”).dataSource;
var htmlStart=
'' +
'' +
'' +
'' +
'' +
'' +
'html{font:11pt无衬线;}'+
“.k网格{边框顶部宽度:0;}”+
“.k-grid,.k-grid-content{height:auto!important;}”+
“.k-grid-content{溢出:可见!重要;}”+
'div.k-grid表格{表格布局:固定;边框:1px实心#000000;宽度:100%!重要;}'+
“.k-grid.k-grid-header th{border top:1px solid;border:1px solid#000000;}”+
“.k-grid td{border:1px solid#000000;}”+
“.k-grid-toolbar、.k-grid-pager>.k-link{display:none;}”+
“@media-only屏幕和(最大宽度:760px),(最小设备宽度:768px)和(最大设备宽度:1024px){table,thead,tbody,th,td,tr{显示:块;宽度:100%;-webkit框大小:边框框;-moz框大小:边框框;框大小:边框框;浮点:左;清除:左;}”+
'thead tr{位置:绝对;顶部:-9999px;左侧:-9999px;}'+
'tr{border:1px solid#ccc;}'+
'td{边框:无;边框底部:1px实心#eee;位置:相对;左侧填充:50%;高度:10px;}'+
'td:before{position:absolute;top:6px;left:6px;width:45%;padding right:10px;空白:nowrap;}'+
'td:n类型(1):在{content:“Column1”;}之前+
'td:n类型(1):在{content:“Column2”;}之前+
'td:n类型(1):在{content:“Column3”;}之前+
'td:n类型(1):在{content:“Column4”;}之前+
'td:n类型(1):在{content:“Column5”;}之前+
'td:n类型(1):在{content:“Column6”;}之前+
'td:n类型(1):在{content:“Column7”;}之前+
'td:n类型(1):在{content:“Column8”;}之前+
'td:n类型(1):在{content:“Column9”;}之前+
'td:n类型(1):在{content:“Column10”;}之前+
'td:n类型(1):在{content:“Column11”;}之前+
'td:n类型(1):在{content:“Column12”;}之前+
'td:n类型(1):在{content:“Column13”;}之前+
'td:n类型(1):在{content:“Column14”;}之前+
'td:n类型(1):在{content:“Column15”;}之前+
'}' +
“@仅媒体屏幕和(最小设备宽度:320px)和(最大设备宽度:480px){”+
'正文{填充:0;边距:0;宽度:320px;}'+
'}' +
“@仅媒体屏幕和(最小设备宽度:768px)和(最大设备宽度:1024px){”+
'正文{宽度:495px;}'+
'}' +
'' +
'' +
'';
var htmlEnd=
'' +
'';
var gridHeader=gridElement.children('.k-grid-header');
if(gridHeader[0]){
var thead=gridHeader.find('thead').clone().addClass('k-grid-header');
printableContent=gridElement
.clone()
.children('.k-grid-header').remove()
(完)
.children(“.k-grid-content”)
.find('表')
.first()
.children('tbody')。在(thead)之前
(完)
(完)
(完)
.end()[0].outerHTML;
}否则{
printableContent=gridElement.clone()[0].outerHTML;
}
文档写入(htmlStart+printableContent+htmlEnd);
doc.close();
var isOpera=!!window.opera | | navigator.userAgent.indexOf('OPR/')>=0;
var isChrome=!!window.chrome&&!isOpera;
如果(!异色)
win.print();
}
尝试了不同的打印解决方案,如演示所示。成功了 注意:我使用的是剑道网格,下面的解决方案非常有效!这有一些额外的过滤器显示内容等。如果不需要,请将其删除。我相信它可以优化,但这是一个快速有效的代码
function printGrid() {
var gridElement = $('#grid'),
firstprintableContent = '',
lastprintableContent = '',
win = window.open('', '', 'scrollbars=1,resizable=1,width=1150,height=650,left=0,top=0'),
doc = win.document.open(), dataSource = $("#grid").data("kendoGrid").dataSource;
//get the filter values
var filterHtml = "", operator = "", fieldName = "", localCounter = 0;;
var fieldArray = new Array("Field1", "Field2", "Field3", "Field4", "Field5", "Field6", "Field7", "Field8", "Field9", "Field10", "Field11", "Field12", "Field13", "Field14", "Field15");
var nameArray = new Array("Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15");
//Logic for getting the filters and displaying them on the print page
var currentFilter = dataSource.filter();
if (currentFilter) {
currentFilter.filters.forEach(function (filter, index) {
localCounter = localCounter + 1;
if (filter.operator == "neq")
operator = "not equals to";
if (filter.operator == "eq")
operator = "equals to";
if (filter.operator == "startswith")
operator = "starting with";
for (var iCounter = 0; iCounter < 15; iCounter++) {
if (filter.field == fieldArray[iCounter]) {
fieldName = nameArray[iCounter];
break;
}
}
if (localCounter > 1)
filterHtml += "<p style='padding-left:9.1em'>" + fieldName + " " + operator + " " + "'" + filter.value + "'" + "</p>";
else
filterHtml += fieldName + " " + operator + " " + "'" + filter.value + "'" + "<br/> ";
});
}
else
filterHtml = "None";
var htmlStart =
'<!DOCTYPE html>' +
'<html>' +
'<head>' +
'<meta charset="utf-8" />' +
'<style>' +
'html { font: 11pt sans-serif; }' +
'table { width: 100%; border-collapse: collapse;table-layout:fixed;}' +
'tr:nth-of-type(odd) { background: #eee;}' +
'th { background: #DDDDDD;white-space: nowrap; color: white; font-weight: bold; pointer-events:none;cursor:default;text-decoration:none;}' +
'td, th { padding: 6px; border: 1px solid #ccc; text-align: left;outline:1px solid #ccc}' +
'tr {border: 1px solid #ccc;}' +
'</style>' +
'</head>' +
'<body>' +
'<div class="site-header__logo col-xs-4">' +
'<img src="/Content/images/mark-red-48x52.png" alt=" Products">' +
'<img src="/Content/images/logo-299x63.png" alt="Products">' +
'</div>' + '<br/><br/>' +
'Applied Data Filters' + ':' + " " + filterHtml + '<br/>' +
'<center><strong><h2>' + 'My grid' + '</h2></strong> </center>' + '<br/>';
var htmlEnd = '</body>' + '</html>';
//get the total columns, hidden columns and shown columns
var totalColumns = $("#grid").data("kendoGrid").columns.length;
var hiddencolumnsarray = [];
var showncolumnsarray = [];
if (totalColumns > 0) {
for (i = 0; i < totalColumns; i++) {
if ($("#grid").data("kendoGrid").columns[i].hidden) {
hiddencolumnsarray.push(i);
}
else {
showncolumnsarray.push(i);
}
}
}
if (showncolumnsarray.length > 8) {
iMoreColumns = 1;
//show only the first eight columns if user is viewing more than 8 columns
printfirsteightcolumns();
firstprintableContent = getPrintableContent(gridElement);
printlastsevencolumns();
lastprintableContent = getPrintableContent(gridElement);
} else {
iMoreColumns = 0;
firstprintableContent = getPrintableContent(gridElement);
}
//set the columns visibility back to normal once the print HTML is captured with the respective number of columns
printshowhidecolumns();
if (showncolumnsarray.length > 8)
doc.write(htmlStart + firstprintableContent + "<br/>" + "<div style='page-break-before:always;'>" + lastprintableContent + "</div>" + htmlEnd);
else
doc.write(htmlStart + firstprintableContent + htmlEnd);
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/ ') >= 0;
var isChrome = !!window.chrome && !isOpera;
if (!isChrome)
win.print();
}
function getPrintableContent(gridElement) {
var gridHeader = gridElement.children('.k-grid-header');
if (gridHeader[0]) {
var thead = gridHeader.find('thead').clone().addClass('k-grid-header');
printableContent = gridElement.css('height', '')
.clone()
.children('.k-grid-header').remove()
.end()
.children('.k-grid-content').css('height', '')
.find('table')
.first()
.children('tbody').before(thead)
.end()
.end()
.end()
.end()[0].outerHTML;
} else {
printableContent = gridElement.clone()[0].outerHTML;
}
return printableContent;
}
function printfirsteightcolumns() {
var counter = 0;
var columns = $("#grid").data("kedoGrid").columns;
jQuery.each(columns, function (index) {
if (counter > 8) {
$("#grid").data("kendoGrid").hideColumn(parseInt(counter));
}
counter = counter + 1;
});
}
function printlastsevencolumns() {
var counter = 0;
var columns = $("#grid").data("kedoGrid").columns;
jQuery.each(columns, function (index) {
if (counter > 8) {
$("#grid").data("kendoGrid").showColumn(parseInt(counter));
}
else {
$("#grid").data("kendoGrid").hideColumn(parseInt(counter));
}
counter = counter + 1;
});
}
函数printGrid(){
var gridElement=$(“#grid”),
firstprintableContent=“”,
lastprintableContent=“”,
win=窗口。打开(“”,,”滚动条=1,可调整大小=1,宽度=1150,高度=650,左侧=0,顶部=0'),
doc=win.document.open(),dataSource=$(“#网格”).data(“kendoGrid”).dataSource;
//获取过滤器值
var filterthrtml=“”,operator=“”,fieldName=“”,localCounter=0;”;;
变量fieldArray=新数组(“Field1”、“Field2”、“Field3”、“Field4”、“Field5”、“Field6”、“Field7”、“Field8”、“Field9”、“Field10”、“Field11”、“Field12”、“Field13”、“Field14”、“Field15”);
var nameArray=新数组(“Column1”、“Column2”、“Column3”、“Column4”、“Column5”、“Column6”、“Column7”、“Column8”、“Column9”、“Column10”、“Column11”、“Column12”、“Column13”、“Column14”、“Column15”);
//获取过滤器并将其显示在打印页面上的逻辑
var currentFilter=dataSource.filter();
如果(当前过滤器){
currentFilter.filters.forEach(函数(过滤器,索引){
localCounter=localCounter+1;
如果(filter.operator==“neq”)
运算符=“不等于”;
if(filter.operator==“eq”)
运算符=“等于”;
if(filter.operator==“startswith”)
operator=“以开始”;
对于(var iCounter=0;iCounter<15;iCounter++){
if(filter.field==fieldArray[iCounter]){
fieldName=nameArray[iCounter];
打破
}
}
如果(localCounter>1)
filterHtml+=“”+字段名+“”+运算符+“”+“”+“”“+”filter.value+“+”“+”
”; 其他的 filterHtml+=fieldName+“”+运算符+“”+“”+filter.value+“+”“+””; }); } 其他的 filterthtml=“无”; var htmlStart=