在以下需求:
在一个报表上,点击一个按钮出现一个radiobutton
"你要打A3呢,还是打A4",确定之后就把A3或者A4横打打出来了.我觉得这个很有难度:
总要选打印机吧?可能有多个打印机对吧?所以我觉得printdocument可能必不可少?
用默认的打印机?如果可以的话,怎么做?

解决方案 »

  1.   

     可以首先生成一个自定义的PageSize对象,
    然后赋给PrintDocument对象的DefaultPageSettings.PaperSize属性
    ,这样可以达到自定义Page大小的目的。   
     如:
      private   System.Drawing.Printing.PrintDocument   pd;   
      private   StreamReader   streamToPrint;   
        
      printFont   =   new   Font("Arial",   10);   
      streamToPrint   =   new   StreamReader   ("PrintMe.Txt");   
      PaperSize   pkCustomSize1   =   new   PaperSize("First   custom   size",   800,500);   
        
      pd.PrintPage   +=   new   PrintPageEventHandler(this.pd_PrintPage);   
      pd.DefaultPageSettings.PaperSize   =pkCustomSize1;//将自定义的Papersize赋给PrintDocument   
      pd.DefaultPageSettings.PaperSize.Height   =500;//您可以修改pagesize的大小   
      pd.DefaultPageSettings 
      .PaperSize   .Width   =800;   
        
      

  2.   

    如果不用默认打印机的话,就要显示出printdialog,让用户去挑选打印机,这样用户可以在首选项那里父盖我们的PaperSize的设定,而我希望用户不能再在此处去选择A3或者A4,这是不必要的选择,不知道明白我的意思没有?
    有一种方法是自已写一个custom printdialog,但没找到相关代码.
      

  3.   

       this.printDocument1.Print();
    不会弹出打印机的选择框.
      

  4.   

    另一个问题,如何设置默认打印机的默认纸张,实际上,我不是用printdocument实现的
      

  5.   

    问题同:http://social.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/841c2e1c-5979-4e70-9bb7-d39670362079
      

  6.   

    其实最好的办法是:做两张报表~~就是麻烦了点因为用PageSize指定页面是可以,但不代表你的报表数据就正好显示在合适的位置!
      

  7.   

    10楼此话怎讲?
    问题同:http://social.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/841c2e1c-5979-4e70-9bb7-d39670362079
      

  8.   


    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing.Printing;
    namespace PrintTest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        PrintDocument objDocument;
            DialogResult resultP;
            FontDialog f = new FontDialog();
            ColorDialog color = new ColorDialog();        private void button1_Click(object sender, EventArgs e)
            {
                //初始化打印机设置窗口
                PrintDialog priD = new PrintDialog();
                //设置当前页按钮为真
                priD.AllowCurrentPage = true;
                //是否显示帮助按钮
                priD.ShowHelp = true;
                //是否启用打印到文件按钮
                priD.AllowPrintToFile = true;
                //是否启用选择按钮
                priD.AllowSelection = true;
                //是否启用页选项按钮
                priD.AllowSomePages = true;
                resultP = priD.ShowDialog();
                if (resultP == DialogResult.OK)
                {
                    object[] obj = new object[]
                    {
                        //获取打印机是否支持双面打印
                        priD.PrinterSettings.CanDuplex,
                        //打印文档是否逐份打印
                        priD.PrinterSettings.Collate,
                        //获取打印机允许用户打印的最大份数
                        priD.PrinterSettings.MaximumCopies,
                        //获取打印文档的份数
                        priD.PrinterSettings.Copies,
                        //获取此打印机默认页设置
                        priD.PrinterSettings.DefaultPageSettings,
                        //获取双面打印的打印机设置
                        priD.PrinterSettings.Duplex,
                        //获取打印第一页的页码
                        priD.PrinterSettings.FromPage,
                        //获取该打印机支持的纸张大小
                        priD.PrinterSettings.PaperSizes,
                        //获取用户已指定要打印的页码
                        priD.PrinterSettings.PrintRange,
                        //获取要打印最后一页的页码
                        priD.PrinterSettings.ToPage
                    };
                    listBox1.Items.AddRange(obj);
                }            //初始化要显示的设置窗口 
                PageSetupDialog objPageSetupDialog = new PageSetupDialog();
                objPageSetupDialog.PageSettings = new PageSettings();
                objPageSetupDialog.ShowNetwork = false;
                //获取文档 
                objPageSetupDialog.Document = this.objDocument;
                //显示窗口 
                //objPageSetupDialog.ShowDialog();
                resultP = objPageSetupDialog.ShowDialog();
                if (resultP == DialogResult.OK)
                {
                    object[] resultsP = new object[]{ 
                        //获取该页的边距
                        objPageSetupDialog.PageSettings.Margins, 
                        //获取该页纸张的大小
                        objPageSetupDialog.PageSettings.PaperSize, 
                        //获取是横向还是纵向打印True为横向
                        objPageSetupDialog.PageSettings.Landscape, 
                    };
                    listBox1.Items.AddRange(resultsP);
                }            //初始化要预览窗口 
                PrintPreviewDialog ppvw = new PrintPreviewDialog();
                //获取要预览的文档 
                ppvw.Document = objDocument;
                ppvw.Width = 800;
                ppvw.Height = 600;
                //显示预览窗口 
                ppvw.ShowDialog();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                objDocument = new PrintDocument();
                //当需要为当前页打印的输出时发生 
                objDocument.PrintPage += new PrintPageEventHandler(objDocument_PrintPage);
            }        void objDocument_PrintPage(object sender, PrintPageEventArgs e)
            {
                string objString = this.textBox1.Text;
                //获取用于绘制页面的Graphics的对象 
                Graphics g = e.Graphics;
                //向页面输出一行文字 
                g.DrawString(objString, f.Font, new SolidBrush(color.Color), new RectangleF(0, 200, textBox1.Width, textBox1.Height));
                g.DrawString(objString, f.Font, new SolidBrush(f.Color), new PointF(30,30));
                //画一个矩形框
                g.DrawRectangle(new Pen(color.Color,2),200,200,200,200);
                //打印一张图
                Image temp = Image.FromFile(@"D:\网络.png");
                Rectangle destRect = new Rectangle(450, 300, temp.Width,temp.Height);
                g.DrawImage(temp, destRect, 0, 0, temp.Width, temp.Height, System.Drawing.GraphicsUnit.Pixel);
            }        private void btncolor_Click(object sender, EventArgs e)
            {
                resultP = color.ShowDialog();
                if (resultP == DialogResult.OK)
                {
                    object[] obj1 = new object[]
                    {
                        color.Color
                    };
                    listBox1.Items.AddRange(obj1);
                }
            }        private void btnFont_Click(object sender, EventArgs e)
            {
                //对话框中是否显示颜色选择
                f.ShowColor = true;
                resultP = f.ShowDialog();
                if (resultP == DialogResult.OK)
                {
                    object[] obj2 = new object[]
                    {
                        f.Font,
                        f.ShowColor
                    };
                    listBox1.Items.AddRange(obj2);
                }
            }
        }
    }
      

  9.   

    窗体创建1个listBox1,txtBox1,3个button
      

  10.   

    哪里解决了哦.都不看问题
    回帖者请看
    http://social.microsoft.com/Forums/zh-CN/visualcshartzhchs/thread/841c2e1c-5979-4e70-9bb7-d39670362079