生活随笔
收集整理的這篇文章主要介紹了
C# PrintDocument 打印 和 打印预览
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
.封裝好的輔助類:
[csharp]?view plaincopy print?
using?System;?? using?System.Data;?? using?System.Drawing;?? using?System.Drawing.Printing;?? using?System.Windows.Forms;?? ?? namespace?RC.Finance?? {?? ?????? ?????? ?????? ????public?class?PrintHelper?? ????{?? ?????????? ?????????? ????????private?const?int?HeadHeight?=?40;?? ????????private?static?readonly?Font?TableFont?=?new?Font("Verdana",?10,?FontStyle.Regular);?? ????????private?readonly?SolidBrush?_drawBrush?=?new?SolidBrush(Color.Black);?? ?????????? ????????private?readonly?Font?_headFont?=?new?Font("Verdana",?20,?FontStyle.Bold);?? ?????????? ????????private?readonly?int?_yUnit?=?TableFont.Height?*?2;?? ????????public?int?TotalNum?=?0;?? ?????????? ????????private?DataRow?_dataRow;?? ????????private?DataTable?_dataTable;?? ????????private?int?_firstPrintRecordNumber;?? ????????private?string?_headText?=?string.Empty;?? ????????private?int?_pBottom;?? ????????private?int?_pHeigh;?? ?????????? ????????private?int?_pageLeft;?? ????????private?int?_pRight;?? ????????private?int?_pageTop;?? ????????private?int?_pWidth;?? ????????private?int?_pageRecordNumber;?? ????????private?PrintDocument?_printDocument;?? ????????private?PageSetupDialog?_pageSetupDialog;?? ????????private?int?_printRecordComplete;?? ?????????? ????????private?int?_printRecordNumber;?? ????????private?int?_printingPageNumber?=?1;?? ?????????? ?????????? ????????private?int?_totalPage;?? ????????private?int[]?_xUnit;?? ?? ?????????? ?????????? ?????????? ?????????? ?????????? ????????public?void?Print(DataTable?dt,?string?title)?? ????????{?? ????????????try?? ????????????{?? ????????????????CreatePrintDocument(dt,?title).Print();?? ????????????}?? ????????????catch?(Exception?ex)?? ????????????{?? ????????????????MessageBox.Show("打印錯(cuò)誤,請(qǐng)檢查打印設(shè)置!");?? ????????????}?? ????????}?? ?? ?????????? ?????????? ?????????? ?????????? ?????????? ????????public?void?PrintPriview(DataTable?dt,?string?title)?? ????????{?? ????????????try?? ????????????{?? ????????????????var?printPriview?=?new?PrintPreviewDialog?? ????????????????????{?? ????????????????????????Document?=?CreatePrintDocument(dt,?title),?? ????????????????????????WindowState?=?FormWindowState.Maximized?? ????????????????????};?? ????????????????printPriview.ShowDialog();?? ????????????}?? ????????????catch?(Exception?ex)?? ????????????{?? ????????????????MessageBox.Show("打印錯(cuò)誤,請(qǐng)檢查打印設(shè)置!");?? ????????????}?? ????????}?? ????????public?void?PrintSetting()?? ????????{?? ????????????try?? ????????????{?? ????????????????_pageSetupDialog.ShowDialog();?? ????????????}?? ????????????catch?(Exception?ex)?? ????????????{?? ????????????????MessageBox.Show("打印錯(cuò)誤,請(qǐng)檢查打印設(shè)置!");?? ????????????}?? ????????}?? ?????????? ?????????? ?????????? ????????private?PrintDocument?CreatePrintDocument(DataTable?dt,?string?title)?? ????????{?? ????????????_dataTable?=?dt;?? ????????????_headText?=?title;?? ?? ????????????var?pageSetup?=?new?PageSetupDialog();?? ?? ????????????_printDocument?=?new?PrintDocument?{?DefaultPageSettings?=?pageSetup.PageSettings?};?? ????????????_printDocument.DefaultPageSettings.Landscape?=?true;??? ?????????????? ????????????_pageTop?=?_printDocument.DefaultPageSettings.Margins.Top;?? ?????????????? ????????????_pBottom?=?_printDocument.DefaultPageSettings.Margins.Bottom;?? ????????????_pWidth?=?_printDocument.DefaultPageSettings.Bounds.Width;?? ????????????_pHeigh?=?_printDocument.DefaultPageSettings.Bounds.Height;?? ????????????_xUnit?=?new?int[_dataTable.Columns.Count];?? ????????????_printRecordNumber?=?Convert.ToInt32((_pHeigh?-?_pageTop?-?_pBottom?-?_yUnit)?/?_yUnit);?? ????????????_firstPrintRecordNumber?=?Convert.ToInt32((_pHeigh?-?_pageTop?-?_pBottom?-?HeadHeight?-?_yUnit)?/?_yUnit);?? ?? ????????????if?(_dataTable.Rows.Count?>?_printRecordNumber)?? ????????????{?? ????????????????if?((_dataTable.Rows.Count?-?_firstPrintRecordNumber)?%?_printRecordNumber?==?0)?? ????????????????{?? ????????????????????_totalPage?=?(_dataTable.Rows.Count?-?_firstPrintRecordNumber)?/?_printRecordNumber?+?1;?? ????????????????}?? ????????????????else?? ????????????????{?? ????????????????????_totalPage?=?(_dataTable.Rows.Count?-?_firstPrintRecordNumber)?/?_printRecordNumber?+?2;?? ????????????????}?? ????????????}?? ????????????else?? ????????????{?? ????????????????_totalPage?=?1;?? ????????????}?? ?? ????????????_printDocument.PrintPage?+=?PrintDocumentPrintPage;?? ????????????_printDocument.DocumentName?=?_headText;?? ?? ????????????return?_printDocument;?? ????????}?? ?? ?????????? ?????????? ?????????? ????????private?void?PrintDocumentPrintPage(object?sende,?PrintPageEventArgs?@event)?? ????????{?? ????????????int?tableWith?=?0;?? ????????????string?columnText;?? ????????????var?font?=?new?StringFormat?{?Alignment?=?StringAlignment.Center?};?? ????????????var?pen?=?new?Pen(Brushes.Black,?1);?? ? ????????????#region?設(shè)置列寬?? ?? ????????????foreach?(DataRow?dr?in?_dataTable.Rows)?? ????????????{?? ????????????????for?(int?i?=?0;?i?<?_dataTable.Columns.Count;?i++)?? ????????????????{?? ????????????????????int?colwidth?=?Convert.ToInt32(@event.Graphics.MeasureString(dr[i].ToString().Trim(),?TableFont).Width);?? ????????????????????if?(colwidth?>?_xUnit[i])?? ????????????????????{?? ????????????????????????_xUnit[i]?=?colwidth;?? ????????????????????}?? ????????????????}?? ????????????}?? ?? ????????????if?(_printingPageNumber?==?1)?? ????????????{?? ????????????????for?(int?cols?=?0;?cols?<=?_dataTable.Columns.Count?-?1;?cols++)?? ????????????????{?? ????????????????????columnText?=?_dataTable.Columns[cols].ColumnName.Trim();?? ????????????????????int?colwidth?=?Convert.ToInt32(@event.Graphics.MeasureString(columnText,?TableFont).Width);?? ????????????????????if?(colwidth?>?_xUnit[cols])?? ????????????????????{?? ????????????????????????_xUnit[cols]?=?colwidth;?? ????????????????????}?? ????????????????}?? ????????????}?? ????????????for?(int?i?=?0;?i?<?_xUnit.Length;?i++)?? ????????????{?? ????????????????tableWith?+=?_xUnit[i];?? ????????????}?? ? ????????????#endregion?? ?? ????????????_pageLeft?=?(@event.PageBounds.Width?-?tableWith)?/?2;?? ????????????int?x?=?_pageLeft;?? ????????????int?y?=?_pageTop;?? ????????????int?stringY?=?_pageTop?+?(_yUnit?-?TableFont.Height)?/?2;?? ????????????int?rowOfTop?=?_pageTop;?? ?? ?????????????? ????????????if?(_printingPageNumber?==?1)?? ????????????{?? ?????????????????? ????????????????var?arr?=?_headText.Split(new[]?{?"|"?},?StringSplitOptions.RemoveEmptyEntries);?? ????????????????if?(arr.Length?>?1)?? ????????????????{?? ????????????????????@event.Graphics.DrawString(arr[0],?? ????????????????????????_headFont,?? ????????????????????????_drawBrush,?? ????????????????????????new?Point(@event.PageBounds.Width?/?2,?_pageTop),?font);?? ????????????????}?? ?????????????????? ????????????????var?subtitleHeight?=?0;?? ????????????????for?(int?i?=?1;?i?<?arr.Length;?i++)?? ????????????????{?? ????????????????????@event.Graphics.DrawString(arr[i],?? ????????????????????????new?Font("Verdana",?12,?FontStyle.Regular),?? ????????????????????????_drawBrush,?? ????????????????????????new?Point(@event.PageBounds.Width?/?2,?_pageTop?+?_headFont.Height),?? ????????????????????????font);?? ????????????????????subtitleHeight?+=?new?Font("Verdana",?12,?FontStyle.Regular).Height;?? ????????????????}?? ?? ?????????????????? ????????????????if?(_dataTable.Rows.Count?<?_firstPrintRecordNumber)?? ????????????????{?? ????????????????????_pageRecordNumber?=?_dataTable.Rows.Count;?? ????????????????}?? ????????????????else?? ????????????????{?? ????????????????????_pageRecordNumber?=?_firstPrintRecordNumber;?? ????????????????}?? ?? ????????????????rowOfTop?=?y?=?(_pageTop?+?_headFont.Height?+?subtitleHeight?+?10);?? ????????????????stringY?=?_pageTop?+?_headFont.Height?+?subtitleHeight?+?10?+?(_yUnit?-?TableFont.Height)?/?2;?? ????????????}?? ????????????else?? ????????????{?? ?????????????????? ????????????????if?(_dataTable.Rows.Count?-?_printRecordComplete?>=?_printRecordNumber)?? ????????????????{?? ????????????????????_pageRecordNumber?=?_printRecordNumber;?? ????????????????}?? ????????????????else?? ????????????????{?? ????????????????????_pageRecordNumber?=?_dataTable.Rows.Count?-?_printRecordComplete;?? ????????????????}?? ????????????}?? ? ????????????#region?列名?? ?? ????????????if?(_printingPageNumber?==?1?||?_pageRecordNumber?>?TotalNum)??? ????????????{?? ?????????????????? ????????????????for?(int?cols?=?0;?cols?<=?_dataTable.Columns.Count?-?1;?cols++)?? ????????????????{?? ????????????????????columnText?=?_dataTable.Columns[cols].ColumnName.Trim();?? ?? ????????????????????int?colwidth?=?Convert.ToInt32(@event.Graphics.MeasureString(columnText,?TableFont).Width);?? ????????????????????@event.Graphics.DrawString(columnText,?TableFont,?_drawBrush,?x,?stringY);?? ????????????????????x?+=?_xUnit[cols];?? ????????????????}?? ????????????}?? ? ????????????#endregion?? ?? ????????????@event.Graphics.DrawLine(pen,?_pageLeft,?rowOfTop,?x,?rowOfTop);?? ????????????stringY?+=?_yUnit;?? ????????????y?+=?_yUnit;?? ????????????@event.Graphics.DrawLine(pen,?_pageLeft,?y,?x,?y);?? ?? ?????????????? ????????????int?printingLine?=?0;?? ????????????while?(printingLine?<?_pageRecordNumber)?? ????????????{?? ????????????????x?=?_pageLeft;?? ?????????????????? ????????????????_dataRow?=?_dataTable.Rows[_printRecordComplete];?? ????????????????for?(int?cols?=?0;?cols?<=?_dataTable.Columns.Count?-?1;?cols++)?? ????????????????{?? ????????????????????@event.Graphics.DrawString(_dataRow[cols].ToString().Trim(),?TableFont,?_drawBrush,?x,?stringY);?? ????????????????????x?+=?_xUnit[cols];?? ????????????????}?? ????????????????stringY?+=?_yUnit;?? ????????????????y?+=?_yUnit;?? ????????????????@event.Graphics.DrawLine(pen,?_pageLeft,?y,?x,?y);?? ?? ????????????????printingLine?+=?1;?? ????????????????_printRecordComplete?+=?1;?? ????????????????if?(_printRecordComplete?>=?_dataTable.Rows.Count)?? ????????????????{?? ????????????????????@event.HasMorePages?=?false;?? ????????????????????_printRecordComplete?=?0;?? ????????????????}?? ????????????}?? ?? ????????????@event.Graphics.DrawLine(pen,?_pageLeft,?rowOfTop,?_pageLeft,?y);?? ????????????x?=?_pageLeft;?? ????????????for?(int?cols?=?0;?cols?<?_dataTable.Columns.Count;?cols++)?? ????????????{?? ????????????????x?+=?_xUnit[cols];?? ????????????????@event.Graphics.DrawLine(pen,?x,?rowOfTop,?x,?y);?? ????????????}?? ?? ?? ????????????_printingPageNumber?+=?1;?? ?? ????????????if?(_printingPageNumber?>?_totalPage)?? ????????????{?? ????????????????@event.HasMorePages?=?false;?? ????????????????_printingPageNumber?=?1;?? ????????????????_printRecordComplete?=?0;?? ????????????}?? ????????????else?? ????????????{?? ????????????????@event.HasMorePages?=?true;?? ????????????}?? ????????}?? ????}?? }??
2.調(diào)用方法:
打印:new PrintHelper().Print(dataTable,title);
預(yù)覽:new PrintHelper().PrintPriview(dataTable,title);
3.效果:
轉(zhuǎn)載:http://blog.csdn.net/a497785609/article/details/71190960
總結(jié)
以上是生活随笔為你收集整理的C# PrintDocument 打印 和 打印预览的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。