zoukankan      html  css  js  c++  java
  • WPF实现打印用户界面功能2

    帮助类:

    using System;
    using System.Drawing.Printing;
    using System.IO;
    using System.Windows.Forms;
    
    namespace PrintPage
    {
        /// <summary>
        /// 文件打印方法
        /// </summary>
        public class PrintService
        {
            public PrintService()
            {
                //将事件处理函数添加到PrintDocument的PrintPage中
                this.docToPrint.PrintPage += new PrintPageEventHandler(docToPrint_PrintPage);
            }
    
            // Declare the PrintDocument object.
            private string streamType;
            private Stream streamToPrint;
            private PrintDocument docToPrint = new PrintDocument();//创建一个PrintDocument的实例
    
            // This method will set properties on the PrintDialog object and
            // then display the dialog.
            public void StartPrint(Stream streamToPrint, string streamType)
            {
                this.streamToPrint = streamToPrint;
                this.streamType = streamType;
                PrintDialog printDialog = new PrintDialog();//创建一个PrintDialog的实例
                printDialog.AllowSomePages = true;
                printDialog.ShowHelp = true;
                // Set the Document property to the PrintDocument for
                // which the PrintPage Event has been handled. To display the
                // dialog, either this property or the PrinterSettings property
                // must be set
                printDialog.Document = docToPrint;//把PrintDialog的Document属性设为上面配置好的PrintDocument的实例
                DialogResult result = printDialog.ShowDialog();//调用PrintDialog的ShowDialog函数显示打印对话框
                // If the result is OK then print the document.
                if (result == DialogResult.OK)
                {
                    docToPrint.Print();//开始打印
                }
            }
    
            // The PrintDialog will print the document
            // by handling the document’s PrintPage event.
            private void docToPrint_PrintPage(object sender,
            System.Drawing.Printing.PrintPageEventArgs e)//设置打印机开始打印的事件处理函数
            {
                // Insert code to render the page here.
                // This code will be called when the control is drawn.
                // The following code will render a simple
                // message on the printed document
                switch (this.streamType)
                {
                    case "txt":
                        string text = null;
                        System.Drawing.Font printFont = new System.Drawing.Font
                        ("Arial", 35, System.Drawing.FontStyle.Regular);
                        // Draw the content.
                        System.IO.StreamReader streamReader = new StreamReader(this.streamToPrint);
                        text = streamReader.ReadToEnd();
                        e.Graphics.DrawString(text, printFont, System.Drawing.Brushes.Black, e.MarginBounds.X, e.MarginBounds.Y);
                        break;
                    case "image":
                        System.Drawing.Image image = System.Drawing.Image.FromStream(this.streamToPrint);
                        int x = e.MarginBounds.X;
                        int y = e.MarginBounds.Y;
                        int width = image.Width;
                        int height = image.Height;
                        if ((width / e.MarginBounds.Width) > (height / e.MarginBounds.Height))
                        {
                            width = e.MarginBounds.Width;
                            height = image.Height * e.MarginBounds.Width / image.Width;
                        }
                        else
                        {
                            height = e.MarginBounds.Height;
                            width = image.Width * e.MarginBounds.Height / image.Height;
                        }
                        System.Drawing.Rectangle destRect = new System.Drawing.Rectangle(x, y, width, height);
                        e.Graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, System.Drawing.GraphicsUnit.Pixel);
                        break;
                    default:
                        break;
                }
            }
        }
    }
    
      private Stream FileToStream(string fileName)
            {
                // 打开文件
                FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
    
                // 读取文件的 byte[]
                byte[] bytes = new byte[fileStream.Length];
                fileStream.Read(bytes, 0, bytes.Length);
                fileStream.Close();
    
                // 把 byte[] 转换成 Stream
                Stream stream = new MemoryStream(bytes);
    
                return stream;
            }
    
     private string SaveWindowToImage(Window window, string fileName)
            {
                FrameworkElement element = window.Content as FrameworkElement;
                RenderTargetBitmap bmp = new RenderTargetBitmap((int)element.ActualWidth,
                    (int)element.ActualHeight, 96d, 96d, PixelFormats.Default);
                bmp.Render(window);
    
                BmpBitmapEncoder encoder = new BmpBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(bmp));
    
                using (FileStream stream = File.Open(fileName, FileMode.OpenOrCreate))
                {
                    encoder.Save(stream);
                }
                return fileName;
            }
    

     //调用     

      private String filePath = "c:\test.bmp";

     private void button4_Click(object sender, RoutedEventArgs e)
            {
                string path = AppDomain.CurrentDomain.BaseDirectory;
                FileInfo file = new FileInfo(path);
                path = file.Directory.Parent.Parent.FullName + "\MainWindow.xaml";
                //path = file.Directory.FullName + "\MainWindow.xaml";
                Stream stream = FileToStream(filePath);
                PrintService print = new PrintService();
                print.StartPrint(stream, "image");
            }
    

      

  • 相关阅读:
    浅析Linux操作系统是如何工作的(思维导图)
    【Git】创建一个空分支
    ubuntu13.04更新源
    【Linux操作系统分析】设备驱动处理流程
    django-xss攻击原理与防范
    django—xadmin中集成富文本编辑器ueditor
    垃圾回收机制
    元组-不仅仅是不可变的列表
    不一样的列表
    Python数据模型
  • 原文地址:https://www.cnblogs.com/YYkun/p/7852135.html
Copyright © 2011-2022 走看看