c#winform水晶报表怎么控制纸张的大小

[复制链接]
查看11 | 回复0 | 2009-12-11 19:45:38 | 显示全部楼层 |阅读模式
因为水晶报表的PaperSize是enum类型,但有时客户用的纸张不在其定义范围内,虽然在设计报表时可以选择目的打印机和纸型,但如果重新配置过该打印机则报表默认纸型不再有效,报表将按A4进行预览且会失真。打印的基本代码:CrystalReport1 report = new CrystalReport1(); //Report为你自己的报表名PageMargins margins;margins = Report.PrintOptions.PageMargins;margins.bottomMargin = 250;margins.leftMargin = 350;margins.rightMargin = 350;margins.topMargin = 350;// Apply the page margins.Report.PrintOptions.ApplyPageMargins(margins);// Select the printer.string printerName = "\\\\局域网机器名\\打印机名(例如HP 2100)"; //本地打印机直接指定名称Report.PrintOptions.PrinterName = printerName;
//指定打印机名称Report.PrintOptions.PaperSize = PaperSize.PaperA4; //指定纸张尺寸report.PrintToPrinter(1, true, 1, 4);本文由xwdd129编写,转载请注明出处,谢谢!下面简单就打印中的参数进行说明:PrintOptions类,提供用于设置报表打印选项的属性和方法。PrintOptions成员:
PageContentHeight---Int32,获取页面内容的高度
PageContentWidth---Int32,获取页面内容的宽度
PageMargins---获取报表的边距
PageOrientation---获取或设置打印机纸张方向
Pagesize---获取或设置当前打印机纸张的大小
PrinterName---字符串,获取或设置报表所使用的打印机名称ReportDocument.PrintToPrinter方法public virtual void PrintToPrinter( int nCopies, bool collated, int startPageN, int endPageN )
nCopies 指明要打印的分数
collated 指明是否逐份打印
startPageN 指明要打印的第一页
endPageN 指明要打印的最后一页发表于 @ 2006年06月01日 16:00:00|评论(3)|编辑新一篇: 正在换工作…… | 旧一篇: 关于推模式水晶报表数据源的设置问题评论#DaChu 发表于2007-09-24 12:04:54 IP: 121.28.161.*margins = Report.PrintOptions.PageMargins其中Report需要添加哪个引用?我的是11.5版本,使用CRAXDRT.Report系统告之:不包含PrintOptions定义谢谢[email protected]#pshy 发表于2007-12-18 09:48:17 IP: 59.36.90.*Papersize里面就只有那些纸张格式,请问还能增加自定义的纸张???#pshy 发表于2007-12-18 09:49:46 IP: 59.36.90.*或者能自定义一个类似Papersize的类吗?因为水晶报表的PaperSize是enum类型,但有时客户用的纸张不在其定义范围内,虽然在设计报表时可以选择目的打印机和纸型,但如果重新配置过该打印机则报表默认纸型不再有效,报表将按A4进行预览且会失真。//获取本机所有打印机将其名称填充到comboBoxPrinters中:包含本地和网络打印机foreach(string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters){
this.comboBoxPrinters.Items.Add(printer);}//当从comboBoxPrinters中选择打印机时获取其支持的纸张大小将其填充到listBoxPapersthis.listBoxPapers.Items.Clear();string printer = this.comboBoxPrinters.Text;this.m_printer = printer;Microsoft.Win32.RegistryKey rk;if(!this.comboBoxPrinters.Text.StartsWith(@"\\"))
//本地打印机
rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers\\" + this.comboBoxPrinters.Text + "\\DsDriver");else
//网络打印机{
string[] p = printer.Remove(0,2).Split(new char[] { '\\' });
string path = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Providers\\LanMan Print Services\\Servers\\" + p[0] + "\\Printers\\" + p[1] + "\\DsDriver";
rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(path);}string[] papers = (string[])(rk.GetValue("printMediaSupported"));for(int i=0;i -1)
{
text2 = text2.Substring(0, num4);
}
short num5 = Marshal.ReadInt16((IntPtr) (((long) ptr2) + (num3 * 2)));
int num6 = Marshal.ReadInt32((IntPtr) (((long) ptr3) + (num3 * 8)));
int num7 = Marshal.ReadInt32((IntPtr) ((((long) ptr3) + (num3 * 8)) + 4));
sizeArray1[num3] = System.Convert.ToInt32(num5);
}
Marshal.FreeCoTaskMem(ptr1);
Marshal.FreeCoTaskMem(ptr2);
Marshal.FreeCoTaskMem(ptr3);
return sizeArray1;
}
private static int FastDeviceCapabilities(short capability, IntPtr pointerToBuffer, int defaultValue, string printerName)
{
int num1 = DeviceCapabilities(printerName, OutputPort, capability, pointerToBuffer, IntPtr.Zero);
if (num1 == -1)
{
return defaultValue;
}
return num1;
}
}//根据纸型名称在其名称列表中的索引,获取该索引在调用Get_PaperSizes后的size数组中的对应值int[] sizes = PaperSizeGetter.Get_PaperSizes(printerName);int paperSizeid = sizes[this.listBoxPapers.SelectedIndex];//将该size赋值给报表对象report.PrintOptions.PaperSize = (CrystalDecisions.Shared.PaperSize)(paperSizeid);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行