如何在水晶报表打印的时候,代码修改打印机默认纸张?

mutely 2008-01-31 03:11:47
声明:本贴在图表区首发,图表区太冷,故在此重发,加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
...全文
448 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序海哥 2010-12-28
  • 打赏
  • 举报
回复
找到答案了吗?发我一份oneboy45@126.COM
安迪名爵 2008-02-26
  • 打赏
  • 举报
回复
你不要用水晶报表工具条上的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.
mutely 2008-02-26
  • 打赏
  • 举报
回复
没有好的办法,最后无奈,用Win32API编程,先是动态设置纸张为指定的纸张,然后打印,当打印任务发出后,在把打印机设置回原来的纸张类型。实现了要求,但是感觉非常不理想,希望高手能有更好的解决办法,以指点愚钝之处!这里需要结贴,但是没有人给出好的建议,只好按无答案结贴,希望楼上的几位朋友不要介意。
huisheng 2008-02-20
  • 打赏
  • 举报
回复
请我你找到答案了吗??我也找这个问题的解决办法

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧