【asp.net(C#)】web页面打印

wanghao111 2010-08-15 07:21:15
页面上有一个超宽的报表,一个print按钮,单击print打印此页面,调用window.print(),但是现在打不全,弹出的对话框进行打印设置,在某些浏览器下可以打印全,但是IE下打不全。
问题:
1.可不可以事先设置好打印设置,比如打印用纸,打印样式等,即单击print之后就可以打印无需再去设置。
2.可不可以将页面缩小到一半进行打印?
3.有没有更好的解决方案,来解决超宽页面的打印问题。
ps:已在网上搜过,但是都不是想要的解决办法,也没有解决问题。
望牛人们,提供帮助,谢谢!
解决问题,分不够另加。
...全文
2635 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
yokoyokoyaya 2011-09-29
  • 打赏
  • 举报
回复
MARK
zhuyw19891227 2011-07-06
  • 打赏
  • 举报
回复
去掉头部的
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
标签
脾气不坏 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dandeline 的回复:]

<script language="javascript" type="text/javascript">
var HKEY_Root, HKEY_Path, HKEY_Key;
HKEY_Root = "HKEY_CURRENT_USER";
HKEY_Path = "\\Software\\Microsoft\\Internet Expl……
[/Quote]

顶 学习了。。。
eleven~ 2010-08-16
  • 打赏
  • 举报
回复
也可以使用调用word模板,输出word模块里,再下载下来打印。
telankes2000 2010-08-16
  • 打赏
  • 举报
回复
直接调用水晶报表的打印功能 搞这么麻烦干嘛
ldnet 2010-08-16
  • 打赏
  • 举报
回复
没用过 学习了
燃烧的荷尔蒙 2010-08-16
  • 打赏
  • 举报
回复
没做过,帮顶一下吧
cjfriends 2010-08-16
  • 打赏
  • 举报
回复
没有遇到过这种问题,学习了
jrl5365 2010-08-16
  • 打赏
  • 举报
回复
http://blog.csdn.net/tangcloth/archive/2009/11/19/4833536.aspx

横向打印,页面设置试试
阿彪兄 2010-08-16
  • 打赏
  • 举报
回复
上面是我以前自学时作的学习笔记,希望有用
阿彪兄 2010-08-16
  • 打赏
  • 举报
回复
Asp.net网络打印
一. 网络打印概述
1.B/S结构导致了Web应用程序中打印的特殊性.
2.程序运行在浏览器中,打印机在本地,而文件确可能在服务器上,导致了打印控制不是很灵活.
3.格式如何控制和定制等,是我们开发中可能会面对的问题.
打印文档的生成
1. 客户端脚本方式
一般情况下,主要使用JS可以分析源页面的内容,将欲打印的页面元素提取出来,实现打印.通过分析源文档的内容,可以生成打印目标文档.
优点:客户端独立完成打印目标文档的生成,减轻服务器负荷.
缺点:源文档的的分析操作复杂,并且源文档中的打印内容要有约定.
2. 服务器端程序方式
利用后台代码从数据库中读取打印源,生成打印目标文档.当页面生成时,还应适当考虑使用CSS来实现强制分页控制.
优点:可以生成内容非常丰富的打印目标文档,目标文档的内容的可控性强.由于打印内容是从数据库中获取的,所以生成操作相对简单;
缺点:服务器端负载比较大.
3. 页面设置
页面设置主要是指设置打印文档的页边距,页眉,页脚,纸张等内容.页面设置将直接影响到打印文档版面的生成效果,所以它和打印文档的生成有着密切的关系.比如:表格的行数,大小,位置,字体的大小等.
现有的技术是利用IE6.0内置的打印模板方式来控制页面设置,其可以对打印目标文档产生非常大的影响.打印模板可以控制页边距,页眉,页脚,奇偶页等内容,并可以将用户的设置取得,还可以将设置发送到服务器端.
打印模板技术可以自定预览窗口和打印格式,最大限度地影响目标文档和打印效果.
二. IE直接打印
1.利用IE浏览器直接打印,即直接调用window.print或者webrower控件的ExecWB方法来打印.
优点:方便快捷,客户端无需任何设置即可.
缺点: 打印控制不是很灵活.如果直接调用window.print来打印页面,页面上别的元素也会被打印处理,页头页尾的格式也不好控制.
常用方法:大部分情况会把查询的结果绑定到DataGrid上来,然后打印DataGrid.这种情况的打印一般来说格式比较固定简单,确定后基本不会再作更改.所以可以采用IE直接打印.
例1. 利用Window.Print直接打印(这里打印DataGrid中的内容)
//预览并打印
Javascript写的预览并打印
function preview()
{
bdhtml=window.document.body.innerHTML;
sprnstr=”<!--startprint-->”;
eprnstr=”<!--endprint-->”;
prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);
prnhtml=prnhtml.substring(prnhtml.substring(0,prnhtml.indexOf(eprnstr)));
window.document..body.innerHTML=prnhtml;
window.print();
}
*要打印的DataGrid放在以下html代码区域中
<!--startprint-->
<div align=”center”>
<asp:DataGrid>……………
</asp:DataGrid>
</div>
<!--endprint-->
//打印页面全部内容
Onclick=”window.print()”
//还可以通过css控制元素的display:none来让元素打印时不显示
2.WebBrowser控件技术
打印操作的实现
此功能的实现主要是利用WebBrowser控件的函数接口来实现打印,5打印预览(默认的),页面设置(默认的).
<object ID=’WebBrowser1’
WIDTH=0 HEIGHT=0 CLASSID=’CLSID:8856F961-340A-11D0-A96B-00C04FD705A2’>
//打印
WebBrowser1.ExecWB(6,1);
//打印设置
WebBrowser1.ExecWB(8,1);
//打印预览
WebBrowser1.ExecWB(7,1);
//直接打印
WebBrowser1.ExecWB(6,6);
例2:利用WebBrowser控件实现打印(服务器端实现)
PrintClass.cs类核心代码
public string DGprint(DataSet ds)
{
DataTable myDataTable=new DataTable();
myDataTable=ds.Tables[0];
int myRow=myDataTable.Rows.Count;
int myCol=myDataTable.Columns.Count;
StringBuilder sb=new StringBuilder();
String colHeaders=”<html><body>”+
“<object ID=’WebBrowser’ WIDTH=0 HEIGHT=0 CLASSID=’ CLSID:8856F961-340A-11D0-A96B-00C04FD705A2’>”+
“<table><tr>”;
For(int i=0;i<myCol;i++)
{
colHeaders+=”<td>”+myDataTable.Columns[i].ColumnName.ToString()+”</td>”;
}
colHeaders+=”</tr>”;
sb.Append(colHeaders);
for(int i=0;i<myRow;i++)
{
sb.Append(“<tr>”);
for(int j=0;j<myCol;j++)
{
sb.Append(“<td>”);
sb.Append(myDataTable.Rows[i][j].ToString().Trim());
sb.Append(“</td>”);
}
sb.Append(“</tr>”);
sb.Append(“</table><body></html>”);
colHeaders=sb.ToString();
colHeaders+=”<script language=’javascript’>WebBrowser.ExecWB(7,1);window.opener=null;window.close();</script>”;
return (colHeaders);
}
}
//调用并打印
PrintClass myP=new PrintClass();
Response.Write(myP.DGPrint(Bind()));//其中Bind()方法用于实现DataGrid数据绑定
三. 导出到Excel,Word中去打印
导出后打印:
可以在服务端或者客户端进行.
优点:使用这种方法,可适应性比较强,控制较好.
缺点:在服务端使用的话,要求服务端要安装Word,Excel,在客户端使用的话,要求客户端在IE的安全设置上有一定要求.
例3.将数据从数据库中读出来,输出为Excel,用户再通过Excel打印出来.(浏览器导出和COM导出,这里仍然是导出DataGrid内容)
浏览器导出代码
绑定数据后
Response.ContentType=”application/vnd.ms-excel”;
Response.AddHeader(“Content-Disposition”,”inline;filename=BrowerExcel.xls”);
StringBuilder sb=new StringBuilder();
System.IO.StringWriter sw=new System.IO.StringWriter(sb);
System.Web.UI.HtmlTextWriter hw=new System.Web.UI.HtmlTextWriter(sw);
sb.Append(“<html><body>”);
dgShow.RenderControl(hw);(dgShow为 DataGrid的ID名,这里只能是除了操作列再需要RenderControl,分页时RenderControl前不分页,后再分页,不需要的DataGrid列隐藏,如按钮列)
sb.Append(“</body></html>”);
Response.Writer(sb.ToString());
Response.End();
//COM导出代码
Public void ExportToExcel(DataSet ds,string strExcelFileName)
{
if(ds.Tables.Count==0 || strExcelFileName==””) return;
doExport(ds,strExcelFileName);
}
//需要添加引用Microsoft.Excel 11.0 Object Library这个COM组件
Private void doExport(DataSet ds,string strExcelFileName)
{
Excel.Application excel=new Excel.Application();
Int rowIndex=1;
Int colIndex=0;
excel.Application.Workbooks.Add(true);
System.Data.DataTable table=ds.Tables[0];
Foreach(DataColum col in table.Columns)
{
colIndex++;
excel.Cells[1,colIndex]=col.ColumnName;
}
Foreach(DataRow row in table.Rows)
{
rowIndex++;
colIndex=0;
foreach(DataColumn col in table.Columns)
{
colIndex++;
excel.Cells[rowIndex,colIndex]=row[col,ColumnName].ToString();
}
excel.Visible=false;
excel.ActiveWordbook.SaveAs(strExcelFileName+”.XLS”,Excel.XlFileFor…..)
excel.Quit();
excel=null;
GC.Collect();
}
}
//导出
ExportToExcel(BindData(),Server.MapPath(“ComExcel.xls”));//这里BindData()为DataGrid数据绑定方法.
四. 利用.NET组件打印机
优点: 这种打印方式对于格式变化大,数据量小的应用来说非常合适.
缺点:
需要客户端安装.NET framework组件.
XML的解析上,如果文件较大速度上不是很理想.
页面首次加载时会有明显的延时.
使用XSL和XSLT转换XML
XSL:扩展样式表语言,可以通过它来把XML转换为其他的文本格式.
XSL转换包括发现或者选择一个模式匹配,通过使用XPath选择一个结果集,然后对结果集中的每一项,为这些匹配定义结果输出.
XSL是一个功能强大的工具,可以把XML转换成成任何你想要的格式.
例4.利用XSLT打印.
Test.xml文件
<Students>
<Student>
<name>wyb</name>
<sex>man</sex>
</Student>
<Student>
<name>kkk</name>
<sex>man</sex>
</Student>
</Students>
转换代码(要引用命名空间)
XslTransform xslt=new XslTransform();
Xslt.Load(Server.MapPath(“StudentsToHTML.xsl”));
XPathDocument XDoc=new XPathDocument(Server.MapPath(“Students.XML”));
XmlWriter writer=new XmlTextWriter(Server.MapPath(“Students.html”),System.Text.En……..);
Xslt.Transform(XDoc,null,writer);
writer.Close();
Response.Redirect(“Students.html”);
五. 利用ActiveX控件打印(利用第三方组件打印)
自己开发控件。这种方式很多商用软件采用这种方式,写成控件后已经无所谓是在web中使用还是应用程序中使用了.
优点:打印方式非常灵活,基本上程序能做到的web也能做到.
缺点:客户端需要安装组件,部署不是很方便.
典型的是水晶报表.
使用水晶报表
用户仅需要Web浏览器就可以查看报表
报表查看器迭件可以是应用程序中众多控件之一.
与报表轻松交互
用户可以将报表导出为Microsoft Word和Excel格式,以及PDF,HTML和Crystal Reports for Visual Studio.NET格式
可以使用报表控件直接打印.
例5.
打印
String strPrinterName;
strPrinterName=@”Cannon Bubble-Jet BJC-210SP”;
PageMargings margins;
margins=ReportDoc.PrintOptions.PageMargins;
margins.bottomMargin=250;
margins.leftMargin=350;
margins.rightMargin=350;
margins.topMargin=450;
ReportDoc.PrintOptions.ApplyPageMargins(margins);
ReportDoc.PrintOptions.PrinterName=strPrinterName;
ReportDoc.PrintToPrinter(1,false,0,0);

孟子E章 2010-08-16
  • 打赏
  • 举报
回复
要想完美打印,你需要做个activex,参考
http://www.meadroid.com/scriptx/
zhubo006 2010-08-16
  • 打赏
  • 举报
回复
写个 activeX控件,web调用实现打印
porschev 2010-08-15
  • 打赏
  • 举报
回复
没做过。。学习。。
parverxiao 2010-08-15
  • 打赏
  • 举报
回复
<script language="javascript" type="text/javascript">
var HKEY_Root, HKEY_Path, HKEY_Key;
HKEY_Root = "HKEY_CURRENT_USER";
HKEY_Path = "\\Software\\Microsoft\\Internet Explorer\\PageSetup\\";
//设置网页打印的页眉页脚为空
function PageSetup_Null() {
try {
var Wsh = new ActiveXObject("WScript.Shell");
HKEY_Key = "header";
Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "");
HKEY_Key = "footer";
Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "");
}
catch (e)
{ }
}
function printpage(myDiv){ //DIV控制打印

//var newstr = document.all.item(myDiv).innerHTML;
var newstr = document.getElementById(myDiv).innerHTML;
// alert(newstr);
var oldstr = document.body.innerHTML;
document.body.innerHTML = newstr;
window.print();
document.body.innerHTML = oldstr;
return false;
}
function preview() {
PageSetup_Null();
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;
window.print();
}
</script>
<input class="Noprn" type="button" onclick="window.print()" value="打印"/>
<input type="button" name="print" value="预览并打印" onclick="preview()"/>
<input type="button" id="bt" onclick="javascript:printpage('myDiv')" value="DIV打印" />
这是我之前项目中的,有三种形式,直接打印,预览打印,DIV形式的打印,看看吧
wuyq11 2010-08-15
  • 打赏
  • 举报
回复
设置横向打印
自定义报表
通过水晶报表等导出excel等打印
自定义模板导出打印
http://topic.csdn.net/u/20090921/20/625a532c-1c97-4bfb-bdf1-7a1ab04fd797.html?88222
这是第六版的介绍《ASP.NET 4入门经典:涵盖C#和VB.NET(第6版)》内容简介:ASP.NET是.NET Framework的一部分,用于构建内容丰富的动态Web站点。其最新的版本ASP.NET 4对上一版进行了许多改进,包括增强了Web窗体,并添加了jQuery的支持。《ASP.NET 4入门经典:涵盖C#和VB.NET(第6版)》循序渐进,逐步讲解了如何使用ASP.NET 4构建内容丰富的Web站点,并提供了大量使用C#和VB的示例。通过实际动手练习,您将学到关于构建Web站点的第一手信息,同时能够深刻理解在浏览器中查看ASP.NET 4页面时,后台到底发生了什么。 这是第七版,也就是本源码书的介绍 The ultimate programming guide to ASP.NET 4.5, by popular author and Microsoft MVP Imar Spaanjaars Updated for ASP.NET 4.5, this introductory book is filled with helpful examples and contains a user-friendly, step-by-step format. Written by popular author and Microsoft ASP.NET MVP Imar Spaanjaars, this book walks you through ASP.NET, Microsoft's technology for building dynamically generated web pages. This edition retains the highly accessible approach to building the Planet Wrox website example, an online community site featuring product reviews, picture sharing, bonus content for registered users, and more. Contains the comprehensive guide to the latest technology additions to ASP.NET 4.5 Shows how to build basic ASP.NET web pages and configure their server Includes information on how to add features with pre-built server controls Reveals how to design pages and make them consistent Contains the information needed for getting user input and displaying data Beginning ASP.NET 4.5 in C# and VB uses Spaanjaars's distinct writing style to put you at ease with learning ASP.NET 4.5.

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧