日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

C# PrintDocument 打印 和 打印预览

發(fā)布時(shí)間:2023/12/8 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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??
  • {??
  • ????///?<summary>??
  • ????///?????打印,打印預(yù)覽???
  • ????///?</summary>??
  • ????public?class?PrintHelper??
  • ????{??
  • ????????//以下用戶可自定義??
  • ????????//當(dāng)前要打印文本的字體及字號(hào)??
  • ????????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;??
  • ????????//以下為模塊內(nèi)部使用??
  • ????????private?DataRow?_dataRow;??
  • ????????private?DataTable?_dataTable;??
  • ????????private?int?_firstPrintRecordNumber;??
  • ????????private?string?_headText?=?string.Empty;??
  • ????????private?int?_pBottom;??
  • ????????private?int?_pHeigh;??
  • ????????//當(dāng)前要所要打印的記錄行數(shù),由計(jì)算得到??
  • ????????private?int?_pageLeft;??
  • ????????private?int?_pRight;??
  • ????????private?int?_pageTop;??
  • ????????private?int?_pWidth;??
  • ????????private?int?_pageRecordNumber;??
  • ????????private?PrintDocument?_printDocument;??
  • ????????private?PageSetupDialog?_pageSetupDialog;??
  • ????????private?int?_printRecordComplete;??
  • ????????//每頁(yè)打印的記錄條數(shù)??
  • ????????private?int?_printRecordNumber;??
  • ????????private?int?_printingPageNumber?=?1;??
  • ????????//第一頁(yè)打印的記錄條數(shù)??
  • ????????//與列名無(wú)關(guān)的統(tǒng)計(jì)數(shù)據(jù)行的類目數(shù)(如,總計(jì),小計(jì)......)??
  • ????????private?int?_totalPage;??
  • ????????private?int[]?_xUnit;??
  • ??
  • ????????///?<summary>??
  • ????????///?????打印??
  • ????????///?</summary>??
  • ????????///?<param?name="dt">要打印的DataTable</param>??
  • ????????///?<param?name="title">打印文件的標(biāo)題</param>??
  • ????????public?void?Print(DataTable?dt,?string?title)??
  • ????????{??
  • ????????????try??
  • ????????????{??
  • ????????????????CreatePrintDocument(dt,?title).Print();??
  • ????????????}??
  • ????????????catch?(Exception?ex)??
  • ????????????{??
  • ????????????????MessageBox.Show("打印錯(cuò)誤,請(qǐng)檢查打印設(shè)置!");??
  • ????????????}??
  • ????????}??
  • ??
  • ????????///?<summary>??
  • ????????///?????打印預(yù)覽??
  • ????????///?</summary>??
  • ????????///?<param?name="dt">要打印的DataTable</param>??
  • ????????///?<param?name="title">打印文件的標(biāo)題</param>??
  • ????????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è)置!");??
  • ????????????}??
  • ????????}??
  • ????????///?<summary>??
  • ????????///?????創(chuàng)建打印文件??
  • ????????///?</summary>??
  • ????????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;?//設(shè)置打印橫向還是縱向??
  • ????????????//PLeft?=?30;?//DataTablePrinter.DefaultPageSettings.Margins.Left;??
  • ????????????_pageTop?=?_printDocument.DefaultPageSettings.Margins.Top;??
  • ????????????//PRight?=?DataTablePrinter.DefaultPageSettings.Margins.Right;??
  • ????????????_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;??
  • ????????}??
  • ??
  • ????????///?<summary>??
  • ????????///?????打印當(dāng)前頁(yè)??
  • ????????///?</summary>??
  • ????????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;??
  • ??
  • ????????????//第一頁(yè)??
  • ????????????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);??
  • ????????????????}??
  • ????????????????//副標(biāo)題??
  • ????????????????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;??
  • ????????????????}??
  • ??
  • ????????????????//設(shè)置為第一頁(yè)時(shí)行數(shù)???
  • ????????????????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??
  • ????????????{??
  • ????????????????//計(jì)算,余下的記錄條數(shù)是否還可以在一頁(yè)打印,不滿一頁(yè)時(shí)為假??
  • ????????????????if?(_dataTable.Rows.Count?-?_printRecordComplete?>=?_printRecordNumber)??
  • ????????????????{??
  • ????????????????????_pageRecordNumber?=?_printRecordNumber;??
  • ????????????????}??
  • ????????????????else??
  • ????????????????{??
  • ????????????????????_pageRecordNumber?=?_dataTable.Rows.Count?-?_printRecordComplete;??
  • ????????????????}??
  • ????????????}??
  • ?
  • ????????????#region?列名??
  • ??
  • ????????????if?(_printingPageNumber?==?1?||?_pageRecordNumber?>?TotalNum)?//最后一頁(yè)只打印統(tǒng)計(jì)行時(shí)不打印列名??
  • ????????????{??
  • ????????????????//得到datatable的所有列名??
  • ????????????????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);??
  • ??
  • ????????????//當(dāng)前頁(yè)面已經(jīng)打印的記錄行數(shù)??
  • ????????????int?printingLine?=?0;??
  • ????????????while?(printingLine?<?_pageRecordNumber)??
  • ????????????{??
  • ????????????????x?=?_pageLeft;??
  • ????????????????//確定要當(dāng)前要打印的記錄的行號(hào)??
  • ????????????????_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ò),歡迎將生活随笔推薦給好友。