ASP.NET打印问题(水晶报表-〉pdf-〉打印输出)
现遇到一关于B/S程序ASP.NET“打印问题”不能解决。打印流程大致为四个步骤:①点击印刷Button -> ②弹出内嵌在IE中的pdf页面 -> ③“印刷”对话框,也就是打印页面设置 -> ④纸张打印输出(客户端打印机)
――――以上为现存程序,现客户提出的新要求如下:
问题一:省去上面四个步骤的②③两步,即:①点击印刷Button -> ②纸张打印输出(客户端打印 和 服务器端打印 均可。)
服务器端打印:即客户端向服务器段发送一条指令,告知在本地(服务器端)输出,但我不知道这样的要求是否能够实现,并且速度如何?
省去的②③两步能否用程序完成?
问题二:现存在X、Y、Z三台打印机,其中打印机X有4个出纸口,比如:1、2、3、4,不同的出纸口用来打印输出不同大小和型号的纸张。
现要做如下操作:
A类帐票 想通过 打印机X的 1号口 打印输出;
B类帐票 通过打印机X 的 2号口 打印输出;
C类帐票 通过打印机Y 打印输出(打印机Y只有一个出纸口);
D类帐票 通过打印机Z 打印输出(打印机Z只有一个出纸口)。
以上均需要程序自动执行,包括不同类别的帐票寻找不同的打印机、不同的出纸口也需要程序自动完成,用户仅仅需要点击web页面上的一个按钮,相应的帐票就从对应的打印机的 对应出纸口 直接打印输出。
直接输出:不出现任何窗口,甚至是选择“打印设置”和“打印机选择”窗口。
―――――目前计划解决方案如下――――――――――――――――――――――――――――――――
1、昨天偶然发现iText,不知道能否解决上述问题?
2、寻找Adobe提供的pdf sdk,使用pdf提供的ActiveX的打印控件。是否存在这样一个东西,即使存在能否解决上述问题?
―――――以下是一位同事的回信,可参考。――――――――――――――――――――――――――――――――
无论问题一或者问题二,都涉及到通过浏览器端的程序控制硬件资源的问题。
1,通过浏览器端程序(一般是JavaScript)控制客户端打印机
①点击印刷Button -> ②纸张打印输出
我认为 有违于浏览器端程序的安全性限制,是不便实现的。
反证法:如果能够实现,那么同样的道理,跳过上述步骤1也应该能够实现,
意味着可以在客户端不知情的时候操纵客户端打印机。显然这是不合理的。
客户坚持要实现的话,很可能需要对客户端浏览器的属性进行重新设置,
去除上述安全性限制,并且另行开发打印控制逻辑。
2,通过Web程序控易做图务器端打印机
应该是可以实现的,但是需要另行开发打印控制程序(比如,称之为程序PrnCtrlr)。
Web程序当中按下打印按钮 -〉 起动服务器端的ASPX或者Java程序 -〉 间接调用PrnCtrlr
3,不想弹出“打印页面设置”的话,打印机出现各种故障的情况下怎么办?
总体上感觉客户仍然在用传统的VB程序模式来理解Web程序。
建议跟客户说明利弊。
--------------------编程问答-------------------- 用水晶报表10企业版吧
直接打印了 --------------------编程问答--------------------
<html>
<head>
<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
<title>***上海市眼病防治中心病人结帐费用报表***</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<!--media=print 这个属性可以在打印时有效-->
<style media=print>
.Noprint{display:none;}
.PageNext{page-break-after: always;}
</style>
<style>
body,td,th
{
font-size: 12px;
}
.tdp
{
border-bottom: 1 solid #000000;
border-left: 1 solid #000000;
border-right: 0 solid #ffffff;
border-top: 0 solid #ffffff;
}
.tabp
{
border-color: #000000;
border-collapse:collapse;
}
.NOPRINT {
font-family: "宋体";
font-size: 12px;
}
</style>
</head>
<body >
<OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0 VIEWASTEXT>
</OBJECT>
<input type=button value=打印 onclick="document.all.WebBrowser.ExecWB(6,1)" class="NOPRINT">
<input type=button value=直接打印 onclick="document.all.WebBrowser.ExecWB(6,6)" class="NOPRINT">
<input type=button value=页面设置 onclick="document.all.WebBrowser.ExecWB(8,1)" class="NOPRINT">
<input type=button value=打印预览 onclick="document.all.WebBrowser.ExecWB(7,1)" class="NOPRINT">
<br/>
<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0" >
<tr align="center">
<td colspan="5"><font size="3">上海市眼病防治中心病人结帐费用报表(A) </font></td>
</tr>
<tr>
<td>汇总人次 5</td>
<td>费用合计 15853.12</td>
<td>统计日期 </td>
<td>制表人 023</td>
<td>制表日期:2004-05-13</td>
</tr>
</table>
<table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000" class="tabp" >
<tr>
<td >姓名</td>
<td >住院号</td>
<td >科室</td>
<td >结帐日期</td>
<td >出院日期</td>
<td >费用合计</td>
<td >医保交易费用</td>
<td >分类给付费用</td>
<td >非医保交易费</td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
</tr>
<tr>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
<td > </td>
</tr>
</table>
<hr align="center" width="90%" size="1" noshade class="NOPRINT" >
<!--分页-->
<div class="PageNext"></div>
<table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000" class="tabp">
<tr>
<td >第2页</td>
</tr>
<tr>
<td >看到分页了吧</td>
</tr>
<tr>
<td > </td>
</tr>
<tr>
<td > </td>
</tr>
<tr>
<td ><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50%" >这样的报表
对一般的要求就够了。</td>
<td> </td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>
--------------------编程问答-------------------- 谁做这样的东西谁死 --------------------编程问答-------------------- 恭喜自己 正在走向死亡的路上 --------------------编程问答--------------------
。。。。。。不至于吧,我现在在搞flash 人类对未知的事务都是恐惧的 我开始连flash开发使用什么工具都不知道
补充:.NET技术 , ASP.NET