因为工作需要,写了一个信息采集程序,然后用水晶报表导出到PDF,客户端点击打印按钮,直接重定向到生成的PDF文档,下载打印。
这一段导出到pdf的程序,是用了很长时间的,没有出现过问题,具体代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
private void pdfGenerate(DataTable dt,string strRptName)
{
CrystalDecisions.CrystalReports.Engine.ReportDocument rptDoc=new ReportDocument();
rptDoc.Load(this.Server.MapPath(strRptName + ".rpt"));
rptDoc.SetDataSource(dt);
CrystalDecisions.Shared.DiskFileDestinationOptions objFile=new DiskFileDestinationOptions();
objFile.DiskFileName=this.Server.MapPath(@"PDF\" + strRptName + "_" + this.Request.Cookies["cokYXSDM"].Value.Trim()+".pdf");
rptDoc.ExportOptions.ExportDestinationType=ExportDestinationType.DiskFile;
rptDoc.ExportOptions.DestinationOptions=objFile;
rptDoc.ExportOptions.ExportFormatType=ExportFormatType.PortableDocFormat;
rptDoc.Export();
}
但是,最近碰到一个问题,我的水晶报表定义成A4横向打印,不知为何,导出的PDF总是A4纵向,导致报表显示不全。一开始,我以为是服务器端没有装打印程序的问题,我在服务器上安装了相关打印机的驱动,在水晶报表设计中选择了该打印机,同时选择A4横向。结果,导出的PDF依然纵向。
查询了相关技术文章,在rptDoc.SetDataSource(dt);语句后面添加了两行代码:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
rptDoc.PrintOptions.PaperSize=PaperSize.PaperA4;
rptDoc.PrintOptions.PaperOrientation=PaperOrientation.Landscape;
意即在报表文件加载了数据后,设定报表为A4横向。测试导出到文件没有问题了。
这说明,水晶报表导出PDF默认的纸张格式是A4纵向,如果非此纸型的导出,需要在报表文件加载后,用语句特别描述具体的纸型,这样导出的文件才能正常。
其他的导出格式,我没有另行尝试,如果有朋友有兴趣,可以跟帖发一下尝试结果。