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

歡迎訪問 生活随笔!

生活随笔

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

C#

C# 使用Microsoft.Reporting打印票据

發布時間:2024/8/1 C# 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 使用Microsoft.Reporting打印票据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

打印票據的功能,很多軟件都用到,C# Winform開發的桌面管理軟件,大多數情況下需要打印票據功能。作為成熟的軟件,打印票據的功能需要滿足如下條件:
1、可以使用針式打印機自動打印,自動走紙。
2、可以靈活設置紙張尺寸。
3、票據設計和業務功能分開,數據可以自動“灌輸”到票據模板中。
4、可以動態加載模板,方便各單位選擇適合自己的票據模板,模板升級不需要調整代碼。
Microsoft.Reporting提供了票據打印功能,它可以操作畫布,通過自由繪制的方式打印各種報表,例如繪制表格,在指定位置打印文字等等。但是這種方式需要通過代碼操控,如果用戶提出需要調整票據格式,就需要升級程序。

有沒有辦法,報表的樣式不通過代碼操控,而是可視化編輯,最終表達到一個文件中,后期用戶如果要調整樣式,只需要升級這個文件呢?
需要用到Microsoft.Reporting + RDLC,RDLC負責模板設計,Microsoft.Reporting負責調用模板并控制打印。

```csharp public class PrintHelper3{private Size rdlcPageSize = new Size();public LocalReport LoadFile(string rdlcfile, string sourceName, DataTable sourceTable){LocalReport report = new LocalReport();//設置需要打印的報表的文件名稱。report.ReportPath = rdlcfile;//創建要打印的數據源ReportDataSource source = new ReportDataSource(sourceName, sourceTable);report.SetParameters(new ReportParameter[] {new ReportParameter("TimeNow", DateTime.Now.ToString()),new ReportParameter("ReportTitle", PubConstant.REPORTTITLE)});m_streams = new List<Stream>();report.DataSources.Add(source);//刷新報表中的需要呈現的數據report.Refresh();rdlcPageSize.Width = report.GetDefaultPageSettings().PaperSize.Width;rdlcPageSize.Height = report.GetDefaultPageSettings().PaperSize.Height;//OutputFormat 如果字體太大,可以用PDF格式,首選EMF格式//一等分一整張28cm,寬度是固定的:21.4cm;二等分高度是:13.9cm,三等分的話高度是9.3cm。 //紙寬指標反映出打印機最大打印寬度,通用打印機的該項指標一般為9英寸和13.6英寸;//紙厚度則反映出打印頭的擊打能力,這項指標對于需要復寫拷貝的用途很重要。string deviceInfo ="<DeviceInfo>" +"<OutputFormat>EMF</OutputFormat>" +"<PageWidth>21cm</PageWidth>" +"<PageHeight>13.9cm</PageHeight>" +"<MarginTop>0cm</MarginTop>" +"<MarginLeft>0cm</MarginLeft>" +"<MarginRight>0cm</MarginRight>" +"<MarginBottom>0cm</MarginBottom>" +"</DeviceInfo>";Warning[] warnings;//將報表的內容按照deviceInfo指定的格式輸出到CreateStream函數提供的Stream中。report.Render("Image", deviceInfo, CreateStream, out warnings);return report;}//聲明一個Stream對象的列表用來保存報表的輸出數據//LocalReport對象的Render方法會將報表按頁輸出為多個Stream對象。private List<Stream> m_streams = null;//用來提供Stream對象的函數,用于LocalReport對象的Render方法的第三個參數。private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek){//如果需要將報表輸出的數據保存為文件,請使用FileStream對象。Stream stream = new MemoryStream();m_streams.Add(stream);return stream;}//用來記錄當前打印到第幾頁了private int m_currentPageIndex = 0;public void Print(string printername,Size size ){//size = rdlcPageSize;m_currentPageIndex = 0;if (m_streams == null || m_streams.Count == 0) return;//聲明PrintDocument對象用于數據的打印PrintDocument printDoc = new PrintDocument();//指定需要使用的打印機的名稱,使用空字符串""來指定默認打印機printDoc.PrinterSettings.PrinterName = printername;//printDoc.PrinterSettings.PrinterName = "Microsoft XPS Document Writer";//判斷指定的打印機是否可用if (!printDoc.PrinterSettings.IsValid){MessageBox.Show("未發現打印機 " + printDoc.PrinterSettings.PrinterName, "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);return;}//聲明PrintDocument對象的PrintPage事件,具體的打印操作需要在這個事件中處理。//指定是否橫向打印 printDoc.DefaultPageSettings.Landscape = false;//827 552printDoc.DefaultPageSettings.PaperSize = new PaperSize("Custom Size 1", size.Width,size.Height);printDoc.PrintPage += new PrintPageEventHandler(PrintPage);//執行打印操作,Print方法將觸發PrintPage事件。//將寫好的格式給打印預覽控件以便預覽//PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog();//printPreviewDialog1.Document = printDoc;//顯示打印預覽//DialogResult result = printPreviewDialog1.ShowDialog();printDoc.Print();//釋放資源foreach (Stream stream in m_streams){stream.Dispose();stream.Close();}m_streams = null;}private void PrintPage(object sender, PrintPageEventArgs ev){//Metafile對象用來保存EMF或WMF格式的圖形,//我們在前面將報表的內容輸出為EMF圖形格式的數據流。m_streams[0].Position = 0;Metafile pageImage = new Metafile(m_streams[0]);//這里的Graphics對象實際指向了打印機//這幾個參數很重要,否則會出現打印很大的現象int w = Convert.ToInt32(ev.PageBounds.Width / 1.8);int h = Convert.ToInt32(ev.PageBounds.Height / 1.8);ev.Graphics.DrawImage(pageImage, ev.PageBounds, 0, 0, w, h, System.Drawing.GraphicsUnit.Millimeter);m_streams[m_currentPageIndex].Close();m_currentPageIndex++;//設置是否需要繼續打印ev.HasMorePages = (m_currentPageIndex < m_streams.Count);} 需要留意RDLC設計器版本,有些版本的設計器,輸出的RDLC文件,使用LocalReport載入后,生成到Meta的文件出現莫名其妙的字體放大,無法控制寬度等問題,需要對尺寸等參數微調。

總結

以上是生活随笔為你收集整理的C# 使用Microsoft.Reporting打印票据的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 黄色爱爱视频 | 在线成人免费电影 | 亚洲五十路 | 人人妻人人澡人人爽 | 韩国三级在线看 | 亚洲国产精品suv | 超碰夜夜| 久久午夜国产 | 激情图片在线视频 | 青娱乐导航 | 色多多在线看 | 打开每日更新在线观看 | 成年人免费在线观看网站 | 欧美激情18p | www.com毛片| 黄视频免费看在线 | av制服丝袜| yy77777丰满少妇影院 | 国模无码视频一区二区三区 | av黄色免费在线观看 | 国产性猛交96 | www视频免费观看 | 久久三级视频 | 成人性生生活性生交全黄 | 小萝莉末成年一区二区 | 午夜精品无码一区二区三区 | 日韩中文在线字幕 | 欧美女优在线 | 精品一区二区三区成人免费视频 | 午夜伦理剧场 | 色女人影院 | 国产又粗又猛又黄又爽的视频 | 九九热最新网址 | 日本h在线 | 欧美日韩a v | 一区二区三区日韩在线 | 你懂的av在线 | 91天堂视频 | 一本色道久久综合亚洲二区三区 | 91精品成人 | 国产精品91视频 | 成人深夜在线 | 99久久久无码国产精品性青椒 | 精品少妇一区二区三区密爱 | 日本人做爰全过程 | 黄色一区二区视频 | 熟妇人妻va精品中文字幕 | 2025韩国大尺度电影 | 国产又大又黄又爽 | 久久99精品久久久久婷婷 | 日日干日日操 | 欧美另类视频在线 | 9999久久久久 | 大帝av| 精品国产乱码久久久久久88av | 黄页在线观看 | 中文字幕黄色av | 嫩草研究院在线 | 中文字幕日产 | 久久精品无码中文字幕 | 音影先锋av资源 | 男生草女生视频 | 三年电影在线观看 | 亚洲手机在线 | 亚洲欧洲成人精品久久一码二码 | 久久一区精品 | 欧美午夜一区二区三区 | av美女在线观看 | 一本久久久久 | 丁香五香天堂网 | 97伊人| 国产成人在线免费观看视频 | 男生坤坤放进女生坤坤里 | 绿帽在线 | 九九视频在线 | 久久人人爽爽人人爽人人片av | 亚洲国产精选 | 久久青青视频 | 91玖玖 | 欧美性猛交 xxxx | 日本中文不卡 | 国产又爽又黄无码无遮挡在线观看 | 国产一区二区三区在线观看视频 | 无码成人一区二区 | 欧美日本三级 | 亚洲伊人成人网 | 成人性生交大片免费卡看 | 中文字幕激情视频 | 中文字幕在线播出 | 国产精品区一区二 | 毛片福利 | 免费中文字幕av | 91久久国产综合久久91精品网站 | 国产伦精品一区二区三区在线观看 | 91免费高清在线观看 | 99精品视频免费版的特色功能 | 激情欧美综合 | 啦啦啦视频在线观看 | 欧美爽妇 |