在VB6中,若是要自定义纸张很方便:
Rpt.PaperSize = crPaperUser
Rpt.SetUserPaperSize lZZG, lZZKhtml
但在C#中却不行了,没有发现 SetUserPaperSize。如今同事的问题是预览时很正常显示中一刀,但点击自带的工具栏打印时,就是 Letter 纸。网络
本想用 Reflector 跟踪出是否有哪一个地方能够利用的,没有结果。
再找网络上的说法,终于在
http://www.cnblogs.com/zeroone/p/3306172.html
中看到关键一行
rptDoc.PrintToPrinter(1, true, 0, 0);工具
它有一行:PrinterSettings printerSettings = document.PrinterSettings;
而系统自带的工具栏打印时,则是
PrinterSettings settings = new PrinterSettings();this
CrystalDecisions.Windows.Forms.CrystalReportViewer
public virtual void PrintReport()
{
this.pageView.PrintReport();
}spa
CrystalDecisions.Windows.Forms.PageView
public virtual void PrintReport()
{
ReportDocumentBase activeDocument = this.GetActiveDocument();
if (activeDocument != null)
{
activeDocument.Print();
}
}orm
CrystalDecisions.Windows.Forms.ReportDocumentBase
public void Print()
{
}
想代替,但里面的代码引用了较多私有方法(如:GetLastPageNumber)htm
若是能重写 PrinterSettings 将是无比兴奋。
可是,没有成功blog
namespace CrystalDecisions.Windows.Forms
{
class PrinterSettings : System.Drawing.Printing.PrinterSettings
{
public PrinterSettings()
: base()
{
// 它是只读的,另外一个对应变量又是私有的
this.DefaultPageSettings = new PageSettings(this);
}
}ci
class PageSettings:System.Drawing.Printing.PageSettings
{
public PageSettings(System.Drawing.Printing.PrinterSettings printerSettings):base(printerSettings)
{
base.PaperSize = new System.Drawing.Printing.PaperSize("Temp", 100, 100);
}
}
}get