读书人

高分求助!(WEB打印的有关问题)

发布时间: 2011-12-18 22:54:38 作者: rapoo

高分求助!(WEB打印的问题)
VS2005
我用了水晶报表
打印模式为AxtiveX
推模式
报表是别人给我做的,我就是引用
能够预览显示数据
就是在点打印后,弹出对话框  “出现通信错误。将停止打印”
网上有资料说是:“是绑定的问题 报表绑定写在OnInit就OK了”
我不明白什么是OnInit,请高手指点,很急哦,在线等啊!
或者还有其他什么解决办法。

我的打印代码是这样:
private void PoReportPrint()
{
DataSet ds = this.GetPrintData();

CrystalReportSource1.ReportDocument.Load(Server.MapPath( "CryMovePathRpt.rpt "));

CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables[0]);

if (ds.Tables[0].Rows.Count <= 0)
{
Response.Write( " <script language= 'javascript '> alert( '没有找到相关的记录! '); </script> ");
return;
}

CrystalReportViewer1.ReportSource = CrystalReportSource1;
CrystalReportViewer1.DataBind();
}

能帮我改改将非常感谢。。


我连的是ORACLE是数据库
但是建水晶报表是SQL的,这样应该没什么关系吧,字段是一致的



[解决办法]
水晶报表10本身就有打印功能,你还添什么代码呢?莫明其妙.如果你真的需要加一个 "打印 "按钮来打印(我觉得完全是多此一举),可以这样写:
protected void btnPrint_Click(object sender, System.EventArgs e)
{
// 指定打印机名称,这里是网络工作站Gigi上的打印机Hp Jet 6
string strPrinterName;
strPrinterName = @ "VCIT99 ";
// 设置打印页边距
PageMargins 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;
// 打印 // 打印报表。将 startPageN 和 endPageN
// 参数设置为 0 表示打印所有页。
ReportDoc.PrintToPrinter(1, false, 0, 0);

}
[解决办法]
你把定代在PageLoad事件中,不行的改PDF方式,如果可以的照以下做法:
使用 ActiveX 控制列印

在 Crystal Reports 的更新版本中,

~JKvkZ国E,bQx\

您可以使用新的 CrystalReportViewer.PrintMode 性指定列印模式。其中包含列型:ActiveX 和 PDF。

性定 PrintMode.PDF ,表在 Web 伺服器上出 PDF,然後以料流送到器。使用者可以利用,直接列印至印表。是跨平台相容的。
性定 PrintMode.ActiveX ,ActiveX 列印控制允使用者表直接列印至本印表。
注 意 在 Crystal Reports for Visual Studio 2005 中,符合 Microsoft 安全性需求起,有 ActiveX 列印控制安在本上。而是必成 .cab 案,人外部 URL 存取。PrintControl.cab 案可以 Business Objects 技支援站下取得,就可以 cab 案放在 Web 伺服器目中,以供 URL 存取之用。
若要在 Crystal Reports for Visual Studio 2005 站示 cab 案,下列 xml 加入站的 web.config 案:
<configSections>
<sectionGroup name= "businessObjects ">
<sectionGroup name= "crystalReports ">
<section name= "printControl " type= "System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null " />


</sectionGroup>
</sectionGroup>
</configSections>

<businessObjects>
<crystalReports>
<printControl>
<add key= "url " value= "http://myserver/PrintControl.cab " />
</printControl>
</crystalReports>
</businessObjects>
注意 只有 Internet Explorer 才支援 ActiveX 控制。若非 Internet Explorer 的用端 (FireFox、Safari、Mozilla 等) 列印,T的DMhOY教i?z网供R$f6

{5x0K软Z网u 'mI5中

回到 PDF 出方。
=====================================

经过我的测试,是IE升级了补丁,对摸态窗的安全加强了,所以就算你将文件放到本地服务器估计也安装失败,除非你自已写代码连续弹出两次摸态窗,才会提示安装,不过这样给用户是不可能的。

我测试过,LSG教*q$件e^件La将代码写入摸态窗,
?网Ij)-6网w~业\+LK-z*`

打开页面就自动弹出执行会出错,除非你设个定时器,过30秒或一分钟后再弹出是正常的。

所以完全可以将他的CAB下载回来放到本地服务器,然后写下面代码放到一个单独的页面放用户先安好。

先下载http://support.businessobjects.com/CRforVS2005/PrintControl.cab,放到自已的服务器上。

<object id= "CrystalPrintControl " classid= "CLSID:BAEE131D-290A-4541-A50A-8936F159563A " codebase= "http://127.0.0.1/rpt/PrintControl.cab " #Version= "10,2,0,1078 " viewastext> </object>

#Version是版本号,
s 'Z '理$E!4v的ck
如果你是其他的版本将版本号修改一下即可。


接着是加载报表失败的问题,因为我新建立一 个空项目是正常的,代码是肯定没有问题,所以问题一定在WEB.CONFIG配制文件里,因为我的环境比较复杂,所以WEB.CONFIG是很多配制,就 一个一个拆吧,拆到 <identity impersonate= "true "/> 时,也,正常了,原来是不能将他设为true,将他改为 <identity impersonate= "false "/> 就正常了。

读书人网 >.NET

热点推荐