C# winfrom打印技术初探
最近用到了winform去打印,網上查了一些資料,大概內容:
一 、首先有幾個類?PageSetupDialog 、 PrintDialog 、PrintDocument 、PrintPreviewControls,\PrintPreviewDialog。這幾個類的功能做簡要介紹
?
PageSetupDialog 這個是打印設置對話框。
PrintDialog 、打印對話框。按確定能觸發?printDocument1_PrintPage事件,或者通過?printDocument1.Print()觸發?printDocument1_PrintPage事件。
PrintDocument 、打印的具體內容在這個里面設置是打印資料的對象哦。需要在這個的PrintPage事件下面寫繪圖的的形狀什么的用GDI做。
PrintPreviewDialog:打印預覽對話框。
PrintPreviewControls\\這個是打印的一個預覽控件我這里沒有用到,應該是可以實時顯示用的。
二、具體的操作步驟
1、新建winform項目及創建窗體
2、拖取 打印 相關控件
?? PageSetupDialog 、 PrintDialog 、 PrintDocument 、PrintPreviewDialog
3、設置上述控件的Document屬性為相應的PrintDocument
4、設置按鈕等控件 及 添加相應按鈕事件
5、示意代碼如下
三、打印代碼如下
public?partial?class?Form3?:?Form
{
????public?Form3()
????{
????????InitializeComponent();
????????this.printDocument1.OriginAtMargins?=?true;//啟用頁邊距
????????this.pageSetupDialog1.EnableMetric?=?true;?//以毫米為單位
????}
????//打印設置
????private?void?btnSetPrint_Click(object?sender,?EventArgs?e)
????{
????????this.pageSetupDialog1.ShowDialog();?
????}
????//打印預覽
????private?void?btnPrePrint_Click(object?sender,?EventArgs?e)
????{
????????this.printPreviewDialog1.ShowDialog();?
????}
????//打印
????private?void?btnPrint_Click(object?sender,?EventArgs?e)
????{
????????if?(this.printDialog1.ShowDialog()?==?DialogResult.OK)
????????{
????????????this.printDocument1.Print();
????????}
????}
????//打印內容的設置
????private?void?printDocument1_PrintPage(object?sender,?System.Drawing.Printing.PrintPageEventArgs?e)
????{????????????????????????
????????打印內容?為?整個Form
????????//Image?myFormImage;
????????//myFormImage?=?new?Bitmap(this.Width,?this.Height);
????????//Graphics?g?=?Graphics.FromImage(myFormImage);
????????//g.CopyFromScreen(this.Location.X,?this.Location.Y,?0,?0,?this.Size);
????????//e.Graphics.DrawImage(myFormImage,?0,?0);
????????打印內容?為?局部的?this.groupBox1
????????//Bitmap?_NewBitmap?=?new?Bitmap(groupBox1.Width,?groupBox1.Height);
????????//groupBox1.DrawToBitmap(_NewBitmap,?new?Rectangle(0,?0,?_NewBitmap.Width,?_NewBitmap.Height));
????????//e.Graphics.DrawImage(_NewBitmap,?0,?0,?_NewBitmap.Width,?_NewBitmap.Height);?
????????//打印內容?為?自定義文本內容?
????????Font?font?=?new?Font("宋體",?12);
????????Brush?bru?=?Brushes.Blue;?
????????for?(int?i?=?1;?i?<=?5;?i++)
????????{
????????????e.Graphics.DrawString("Hello?world?",?font,?bru,?i*20,?i*20);
????????}
????}
四、打印中遇到的問題
1、紙張大小一般是多大的,打印的時候打印內容和紙張怎么適應?怎么計算打印的頁數,怎么計算需要打印多少頁。
A4紙張為210*297
?
2、邊距怎么設置。
答:邊距設置,
A.NET對于頁邊距是絕對的“大國沙文主義”,只認美制的“英寸”不認別的制式,其默認單位是“0.01英寸”。
而我們的OS就比較入鄉隨俗,知道用“毫米”。所以在PageSetupDialog窗體上中顯示的單位是“毫米”(取決于OS)。
由于兩邊制式不一樣,搭不上話,.NET就會強制的把OS的制式單位給轉換成它“習慣”的“英寸”。 也就是說:
在你點擊“頁面設置”對話框的“確定”按鈕后,.NET會自動進行“毫米->英寸”的隱式轉換。
B再度打開PageSetupDialog對話框時,PageSetupDialog對象卻并沒有進行與上面的隱式轉換對應的“英寸->毫米”逆向轉換,
而僅僅是簡單粗暴地將單位名改了,從“Display”(0.01英寸)改成了“TenthsOfAMillimeter”(0.1毫米),數值卻動都沒動一下。
也就是說不管你給PageSetupDialog什么值,它都認為是以0.1毫米為單位的數。
?
在printDoc.DefaultPageSettings.Margins = new System.Drawing.Printing.Margins(100, 100, 50, 50); 中給出了打印邊距設置為默認值是轉化為0.1倍的mm值,然后如果從
3、怎么打印多頁內容。
if (nPrintedHeight < nWinHeight)
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
}
?
4、怎么用代碼在頁面的固定位置粘貼預定義好的圖片。當圖片和文字重合的時候怎么把文字顯示到圖片的上面。
?
6、想要打印表格的時候怎么弄?
轉載于:https://www.cnblogs.com/ModBus/p/4983568.html
總結
以上是生活随笔為你收集整理的C# winfrom打印技术初探的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL查询本周、上周、本月、上个月份
- 下一篇: c# char unsigned_dll