1

我有 Visual Studio 2010 企业版。

这是我的代码,它适用于所有其他事情,但它不会在运行时改变边距。即使 , 等的值objRpt.PrintOptions.PageMargins.leftMargin发生rightmargin变化,它也不会反映在输出中,也不会反映CrystalReportViewerHardcopy输出中。

这是代码:

CrystalReport1 objRpt;
objRpt = new CrystalReport1();
adepter.Fill(Ds, "Customer");
objRpt.SetDataSource(Ds);
MessageBox.Show("Left margin:"+objRpt.PrintOptions.PageMargins.leftMargin.ToString()); //Here it shows 1440 

objRpt.PrintOptions.PrinterName = "HP LaserJet 1020";
PageMargins margins = objRpt.PrintOptions.PageMargins;

margins.bottomMargin = 350;
margins.leftMargin = 350;
margins.rightMargin = 350;
margins.topMargin = 350;
objRpt.PrintOptions.ApplyPageMargins(margins);
MessageBox.Show("Left margin:"+objRpt.PrintOptions.PageMargins.leftMargin.ToString()); 

//Here it shows 350 BUT no use.

我设法在设计时通过右键单击报告>设计>页面设置来设置边距。如果我在此处设置,边距工作完美,它们反映在报告查看器和硬拷贝中。但是当我使用上面的代码时,这不会发生。

4

1 回答 1

1

通过一些挖掘,在使用 Crystal Reports Viewer 时,Crystal Reports 边距设置似乎被默认打印机设置覆盖(至少对于 windows 窗体中的 Crystal Reports Viewer 并单击顶部的打印按钮)报告查看器)。一个可能的解决方法是使用您自己的打印按钮并调用 PrintToPrinter,它尊重您自己的边距设置。其他解决方法包括: - 使用必要的空白区域编辑报告以模仿边距 - 拦截打印调用并调整边距(我不记得头顶上的函数调用的名称) - 设置默认值打印机为“无打印机”的报告。从报告查看器中选择打印机时,它应该应用默认的打印机设置。

我在处理打印身份证的应用程序时遇到了这个问题。调用 PrintToPrinter() 不会强制在卡片中留出空白,这是想要的。通过报告查看器运行它,然后单击那里的打印按钮将强制它使用打印机的默认设置 - 边距为 0.17" 左右。结果是卡片无法正确打印。

于 2012-04-26T20:02:46.850 回答