asp.net中的“按需打印”(打印你需要打印的部分)
有时我们需要对.net网页中某些特定部分进行打印,很多人采用css样式或特定的打印控件来解决网页定制打印功能。这里采用javascript样式替换方式进行打印,使网页显示与打印效果相分离。
过程很简单:
首先在asp.net页面中设定开始打印和结束打印的标记,为了确保该标记不在网页浏览时显示,我们采用"<!-- html注释 -->"的方式。比如:<!--startprint-->和<!--endprint-->。
接着写相关的javascript代码,具体代码见后。
如果不想打印按钮也被打印出来,注意将打印按钮包含在<!--startprint-->和<!--endprint-->之外。
相关代码:
<%@ page language="c#" autoeventwireup="true" codebehind="appealprint.aspx.cs" inherits="appeal.appealprint"
masterpagefile="masterpage.master" title="诉求打印" %>
<asp:content id="content1" contentplaceholderid="cphnavigation" runat="server">
</asp:content>
<asp:content id="content2" contentplaceholderid="cphcontent" runat="server">
<!--startprint-->
<style type="text/css">
body,table{
font-size:12px;
}
table{
table-layout:fixed;
empty-cells:show;
border-collapse: collapse;
margin:0 auto;
}
td{
height:20px;
}
h1,h2,h3{
font-size:12px;
margin:0;
padding:0;
}
table{
border:1px solid #cad9ea;
color:#666;
}
table th{
height:30px;
}
table td,table th{
border:1px solid #cad9ea;
padding:0 1em 0;
}
table tr{
background-color:#f5fafe;
}
</style>
<table class="border" cellspacing="0" cellpadding="2" style="margin: 0px auto; width: 98%;border:1px solid;border-collapse:collapse;" id="tabbtnprint">
<tbody>
<tr align="center">
<td class="title"><strong>诉 求 信 息</strong></td>
</tr>
<tr>
<td style="height: 25px">
<table cellspacing="1" cellpadding="2" style="margin: 0px auto; width: 100%;border-collapse:collapse;">
<tbody>
<tr class="tdbg">
<td width="30%" align="right" nowrap="nowrap">诉求主题:</td>
<td colspan="3">
<asp:label id="lbledittitle" runat="server" text="label"></asp:label>
</td>
</tr>
<tr class="tdbg">
<td align="right" width="30%" nowrap="nowrap">诉求类型:</td>
<td colspan="3">
<asp:label id="lblappealcategory" runat="server" text=""/>
</td>
</tr>
<tr class="tdbg">
<td align="right" width="30%" nowrap="nowrap">诉求当前状态:</td>
<td colspan="3">
<asp:label id="lblstatus" runat="server" text="label"/>
</td>
</tr>
<tr class="tdbg">
<td align="right" style="width: 30%" nowrap="nowrap">诉求性质:</td>
<td style="width: 15%"><asp:label id="lblappealnature" runat="server" text="label"/></td>
<td align="right" style="width: 25%" nowrap="nowrap">被投诉人姓名:</td>
<td style="width: 30%"><asp:label id="lblbeappealname" runat="server" text="label"/></td>
</tr>
<tr class="tdbg">
<td align="right" style="width: 30%" nowrap="nowrap">被投诉人地址:</td>
<td style="width: 15%"><asp:label id="lblbeappealaddress" runat="server" text="label"/></td>
<td align="right" style="width: 25%" nowrap="nowrap">投诉人:</td>
<td style="width: 30%"><asp:label id="lblusername" runat="server" text="label"/></td>
</tr>
<tr class="tdbg">
<td align="right" style="width: 30%" nowrap="nowrap">诉求信息是否保密:</td>
<td style="width: 15%"><asp:label id="lblissecret" runat="server" text="label"/></td>
<td align="right" style="width: 25%" nowrap="nowrap">管理员是否同意公开:</td>
<td style="width: 30%" align="right"><asp:label id="lbladminispublic" runat="server" text="label"/></td>
</tr>
<tr class="tdbg">
<td align="right" style="width: 30%" nowrap="nowrap">浏览数:</td>
<td style="width: 15%"><asp:label id="lblhits" runat="server" text="label"/></td>
<td align="right" style="width: 25%" nowrap="nowrap">回复数:</td>
<td style="width: 30%"><asp:label id="lblreply" runat="server" text="label"/></td>
</tr>
<tr class="tdbg">
<td align="right" style="width: 30%" nowrap="nowrap">归档:</td>
<td style="width: 15%"><asp:label id="lblcategory" runat="server" text=""/></td>
<td align="right" style="width: 25%" nowrap="nowrap">诉求提交时间:</td>
<td style="width: 30%"><asp:label id="lblcreatetime" runat="server" text="label"/></td>
</tr>
<tr class="tdbg">
<td align="right" style="width: 30%" nowrap="nowrap">诉求所在地域:</td>
<td colspan="3"><asp:label id="lblregion" runat="server" text=""></asp:label></td>
</tr>
<tr class="tdbg">
<td colspan="4"><asp:label id="label2" runat="server" text=""/></td>
</tr>
<tr class="tdbg">
<td colspan="4" align="left" valign="top" nowrap="nowrap">诉求内容:</td>
</tr>
<tr class="tdbg">
<td colspan="4" align="left" valign="top">
<pe:extendedliteral id="ltreditcontent" runat="server" htmlencode="false"/>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<!--endprint-->
<br />
<p id="pbtnprint" style="text-align:center">
<input id="btnprint" type="button" value="打 印…" onclick="doprint();" />
</p>
<br />
<script type="text/javascript">
<!--
function doprint(){
bdhtml = window.document.body.innerhtml;
sprnstr = "<!--startprint-->";
eprnstr = "<!--endprint-->";
prnhtml = bdhtml.substr(bdhtml.indexof(sprnstr) + 17);
prnhtml = prnhtml.substring(0, prnhtml.indexof(eprnstr));
window.document.body.innerhtml = prnhtml;
var obj = window.document.body;
dozoom(obj, 18); //放大打印
window.print();
}
function dozoom(artibody, size) {
if (!artibody)
{
return;
}
setchildnodesbycurrentnode(artibody,size);
}
function setchildnodesbycurrentnode(node,size) {
for(var i=0; i < node.childnodes.length; i++) {
var artibodychild = node.childnodes[i];
if (artibodychild.nodetype == 1) {
artibodychild.classname="";
artibodychild.style.fontsize = size + 'px';
artibodychild.style.fontfamily = '仿宋_gb2312,宋体,"times new roman",georgia,serif';
artibodychild.style.fontweight = 900;
if(artibodychild.childnodes.length>0) {
setchildnodesbycurrentnode(artibodychild,size);
}
}
}
}
-->
</script>
</asp:content>
观察上面代码可以看出,打印时,window.document.body.innerhtml 被重新赋值成设定需要打印的网页部分的代码(这里是 prnhtml),然后通过递归方式调用setchildnodesbycurrentnode(artibody,size)更改相关子节点的样式,以达到全部更换相关字体大小及样式设置的目的。
上一篇: csdn文章转载原理
下一篇: poj2492并查集
推荐阅读