C#中Winform下通用打印类(1)-ReportPrint

public class ReportPrint
    
{
        
private System.Windows.Forms.PrintPreviewDialog _PreviewDialog;
        
private System.Drawing.Printing.PrintDocument _PrintDocument;
        
private System.Data .DataView _Content;
        
internal PageSetup _PageSetup=new PageSetup ();
        
internal Title _Title=new Title ();
        
internal ReportHeader _ReportHeader=new ReportHeader ();
        
internal PageHeader _PageHeader=new PageHeader ();
        
internal PageDetail _PageDetail=new PageDetail ();
        
internal ReportTailer _ReportTailer=new ReportTailer ();
        
internal LineFrame _LineFrame=new LineFrame ();
        
internal ManyColumnsVariable _ManyColumnsVariable=new ManyColumnsVariable ();
        
private void Transfer(CaptionsContent _Captions)
        
{
            _Title ._TitleText 
=_Captions._TitleText ;
            _ReportHeader ._HeaderText_Left  
=_Captions._HeaderText_Left  ;
            _ReportHeader._HeaderText_Center  
=_Captions._HeaderText_Center ;
            _ReportHeader._HeaderText_Right  
=_Captions._HeaderText_Right  ;
            _ReportTailer ._TailerText_Left 
=_Captions._TailerText_Left   ;
            _ReportTailer._TailerText_Center 
=_Captions._TailerText_Center   ;
            _ReportTailer ._TailerText_Right  
=_Captions._TailerText_Right  ;
        }

        
private void PrintTitle(PrintPageEventArgs e)
        
{
            
if (Page>=FromPage && Page<=ToPage) 
            
{
                PressWork.Print(_Title ._Vertex_X
+Offset_X ,_Title ._Vertex_Y+Current_Y ,_Title ._Width ,_Title ._Height ,_Title ._TitleText ,_Title ._Font ,_Title ._Format,e);
            }

    
        }

        
private void PrintReportTailer(PrintPageEventArgs e)
        
{
            
            
if (Page>=FromPage && Page<=ToPage) 
            
{
                PressWork.Print (_ReportTailer ._Vertex_X_Left
+Offset_X , _ReportTailer ._Vertex_Y_Left+Current_Y , _ReportTailer ._Width_Left, _ReportTailer._Height_Left ,  _ReportTailer._TailerText_Left  ,_ReportTailer._Font_Left ,_ReportTailer._Format_Left ,e);
                PressWork.Print (_ReportTailer._Vertex_X_Center
+Offset_X ,_ReportTailer._Vertex_Y_Center+Current_Y ,_ReportTailer._Width_Center,_ReportTailer._Height_Center ,_ReportTailer._TailerText_Center ,_ReportTailer._Font_Center ,_ReportTailer._Format_Center ,e);
                PressWork.Print (_ReportTailer._Vertex_X_Right
+Offset_X , _ReportTailer._Vertex_Y_Right+Current_Y , _ReportTailer._Width_Right ,_ReportTailer._Height_Right , _ReportTailer._TailerText_Right ,_ReportTailer._Font_Right ,_ReportTailer._Format_Right ,e);
            }

        }
 
        
private void PrintPageHeaderText(PrintPageEventArgs e)
        
{
            
if (Page>=FromPage && Page<=ToPage) 
            
{
                
int Temp=_PageHeader._PageHeaderText .Length ;
                
for (int i=0;i<Temp;i++)
                
{
                    PressWork.Print (_PageHeader._Vertex_X [i]
+Offset_X,_PageHeader._Vertex_Y [i]+Current_Y,_PageHeader._Width [i],_PageHeader._Height [i],_PageHeader._PageHeaderText [i],_PageHeader._Font [i],_PageHeader._Format [i],e);
                }

            }

        }

        
private void PrintPageFrame(PrintPageEventArgs e)
        
{
            
if (Page>=FromPage && Page<=ToPage) 
            
{
                
int Temp=_LineFrame._Vertex_X .Length ;
                Rectangle[] Panes
=new Rectangle [Temp];
                
for (int i=0;i<Temp;i++)
                
{
                    Panes[i]
=new Rectangle (_LineFrame._Vertex_X[i]+Offset_X  ,_LineFrame._Vertex_Y[i] +Current_Y ,_LineFrame._Width[i]  ,_LineFrame._Height[i] );
                }

                
if (Panes.Length >0)
                
{
                    PressWork.Print (Panes,e);
                }

            }

        }

        
private void PrintPageDetail(PrintPageEventArgs e)
        
{
            
if (Page>=FromPage && Page<=ToPage) 
            
{
                
int Temp=_PageDetail._Vertex_X .Length ;
                
for (int i=0;i<Temp;i++)
                
{
                    
switch (_PageDetail._PrintDealType[i] )
                    
{
                        
case PrintDealType.Direct :PressWork.Print (_PageDetail._Vertex_X [i]+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString (),_PageDetail._Font [i],_PageDetail._Format [i],e);break;
                        
case PrintDealType.ThrowoffTailZero :PressWork.Print (_PageDetail._Vertex_X [i]+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],Function.DecimalThrowoffTailZero (_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ()),_PageDetail._Font [i],_PageDetail._Format [i],e);break;
                        
case PrintDealType.LitterToUpper :PressWork.Print (_PageDetail._Vertex_X [i]+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],Function.Litter2Upper(_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ()),_PageDetail._Font [i],_PageDetail._Format [i],e);break;
                        
case PrintDealType.HideZero :
                            
if (System.Decimal .Parse (_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ())!=0)
                            
{
                                PressWork.Print (_PageDetail._Vertex_X [i]
+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString (),_PageDetail._Font [i],_PageDetail._Format [i],e);
                            }

                            
break;
                        
case PrintDealType.HideOrThrowoffTailZero :
                            
if (System.Decimal .Parse (_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ())!=0)
                            
{
                                PressWork.Print (_PageDetail._Vertex_X [i]
+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],Function.DecimalThrowoffTailZero (_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ()),_PageDetail._Font [i],_PageDetail._Format [i],e);
                            }

                            
break;
                        
case PrintDealType.Percent:
                            PressWork.Print (_PageDetail._Vertex_X [i]
+Offset_X,_PageDetail._Vertex_Y [i]+Current_Y,_PageDetail._Width [i],_PageDetail._Height [i],Function.PercentTransfer(_Content[CurrentRecord][_PageDetail._FieldName [i]].ToString ()),_PageDetail._Font [i],_PageDetail._Format [i],e);
                            
break;
                    }

                }

            }

        }

        
private void PrintReportHeader(PrintPageEventArgs e)
        
{
            
if (Page>=FromPage && Page<=ToPage) 
            
{
                PressWork.Print (_ReportHeader ._Vertex_X_Left 
+Offset_X,_ReportHeader ._Vertex_Y_Left+Current_Y ,_ReportHeader ._Width_Left,_ReportHeader._Height_Left ,_ReportHeader._HeaderText_Left ,_ReportHeader._Font_Left ,_ReportHeader._Format_Left ,e);
                PressWork.Print (_ReportHeader._Vertex_X_Center
+Offset_X ,_ReportHeader._Vertex_Y_Center+Current_Y ,_ReportHeader._Width_Center ,_ReportHeader._Height_Center ,_ReportHeader._HeaderText_Center ,_ReportHeader._Font_Center ,_ReportHeader._Format_Center ,e);
                PressWork.Print (_ReportHeader._Vertex_X_Right
+Offset_X ,_ReportHeader._Vertex_Y_Right+Current_Y ,_ReportHeader._Width_Right ,_ReportHeader._Height_Right ,_ReportHeader._HeaderText_Right ,_ReportHeader._Font_Right ,_ReportHeader._Format_Right ,e);
            }

        }

        
private void PrintDocument(object sender, PrintPageEventArgs e)
        
{
            
while(true)
            
{
                PageInitialize();
                
if (Page==0)
                
{
                    ReportInitialize();
                                    Page
++;
                    
Title
                    
ReportHeader
                    
PageHeader and Frame
                    
Detail and Frame
                }

                
else
                
{
                                    Page
++;
                    
if (LeavePageHeight>=this._LineFrame ._RowHeight )
                    
{
                        
if (_PageHeader._RowHeight >0)
                        
{
                            PrintPageHeaderText(e);
                            PrintPageFrame(e);
                            LeavePageHeight
-=_LineFrame ._RowHeight ;
                            Current_Y
+=_LineFrame ._RowHeight ;
                        }

                    }

                    
while (LeavePageHeight>=this._LineFrame ._RowHeight && CurrentRecord<RecordNumber)
                    
{
                        PrintPageDetail(e);
                        CurrentRecord
++;
                        PrintPageFrame(e);
                        LeavePageHeight
-=_LineFrame ._RowHeight ;
                        Current_Y
+=_LineFrame ._RowHeight ;
                    }

                }


                
if (CurrentRecord<RecordNumber)
                
{
                    e.HasMorePages 
=true;

                }

                
else
                
{
                    
if (_ReportTailer._RowHeight >0)
                    
{
                        PrintReportTailer(e);
                    }

                    e.HasMorePages 
=false;
                    Page
=0;
                    
break;
                }

                
if (Page>=FromPage && Page<=ToPage) 
                
{
                    
if (Page==ToPage) e.HasMorePages =false;
                    
break;
                }


            }

        }

        
private void PrintDocumentManyColumns(object sender, PrintPageEventArgs e)
        
{
            
while(true)
            
{
                PageInitialize();
                
int 当前列=0;
                
                
if (Page==0)
                
{
                    ReportInitialize();
                    Page
++;
                    
Title
                    
ReportHeader
                    Hold(
true);

                }

                
else
                
{
                    Page
++;
                }

                
//#region PageHeader and Frame
                
                
int Current_Y_End=Current_Y;
                
int LeavePageHeight_End=LeavePageHeight;
                
int LeavePageHeightTemp=LeavePageHeight;
                
int Current_YTemp=Current_Y;
                
for (当前列=0;当前列<_ManyColumnsVariable._HeaderandDetailColumns;当前列++ )
                
{
                    Current_Y
=Current_YTemp;
                    LeavePageHeight
=LeavePageHeightTemp;
                    Conversion(当前列);
                    
                    
if (LeavePageHeight>=this._LineFrame ._RowHeight )
                    
{
                        
if (_PageHeader._RowHeight >0)
                        
{
                            PrintPageHeaderText(e);
                            PrintPageFrame(e);
                            LeavePageHeight
-=_LineFrame ._RowHeight ;
                            Current_Y
+=_LineFrame ._RowHeight ;
                        }

                    }

                    
while (LeavePageHeight>=this._LineFrame ._RowHeight  && CurrentRecord<RecordNumber)
                    
{
                        PrintPageDetail(e);
                        CurrentRecord
++;
                        PrintPageFrame(e);
                        LeavePageHeight
-=_LineFrame ._RowHeight ;
                        Current_Y
+=_LineFrame ._RowHeight ;
                    }

                    
if (当前列==0)
                    
{
                        Current_Y_End
=Current_Y;
                        LeavePageHeight_End
=LeavePageHeight;
                    }

                    
if (CurrentRecord>=RecordNumber) break;
                }

                Current_Y
=Current_Y_End;
                LeavePageHeight
=LeavePageHeight_End;

                
if (CurrentRecord<RecordNumber)
                
{
                    e.HasMorePages 
=true;
                }

                
else
                
{
                    
if (_ReportTailer._RowHeight >0)
                    
{
                        PrintReportTailer(e);
                    }

                    Hold(
false);
                    Page
=0;
                    e.HasMorePages 
=false;
                    
break;
                }

                
if (Page>=FromPage && Page<=ToPage) 
                
{
                    
if (Page==ToPage)
                    
{
                        Hold(
false);
                        e.HasMorePages 
=false;
                    }

                    
break;
                }

            }

        }

        
private void Hold(bool 保留)
        
{
            
将X值保留或还原
        }

        
private void Conversion(int Column)
        
{
            
int Temp;
            Temp
=_PageHeader._Vertex_X .Length;
            
for ( int i=0;i<Temp;i++)
            
{
                _PageHeader._Vertex_X[i]
=_ManyColumnsVariable._Vertex_X_PageHeader[i]+Column*_ManyColumnsVariable._Offset_X_Columns  ;
            }

            Temp
=_PageDetail._Vertex_X .Length ;
            
for (int i=0;i<Temp;i++)
            
{
                _PageDetail._Vertex_X [i]
=_ManyColumnsVariable._Vertex_X_PageDetail [i]+Column*_ManyColumnsVariable._Offset_X_Columns;
            }

            Temp
=_LineFrame._Vertex_X .Length ;
            
for (int i=0;i<Temp;i++)
            
{
                _LineFrame._Vertex_X [i]
=_ManyColumnsVariable._Vertex_X_LineFrame [i]+Column*_ManyColumnsVariable._Offset_X_Columns;
            }

        }

        
private int RecordNumber;
        
private int CurrentRecord;
        
private int Page;
        
private int FromPage;//选择打印页
        private int ToPage;//选择打印页
        private int AvailablePageHeight;
        
private int LeavePageHeight;
        
private int Current_Y;
        
private int Offset_X;
        
public ReportPrint()
        
{
            _PrintDocument
=new PrintDocument ();
            
this._PreviewDialog = new System.Windows.Forms.PrintPreviewDialog();
            
this._PreviewDialog.AutoScrollMargin = new System.Drawing.Size(00);
            
this._PreviewDialog.AutoScrollMinSize = new System.Drawing.Size(00);
            
this._PreviewDialog.ClientSize = new System.Drawing.Size(480360);
            
            
this._PreviewDialog.Enabled = true;
            
this._PreviewDialog.Location = new System.Drawing.Point(00);
            
this._PreviewDialog.MaximumSize = new System.Drawing.Size(00);
            
this._PreviewDialog.Name = "打印预览";
            
this._PreviewDialog.Opacity = 1;
            
this._PreviewDialog.TransparencyKey = System.Drawing.Color.Empty;
            
this._PreviewDialog.Visible = false;
        
            
this._PreviewDialog .Document =this._PrintDocument ;
        }

        
private void ReportInitialize()
        
{
            Offset_X
=_PageSetup.Margin_Left ;
            RecordNumber
=_Content.Count ;
            Page
=0;
            CurrentRecord
=0;
            AvailablePageHeight
=_PageSetup .Paper_Height-_PageSetup.Margin_Top -_PageSetup.Margin_Bottom ;
        }

        
private void PageInitialize()
        
{
            LeavePageHeight
=AvailablePageHeight;
            Current_Y
=_PageSetup.Margin_Top ;
        }

        
private void PrintInitialize()
        
{
            
if (_PageSetup._PageSettings .PrinterSettings.PrintRange==System.Drawing .Printing .PrintRange .AllPages )
            
{
                ToPage
=int.MaxValue ;
                FromPage
=0;
            }

            
else
            
{
                FromPage
=_PageSetup._PageSettings .PrinterSettings .FromPage ;//选择打印页
                ToPage=_PageSetup._PageSettings .PrinterSettings .ToPage ;//选择打印页
                
            }

            
if (_PageSetup._PageSettings .Landscape )
            
{
                _PageSetup.Paper_Width 
=_PageSetup._PageSettings .PaperSize .Height ;
                _PageSetup.Paper_Height 
=_PageSetup._PageSettings .PaperSize .Width ;
                _PageSetup.Margin_Top 
=_PageSetup._PageSettings .Margins .Top ;
                _PageSetup.Margin_Left 
=_PageSetup._PageSettings .Margins .Left ;
                _PageSetup.Margin_Bottom 
=_PageSetup._PageSettings .Margins .Bottom ;
            }

            
else
            
{
                _PageSetup.Paper_Width 
=_PageSetup._PageSettings .PaperSize .Width ;
                _PageSetup.Paper_Height 
=_PageSetup._PageSettings .PaperSize .Height ;
                _PageSetup.Margin_Top 
=_PageSetup._PageSettings .Margins .Top ;
                _PageSetup.Margin_Left 
=_PageSetup._PageSettings .Margins .Left ;
                _PageSetup.Margin_Bottom 
=_PageSetup._PageSettings .Margins .Bottom ;
            }

        }

        
public void Print(System.Data .DataView _MostContent,CaptionsContent _Captions,bool _PreView,string _TaskName,PageSettings _PageSettings)
        
{
            
if (_PageSettings!=null)
            
{

                
//设置PageSetup

                _PageSetup._PageSettings 
=_PageSettings;
                
                
//设置打印文档
                _PrintDocument.PrinterSettings =_PageSettings.PrinterSettings ;
                _PrintDocument.DefaultPageSettings 
=_PageSettings;
                PrintInitialize();
                
//_PrintDocument.PrinterSettings =_PageSetup._PrinterSet  ;
            }

            
else
            
{
                
throw new System .Exception ("打印设置错误");
            }


            
//string DefaultPrinter=_PrintDocument.PrinterSettings .PrinterName ;//保存缺省打印机
            
//System.Drawing .Printing .PrinterSettings _DefaultPrinterSet=_PrintDocument.PrinterSettings ;
            
//_PrintDocument.PrinterSettings .PrinterName =_PageSetup.Printer_Name ;//使用自定打印机
            _Content=_MostContent;
            Transfer(_Captions);
            ReportInitialize();
            _PrintDocument.DefaultPageSettings 
=_PageSetup._PageSettings ;
            
if (_ManyColumnsVariable._HeaderandDetailColumns >1)
            
{
                
this._PrintDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.PrintDocumentManyColumns);
            }

            
else
            
{
                
this._PrintDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.PrintDocument);
            }

            
this._PrintDocument .DocumentName =_TaskName;
            
if (_PreView)
            
{
                
this._PreviewDialog .ShowDialog ();
            }

            
else
            
{
                
this._PrintDocument .Print ();
            }

            
if (_ManyColumnsVariable._HeaderandDetailColumns >1)
            
{
                
this._PrintDocument.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(this.PrintDocumentManyColumns);
            }

            
else
            
{
                
this._PrintDocument.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(this.PrintDocument);
            }

            
//this._PrintDocument.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(this.PrintDocument);
            
//_PrintDocument.PrinterSettings=_DefaultPrinterSet;
            
//_PrintDocument.PrinterSettings .PrinterName=DefaultPrinter;//恢复缺省打印机
        }

    }

posted on 2005-04-03 00:07  爱好  阅读(3424)  评论(3)    收藏  举报