如何在客户端打印或导出水晶报表?(来者有分)

时间:2022-12-10 08:32:06
我现在用水晶报表来做报表,但不知如何在客户端打印水晶报表,或把水晶报表导出至客户端,各位大侠请指教。

21 个解决方案

#1


关注

#2


导出到PDF或EXCEL或其它格式的文件打印.示例代码如下:
报表名称 myrpt=new 报表名称();
myrpt.ExportOptions.ExportDestinationType=CrystalDecisions.Shared.ExportDestinationType.DiskFile;
myrpt.ExportOptions.ExportFormatType=CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;
CrystalDecisions.Shared.DiskFileDestinationOptions opt=new CrystalDecisions.Shared.DiskFileDestinationOptions();
opt.DiskFileName=@"文件名";
myrpt.ExportOptions.DestinationOptions =opt;
myrpt.Export();

打印报表:
代码如下:

CrystalDecisions.CrystalReports.Engine.ReportDocument rd=new CrystalDecisions.CrystalReports.Engine.ReportDocument();
rd.Load(Server.MapPath("Crystalreport1.rpt"));
rd.PrintOptions.PrinterName="打印机名称";
rd.PrintToPrinter(1,true,0,0);

其中"打印机名称":如果是网络打印机,在打印机名称前面要加上"\\机器名".本地打印机也可以显示在DropDownList控件里让用户选择:
foreach(string iprt in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
this.DropDownList1.Items.Add(iprt);

#3


强烈关注

#4


风:你所说的打印是在一个LAN里,但我现的情况不是。

我可以将报表导出,但是导出在服务器端,有没有办法导出在客户端。

#5


不懂,客户端有没有安装水晶报表?

#6


据我所知是没办法直接在客户端导出的.但是可以在服务端导出后下载到客户端.

#7


风:我现在用也是这种办法,在服务器端导出,然后下到客户端

不能导出,能不能直接打印呢,我看深圳一家公司做的报表,可在客户端打印,不知他们乍个做的。

#8


风:我现在用的也是这个办法,没有其他方法吗

我看了深圳一家公司做的报表,可在客户端打印,不知他们是乍个做的。

#9


1.导出为一个文件,让客户下载到本地打印
2.用IE自带的打印功能打印

#10


双星大侠(jcyer):

没有其他办法了吗

#11


为什么我用了上面的代码,可以打印出报表,但报表的全部的参数值都不显示出来,是什么原因?如何才能将报表的全部的参数值都显示出来?
请帮忙!

#12


为什么我用了上面的代码,可以打印出报表,但报表的全部的参数值都不显示出来,是什么原因?如何才能将报表的全部的参数值都显示出来?
请帮忙!

#13


归纳起来,水晶报表的打印,大致有以下几种方法:
方法一:

浏览器可以在你按打印机图标时(包括选择打印菜单时)在后台从另一个网址打印页面。当用户按打印图标时,它的浏览页面没有任何变化,打印机从后台自动访问这个报表页面并且自动打印它。

方法二:
示例打印页面:
<html>
<head>
</head>
<body>
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB width=0 VIEWASTEXT></OBJECT>
<BUTTON onclick="doPreview()">打印预览</BUTTON> 
<BUTTON onclick="doPageSet()">打印</BUTTON>   
<script language=javascript>  
function doPageSet(){
  //Page Set
  WB.ExecWB(8,1)
}
function doPreview(){
  //Print
  WB.ExecWB(7,1)
}
</script>

</body>

</html>

方法三:
用IE的打印.调用window.print(),但这种办法对于页面上即有报表,又有其它控件情况就无法区分,不能达到只打印报表内容的目的;

方法四:
程序中通过输出到打印机(如上面的代码).

方法五:
导出到PDF或EXCEL或其它格式的文件打印.如上面的代码

#14


gz

#15


to:冷风清扬
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB width=0 VIEWASTEXT></OBJECT>
是什么对象组件?

#16


gz

#17


to :冷风清扬
请问用上面的方法二的时候要不要写下面的代码?
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB width=0 VIEWASTEXT></OBJECT>

#18


up

#19


我的水晶报表的变量是用参数赋值的。

参数赋值的代码是:
            discreteVal.Value = "ooop"
            paramValues.Add(discreteVal)
            myReport.DataDefinition.ParameterFields  ("Priority").ApplyCurrentValues(paramValues)

打印水晶报表的代码是:
Dim myReport As CrystalDecisions.CrystalReports.Engine.ReportClass = New Report9()

            myReport.Load()
            myReport.PrintOptions.PrinterName = "\\F\hp LaserJet 1000"
            myReport.PrintToPrinter(1, True, 0, 0)

为什么我用了上面的代码,可以打印出报表,但报表的全部的参数值都不显示出来,是什么原因?如何才能将报表的全部的参数值都显示出来?
请帮忙!

#20


gz

#21


看了许多资料,对水晶报表在客户端的打印只有两种方式:
导出在服务器端,然后客户端下载打印,
调用IE的打印
没有其他办法了。

#1


关注

#2


导出到PDF或EXCEL或其它格式的文件打印.示例代码如下:
报表名称 myrpt=new 报表名称();
myrpt.ExportOptions.ExportDestinationType=CrystalDecisions.Shared.ExportDestinationType.DiskFile;
myrpt.ExportOptions.ExportFormatType=CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;
CrystalDecisions.Shared.DiskFileDestinationOptions opt=new CrystalDecisions.Shared.DiskFileDestinationOptions();
opt.DiskFileName=@"文件名";
myrpt.ExportOptions.DestinationOptions =opt;
myrpt.Export();

打印报表:
代码如下:

CrystalDecisions.CrystalReports.Engine.ReportDocument rd=new CrystalDecisions.CrystalReports.Engine.ReportDocument();
rd.Load(Server.MapPath("Crystalreport1.rpt"));
rd.PrintOptions.PrinterName="打印机名称";
rd.PrintToPrinter(1,true,0,0);

其中"打印机名称":如果是网络打印机,在打印机名称前面要加上"\\机器名".本地打印机也可以显示在DropDownList控件里让用户选择:
foreach(string iprt in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
this.DropDownList1.Items.Add(iprt);

#3


强烈关注

#4


风:你所说的打印是在一个LAN里,但我现的情况不是。

我可以将报表导出,但是导出在服务器端,有没有办法导出在客户端。

#5


不懂,客户端有没有安装水晶报表?

#6


据我所知是没办法直接在客户端导出的.但是可以在服务端导出后下载到客户端.

#7


风:我现在用也是这种办法,在服务器端导出,然后下到客户端

不能导出,能不能直接打印呢,我看深圳一家公司做的报表,可在客户端打印,不知他们乍个做的。

#8


风:我现在用的也是这个办法,没有其他方法吗

我看了深圳一家公司做的报表,可在客户端打印,不知他们是乍个做的。

#9


1.导出为一个文件,让客户下载到本地打印
2.用IE自带的打印功能打印

#10


双星大侠(jcyer):

没有其他办法了吗

#11


为什么我用了上面的代码,可以打印出报表,但报表的全部的参数值都不显示出来,是什么原因?如何才能将报表的全部的参数值都显示出来?
请帮忙!

#12


为什么我用了上面的代码,可以打印出报表,但报表的全部的参数值都不显示出来,是什么原因?如何才能将报表的全部的参数值都显示出来?
请帮忙!

#13


归纳起来,水晶报表的打印,大致有以下几种方法:
方法一:

浏览器可以在你按打印机图标时(包括选择打印菜单时)在后台从另一个网址打印页面。当用户按打印图标时,它的浏览页面没有任何变化,打印机从后台自动访问这个报表页面并且自动打印它。

方法二:
示例打印页面:
<html>
<head>
</head>
<body>
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB width=0 VIEWASTEXT></OBJECT>
<BUTTON onclick="doPreview()">打印预览</BUTTON> 
<BUTTON onclick="doPageSet()">打印</BUTTON>   
<script language=javascript>  
function doPageSet(){
  //Page Set
  WB.ExecWB(8,1)
}
function doPreview(){
  //Print
  WB.ExecWB(7,1)
}
</script>

</body>

</html>

方法三:
用IE的打印.调用window.print(),但这种办法对于页面上即有报表,又有其它控件情况就无法区分,不能达到只打印报表内容的目的;

方法四:
程序中通过输出到打印机(如上面的代码).

方法五:
导出到PDF或EXCEL或其它格式的文件打印.如上面的代码

#14


gz

#15


to:冷风清扬
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB width=0 VIEWASTEXT></OBJECT>
是什么对象组件?

#16


gz

#17


to :冷风清扬
请问用上面的方法二的时候要不要写下面的代码?
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB width=0 VIEWASTEXT></OBJECT>

#18


up

#19


我的水晶报表的变量是用参数赋值的。

参数赋值的代码是:
            discreteVal.Value = "ooop"
            paramValues.Add(discreteVal)
            myReport.DataDefinition.ParameterFields  ("Priority").ApplyCurrentValues(paramValues)

打印水晶报表的代码是:
Dim myReport As CrystalDecisions.CrystalReports.Engine.ReportClass = New Report9()

            myReport.Load()
            myReport.PrintOptions.PrinterName = "\\F\hp LaserJet 1000"
            myReport.PrintToPrinter(1, True, 0, 0)

为什么我用了上面的代码,可以打印出报表,但报表的全部的参数值都不显示出来,是什么原因?如何才能将报表的全部的参数值都显示出来?
请帮忙!

#20


gz

#21


看了许多资料,对水晶报表在客户端的打印只有两种方式:
导出在服务器端,然后客户端下载打印,
调用IE的打印
没有其他办法了。