声明:本贴在图表区首发,图表区太冷,故在此重发,加50分,两贴150分,混合给分。
http://topic.csdn.net/u/20080131/13/835e5317-e469-48eb-ab0d-d87ac458667e.html
问题困扰多日亟待解决。水晶报表打印特殊规格的纸张(自定义纸张,单据),不论是通过CrystalReportViewer打印,还是用报表的PrintToPrinter(1,   true,   1,   1)方法打印,打印时的纸张都是按系统打印机的“打印首选项-高级-纸张/输出-纸张规格”所设置的纸张规格打印的,尽管我设置报表的rpt.PrintOptions.PaperSize   =   DirectCast(pszPagerSize.RawKind,   PaperSize),打印也会按“打印首选项-高级-纸张/输出-纸张规格”处设置的纸张打印。 
如何,在水晶报表打印时,用代码设置“打印首选项-高级-纸张/输出-纸张规格”,为我指定的纸张? 
问题要求是,系统打印机的“打印首选项-高级-纸张/输出-纸张规格”纸张设置是A4(默认),在水晶报表打印时通过代码控制使打印能够按我指定的特殊规格的纸张打印,打印结束后需要保证依然是系统的“打印首选项-高级-纸张/输出-纸张规格”纸张设置还是A4 
代码示例: 
            系统是“打印首选项-高级-纸张/输出-纸张规格”纸张设置是A4 
            下面的pszPagerSize是一个特殊规格的纸张,它的正确性毋庸置疑,有个Function实现它的获得,这里为了简便可以换成其他的纸张,比如A3。 
            下面的代码打印完成是按A4   打印的,问题是如何代码控制按pszPagerSize(A3)打印 
                
              Dim   pszPagerSize   As   New   System.Drawing.Printing.PaperSize 
            Dim   rpt   As   New   MyCrystalReport1 
            rpt.PrintOptions.PrinterName   =   document.PrinterSettings.PrinterName 
            ‘此处可以换成其他类型纸张,比如A3 
            rpt.PrintOptions.PaperSize   =   DirectCast(pszPagerSize.RawKind,   PaperSize) 
            rpt.PrintToPrinter(1,   True,   1,   1) 其实我的目的非常简单,就是想保留打印默认常用纸张设置(打印首选项-高级-纸张/输出-纸张规格),在打印单据时不需要在去通过PrintDialog等方式人为手动去选择改变打印机特殊单据纸张,打印单据时,代码控制自动按特殊单据纸张打印,不影响系统打印机设置。 
我的打印机是针式打印,有多种型号,主要是Epson   LQ670K、LQ670K+、LQ680K。 我用的是CrystalReports   for   VS.Net   2005

解决方案 »

  1.   

    没有好的办法,最后无奈,用Win32API编程,先是动态设置纸张为指定的纸张,然后打印,当打印任务发出后,在把打印机设置回原来的纸张类型。实现了要求,但是感觉非常不理想,希望高手能有更好的解决办法,以指点愚钝之处!这里需要结贴,但是没有人给出好的建议,只好按无答案结贴,希望楼上的几位朋友不要介意。
      

  2.   

    你不要用水晶报表工具条上的Print按钮,可以另外加一个Button实现打印方法:
    ...
    string reportPath = Application.StartupPath;                ReportDocument doc = new ReportDocument();
                
                    doc.PrintOptions.PrinterName = "TOSHIBA e-STUDIO282Series PCL6";                switch (CmbStyle.Text)
                    {
                        case "通用合格证":
                            reportPath += @"\CrystalReport\Report\CrystalGenericCertify.rpt";   //获取报表路径
                            P_Str_cmdtxt = "select * from ( select * from tb_CheckPrd " + wheresql + " ) a inner join tb_PrdDrawing on a.PrdModel = tb_PrdDrawing.PrdModel";
                            P_ds = baseinfo.GetPrdCertDataSet(P_Str_cmdtxt);
                            doc.Load(reportPath);
                            doc.SetDataSource(P_ds.Tables[0].DefaultView);
                            this.crystalReportViewerPrd.ReportSource = doc;
                            crystalReportViewerPrd.DisplayGroupTree = false;
                            doc.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA3; //假设为A3纸张,打印机默认为A4。
                            doc.PrintToPrinter(1, false, 0, 0);
                            break;
                     ....
    程序从A3直接打印,此时默认纸张仍是A4.
      

  3.   

    找到答案了吗?发我一份[email protected]