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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# winfrom打印技术初探

發布時間:2024/4/14 C# 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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打印技术初探的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。