winform打印问题

tautaulee 2014-01-09 10:02:30
我在winform上有一个打印程序

PrintDialog pd= new PrintDialog();

new 一个PrintDialog 后 弹出系统自带打印窗口

该窗口有一个选择打印机的下拉框,列出了当前电脑所安装的所有打印机
我想把这个过滤一下,只显示我公司的打印机。

请问如何做?
...全文
260 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kxyzjm62 2014-01-10
  • 打赏
  • 举报
回复
公西雒 2014-01-10
  • 打赏
  • 举报
回复
pd.PrintQueue.Name = printer;//printer是你的打印机设备名
公西雒 2014-01-10
  • 打赏
  • 举报
回复
看了下msdn,PrintQueue类里面应该可以设置,你自己找下具体方法。
公西雒 2014-01-09
  • 打赏
  • 举报
回复
引用 8 楼 tautaulee 的回复:
[quote=引用 7 楼 danding_ge 的回复:] 系统自带的?还是第三方
系统自带的PrintDialog[/quote]那是你自己写的有问题吧 我这个做了测试是没问题的 原理是将已有的txt文件打印出来。
tautaulee 2014-01-09
  • 打赏
  • 举报
回复
引用 7 楼 danding_ge 的回复:
系统自带的?还是第三方
系统自带的PrintDialog
公西雒 2014-01-09
  • 打赏
  • 举报
回复
系统自带的?还是第三方
tautaulee 2014-01-09
  • 打赏
  • 举报
回复
引用 5 楼 danding_ge 的回复:
[quote=引用 3 楼 tautaulee 的回复:] [quote=引用 1 楼 danding_ge 的回复:]
我是new的一个pd,没有自己写那个下拉框,所以不存在CbPrint 这个控件。。 [/quote]我这个不用pd直接打印的[/quote] 那不行,我自己写了个pd的类,打出来有问题。。用自带的打出来就是好的。。
公西雒 2014-01-09
  • 打赏
  • 举报
回复
引用 3 楼 tautaulee 的回复:
[quote=引用 1 楼 danding_ge 的回复:]
我是new的一个pd,没有自己写那个下拉框,所以不存在CbPrint 这个控件。。 [/quote]我这个不用pd直接打印的
tautaulee 2014-01-09
  • 打赏
  • 举报
回复
引用 2 楼 junjie94bei 的回复:
private void InitPrint() { try { PrintDocument printdocument = new PrintDocument(); string stringdefault = printdocument.PrinterSettings.PrinterName; CbPrint.Items.Clear();//ComboBox控件 CbPrint.Text = stringdefault; foreach (string str in PrinterSettings.InstalledPrinters) { CbPrint.Items.Add(str);//如果只需要公司的打印机,这里只ADD一次就好 } ticketPrintDocument.PrintPage += new PrintPageEventHandler(PrinterPage); } catch (System.Exception ex) { System.Windows.MessageBox.Show(ex.ToString()); } }
CbPrint 从哪里来??
tautaulee 2014-01-09
  • 打赏
  • 举报
回复
引用 1 楼 danding_ge 的回复:

        private string stringToPrint;   //打印内容
        private System.Drawing.Printing.PrintDocument ticketPrintDocument = new System.Drawing.Printing.PrintDocument();    //打印文档实例

        /// <summary>
        /// 初始化打印机
        /// </summary>
        private void InitPrint()
        {
            try
            {
                PrintDocument printdocument = new PrintDocument();
                string stringdefault = printdocument.PrinterSettings.PrinterName;

                CbPrint.Items.Clear();//ComboBox控件
                CbPrint.Text = stringdefault;
                foreach (string str in PrinterSettings.InstalledPrinters)
                {
                    CbPrint.Items.Add(str);//如果只需要公司的打印机,这里只ADD一次就好
                }
                ticketPrintDocument.PrintPage += new PrintPageEventHandler(PrinterPage);
            }
            catch (System.Exception ex)
            {
                System.Windows.MessageBox.Show(ex.ToString());
            }
        }
		
        /// <summary>
        /// 打印页面配置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PrinterPage(object sender, PrintPageEventArgs e)
        {
            int charactersOnPage = 0;
            int linesPerPage = 0;

            e.Graphics.MeasureString(stringToPrint, System.Drawing.SystemFonts.DefaultFont, e.MarginBounds.Size, StringFormat.GenericTypographic, out charactersOnPage, out linesPerPage);
            e.Graphics.DrawString(stringToPrint, System.Drawing.SystemFonts.DefaultFont, System.Drawing.Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic);   //打印东西
        }
		
        /// <summary>
        /// 打印
        /// </summary>
        /// <param name="name"></param>
        /// <param name="path"></param>
        private void Print(string name, string path)
        {
            try
            {
                ticketPrintDocument.DocumentName = name;
                if (CbPrint.Text != "")
                {
                    ticketPrintDocument.PrinterSettings.PrinterName = CbPrint.Text;
                }
                if (printpath == null)
                {
                    return;
                }

                FileStream fs = new FileStream(@path, FileMode.Open);
                StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("gb2312"));
                StandardPrintController spc = new StandardPrintController();

                stringToPrint = sr.ReadToEnd();
                ticketPrintDocument.PrintController = spc;
                ticketPrintDocument.Print();

                sr.Close();
                fs.Close();
            }
            catch
            {
                ;
            }
        }

我是new的一个pd,没有自己写那个下拉框,所以不存在CbPrint 这个控件。。
公西雒 2014-01-09
  • 打赏
  • 举报
回复

        private string stringToPrint;   //打印内容
        private System.Drawing.Printing.PrintDocument ticketPrintDocument = new System.Drawing.Printing.PrintDocument();    //打印文档实例

        /// <summary>
        /// 初始化打印机
        /// </summary>
        private void InitPrint()
        {
            try
            {
                PrintDocument printdocument = new PrintDocument();
                string stringdefault = printdocument.PrinterSettings.PrinterName;

                CbPrint.Items.Clear();//ComboBox控件
                CbPrint.Text = stringdefault;
                foreach (string str in PrinterSettings.InstalledPrinters)
                {
                    CbPrint.Items.Add(str);//如果只需要公司的打印机,这里只ADD一次就好
                }
                ticketPrintDocument.PrintPage += new PrintPageEventHandler(PrinterPage);
            }
            catch (System.Exception ex)
            {
                System.Windows.MessageBox.Show(ex.ToString());
            }
        }
		
        /// <summary>
        /// 打印页面配置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PrinterPage(object sender, PrintPageEventArgs e)
        {
            int charactersOnPage = 0;
            int linesPerPage = 0;

            e.Graphics.MeasureString(stringToPrint, System.Drawing.SystemFonts.DefaultFont, e.MarginBounds.Size, StringFormat.GenericTypographic, out charactersOnPage, out linesPerPage);
            e.Graphics.DrawString(stringToPrint, System.Drawing.SystemFonts.DefaultFont, System.Drawing.Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic);   //打印东西
        }
		
        /// <summary>
        /// 打印
        /// </summary>
        /// <param name="name"></param>
        /// <param name="path"></param>
        private void Print(string name, string path)
        {
            try
            {
                ticketPrintDocument.DocumentName = name;
                if (CbPrint.Text != "")
                {
                    ticketPrintDocument.PrinterSettings.PrinterName = CbPrint.Text;
                }
                if (printpath == null)
                {
                    return;
                }

                FileStream fs = new FileStream(@path, FileMode.Open);
                StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("gb2312"));
                StandardPrintController spc = new StandardPrintController();

                stringToPrint = sr.ReadToEnd();
                ticketPrintDocument.PrintController = spc;
                ticketPrintDocument.Print();

                sr.Close();
                fs.Close();
            }
            catch
            {
                ;
            }
        }

tautaulee 2014-01-09
  • 打赏
  • 举报
回复
引用 9 楼 danding_ge 的回复:
[quote=引用 8 楼 tautaulee 的回复:] [quote=引用 7 楼 danding_ge 的回复:] 系统自带的?还是第三方
系统自带的PrintDialog[/quote]那是你自己写的有问题吧 我这个做了测试是没问题的 原理是将已有的txt文件打印出来。[/quote] 我这个说不清楚,反正很复杂,是自己做的类似于word的一个winform项目。。。唉。。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧