台灣最大程式設計社群網站
線上人數
714
 
會員總數:245973
討論主題:189551
歡迎您免費加入會員
討論區列表 >> Blog精華文章 >> 如何將 Microsoft Report 直接列印到印表機
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何將 Microsoft Report 直接列印到印表機
價值 : 0 QP  點閱數:1745 回應數:0
樓主

小紀
初學者
181 73
266 53
發送站內信

下面示範 如何將 Microsoft Report
不預覽 不顯示選印表機的對話框
直接列印 到印表機

//報表資料來源

ReportDataSource MyRDS = new ReportDataSource("DataSet1", (DataTable)MyDS.DataTable1);
LocalReport MyReport = new LocalReport(); //本機報表
MyReport.ReportEmbeddedResource = "WindowsFormsApplication1.Report2.rdlc"//內崁資料名稱
MyReport.DataSources.Add(MyRDS); //設定報表資料來源

Warning[] warnings; //繪製報表時的警告清單
int intIndex = 0; //頁數索引
List<Stream> MyStreamList = new List<Stream>(); //各頁的串流

//將報表繪製到串流
MyReport.Render("Image",
    @"<DeviceInfo>
            <OutputFormat>EMF</OutputFormat>
            <PageWidth>10cm</PageWidth>
            <PageHeight>4cm</PageHeight>
            <MarginTop>0cm</MarginTop>
            <MarginLeft>0cm</MarginLeft>
            <MarginRight>0cm</MarginRight>
            <MarginBottom>0cm</MarginBottom>
        </DeviceInfo>",
    (Name, FileName, encode, mimeType, WillSeek) => {
        Stream stream = new MemoryStream(); //建立新串流
        MyStreamList.Add(stream);
        return stream;
    }, out warnings);

PrintDocument MyPD = new PrintDocument(); //列印文件
//指定印表機名稱
MyPD.PrinterSettings.PrinterName = "Microsoft XPS Document Writer";
//指定紙張大小 單位 百分之一英吋
MyPD.DefaultPageSettings.PaperSize = new PaperSize("MySize", 393, 157);
MyPD.PrintPage += (s, ev) => { //每列印一頁時的事件
    Rectangle MyRectangle = new Rectangle//計算調整大小
        ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX,
        ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY,
        ev.PageBounds.Width,
        ev.PageBounds.Height);
    //將該頁串流位置設到起頭
    MyStreamList[intIndex].Position = 0;
    //從串流繪製到印表機
    ev.Graphics.DrawImage(new Metafile(MyStreamList[intIndex]), MyRectangle);
    //計算是否還有一下頁
    ev.HasMorePages = ++intIndex < MyStreamList.Count;
};
MyPD.Print(); //列印

 


本篇文章發表於2011-12-28 18:16
目前尚無任何回覆
   

回覆
如要回應,請先登入.