Exemplo n.º 1
0
        /// <summary>
        /// 打印
        /// </summary>
        private void Print()
        {
            if (m_streams == null || m_streams.Count == 0)
            {
                return;
            }

            PrintDocument printDoc = new PrintDocument();

            if (m_showPrintDialog)
            {
                PrintDialog printDialog = new PrintDialog();

                printDialog.Document               = printDoc;
                printDialog.AllowPrintToFile       = false;
                printDialog.AllowCurrentPage       = false;
                printDialog.AllowSelection         = false;
                printDialog.AllowSomePages         = false;
                printDialog.PrinterSettings.Copies = 1;

                if (printDialog.ShowDialog() != DialogResult.OK)
                {
                    if (MessageDialog.ShowEnquiryMessage("您是否确定取消当前打印?") == DialogResult.Yes)
                    {
                        return;
                    }
                }

                printDialog.PrinterSettings.Copies = 1;
            }


            #region 页面设置
            PageSetupDialog pageDialog = new PageSetupDialog();

            pageDialog.Document = printDoc;
            pageDialog.PageSettings.PaperSize = new PaperSize("Custom", (int)(100 * m_pageWidth / 2.54 + 0.5),
                                                              (int)(100 * m_pageHeight / 2.54 + 0.5));

            #region 设置为横向打印

            //if (m_pageWidth < m_pageHeight)
            //{
            //    pageDialog.PageSettings.Landscape = true;
            //}

            #endregion

            printDoc.DefaultPageSettings = pageDialog.PageSettings;

            #endregion
            // 指定打印机
            //printDoc.PrinterSettings.PrinterName = printDocument1.PrinterSettings.PrinterName;

            if (!printDoc.PrinterSettings.IsValid)
            {
                string msg = String.Format("Can't find printer \"{0}\".", "默认打印机!");
                MessageBox.Show(msg, "找不到默认打印机");
                return;
            }

            #region 判断打印机是否虚拟打印机,不允许打印到P虚拟设备(如打印到PDF文件),否则可能出现多次打印等单据不可控现象

            //string error = null;

            //if (VirtualPrint.IsVirtualPrint(printDoc.PrinterSettings.PrinterName, out error))
            //{
            //    MessageDialog.ShowPromptMessage(error);
            //    return;
            //}

            #endregion

            printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
            printDoc.Print();
        }