winform打印,自己设置打印纸张大小例如500*800px。应该怎么做呢?
网上的资料找到有:
using System.Drawing.Printing;PrintDocument pd = new PrintDocument();
PaperSize p=null;
foreach(PaperSize ps in pd.PrinterSettings.PaperSizes)
{   if(ps.PaperName.Equals("A3"))
  p = ps;

pd.DefaultPageSettings.PaperSize = p;
pd.Print();pd.DefaultPageSettings.PaperSize = new PaperSize("自定义名称",宽,长)但是我运行了没有用。
求救,急!!!!在线等~

解决方案 »

  1.   

    //按下打印按钮   
        private void button3_Click(object sender, EventArgs e)   
           {   
               //打印图像   
           //显示打印设置对话框   
           PrintDialog MySettings = new PrintDialog();   
               MySettings.Document = this.printDocument1;   
      
               PaperSize p = null;   
               foreach (PaperSize ps in MySettings.Document.PrinterSettings.PaperSizes)   
               {   
                   if (ps.PaperName.Equals("A2"))//这里设置纸张大小,但必须是定义好的   
                       p = ps;   
               }   
               MySettings.Document.DefaultPageSettings.PaperSize = p;   
               if (MySettings.ShowDialog() == DialogResult.OK)   
               {   
                   this.printDocument1.Print();   
               }   
           }  
      

  2.   

    还是我自己
    下面这个代码也没用啊~
    那位高手走过路过,帮个忙啊~~~// Add list of supported paper sizes found on the printer. 
    // The DisplayMember property is used to identify the property that will provide the display string.
    comboPaperSize.DisplayMember = "PaperName";PaperSize pkSize;
    for (int i = 0; i < printDoc.PrinterSettings.PaperSizes.Count; i++){
        pkSize = printDoc.PrinterSettings.PaperSizes[i];
        comboPaperSize.Items.Add(pkSize);
    }// Create a PaperSize and specify the custom paper size through the constructor and add to combobox.
    PaperSize pkCustomSize1 = new PaperSize("First custom size", 100, 200);comboPaperSize.Items.Add(pkCustomSize1);
      

  3.   


    2楼的(伟康jay)
    请问:
    if (ps.PaperName.Equals("A2"))//这里设置纸张大小,但必须是定义好的 
    这句的纸张大小,怎么定义啊?
      

  4.   

    设置打印的纸张大小
    PrintDocument pd = new PrintDocument();
    设置时高和宽的单位是百分之一英寸,比如设置为宽度5英寸,高度10英寸
    PaperSize ps = new PaperSize("name", (int)(5 * 100), (int)(10 * 100));
    pd.DefaultPageSettings.PaperSize = ps;
    我试过的,没有问题
      

  5.   

    可是我运行了下,在页面设置,纸张,大小的下拉框里并没有name这个选项啊?
      

  6.   

    pd.DefaultPageSettings.PaperSize = new PaperSize("自定义名称",宽,长);
    这种方法在Win2000,XP以上的版本中不能用(NT4能不能用不知道),98下可以W2K以上,如果需要自定义纸张,手工的方式如下:"控制面板-打印机"的文件菜单中选择"服务器属性", 复选创建新格式,输入长宽后保存在代码中如下使用:
     foreach (PaperSize paper in printDoc.PrinterSettings.PaperSizes)
                {
                    if (paper.PaperName == "自定义纸张名称")
                    {
                        printDoc.DefaultPageSettings.PaperSize = paper;
                        break;
                    }
                }
    千万不要用 printDoc.DefaultPageSettings.PaperSize = new PaperSize()这种方式,就算你输入的属性全对,PrintDocument也未必会设置正确如果你想把软件做的更牛一点,那就是自己用代码在服务器属性中添加自定义纸张,
    需要调用API AddForm函数,写这个比较麻烦一些,前几年写过一个,现在不知在不在了,先看看有没有人其他人提供吧
      

  7.   

    12楼的jointan:
    非常感谢,自定义实现了,但是有新的问题出现了,而且有点诡异,能帮我分析下吗?
    首先我按照你的方法手工设置了 "服务器属性", 复选创建新格式,输入长宽后保存
    但是我的虚拟打印机那里有两个(我也不知道它们是什么关系)
    1、Microsoft Office Document Image Writer
    2、Microsoft XPS Document Writer
    然后我在2的高级选项里看得到新格式,在1中只有系统默认的几个类似A4A5之类的没有新格式
    但是我在2中把默认之类的都设为新格式,在代码里也指向你新格式,打印出来却是A4的,但是这个时候如果把打印机选定为1,纸张默认为自定义,然后我惊奇的发现自定义的大小是我设置的新格式,并且用1打印出成功了!
    但是如果实现不设置2的话,直接用2,又打印不出来。。
    能告诉我这是为什么吗?
    非常感谢您啦!
      

  8.   

    打的太急,有几个错别字,修改下。。
    1、Microsoft Office Document Image Writer
    2、Microsoft XPS Document Writer
    然后我在2的高级选项里看得到新格式,而在1中只有系统默认的几个类似A4A5之类的格式,没有新格式。
    但是我在2中把默认首选等都设为新格式,在代码里也指向了新格式,打印出来却是A4的!但是这个时候如果把打印机选定为1,纸张默认为自定义,然后我惊奇的发现自定义的大小是我设置的新格式,并且用1打印出成功了!
    但是如果实现不设置2的话,直接用1,又打印不出来。。
      

  9.   

    这个真不清楚,好象是两个虚拟打印机,第二个用途不明,第一个是格式化照片用的,真实输出依赖于实际安装的真实的打印机驱动
    调试打印功能的话不应该用这两个打印机,应该添加一个LPT1口的打印机(不一定必须安装打印机,只添加驱动并设为默认即可,可以双击打印文件夹下的添加打印机,选一个比较常用的品牌和机型就可以)
      

  10.   


    测试打印,一般就是看页面设置是否正确,对于测试绘图正确与否,一般使用PrintPreviewDialog看就可以了,没必要使用真实打印,检测页面设置是否正确,可以查看待打印文档的属性(任务栏右下角)对于已发送到打印机的文档,直接在任务栏右下角删除就可以了如果没有特殊需求,不要用虚拟打印机来测,直接安装直实打印机的驱动就可以了(最好别安U口的),对于大页面,推荐EPSON 1600K驱动,小页面EPSON 680 K驱动,在这些驱动绘图成功的,绘到别的打印机上问题都不是太大。交由用户自己去设置就可以了
      

  11.   

    可是为什么前面那两个可以呢?我点打印之后,它们都会生成一个document.tif或者1.xps文档,我就可以看见图片。这又是为什呢?谢谢你啦
      

  12.   


    你用这个打印功能是为了获取*.tif或者*.xps还是,为了实现在纸上打印的功能?
      

  13.   

    问题解决了~连到真实的打印机上没问题!
    哈哈,太开心了~感谢大家的帮助,尤其是jointan!
    晚些就结贴散分!!
    我也会把步骤心得再系统地总结下,方便以后遇到类似问题的人查阅。
      

  14.   

    以下是我的总结,要是你也遇到相似问题可以参考,欢迎回帖(不过分是没了,纯属交流)
    1、先在click事件里写代码
    this.pageSetupDialog1.Document = this.printDocument1;
                            try
                            {
                                if (this.pageSetupDialog1.ShowDialog() == DialogResult.OK)
                                {
                                    foreach (PaperSize paper in this.printDocument1.PrinterSettings.PaperSizes)
                                    {
                                        if (paper.PaperName == "新格式")
                                        {
                                            this.printDocument1.DefaultPageSettings.PaperSize = paper;
                                            break;
                                        }
                                    }
                                    this.printDocument1.Print();
                                }
                            }
                            catch (Exception excep)
                            {
                                MessageBox.Show(excep.Message, "print error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
    2、在控制面板/打印机和传真/文件/服务器属性/
    3、在创建新格式复选框前打钩
    4、在表格名里填写你格式的名字(我写的新格式)
    5、设置宽度、高度、边距
    6、保存格式,确定
    然后连接上打印机,在页面设置选项框里,选择你格式的名字(新格式),最后打印就好了。
    每次重新运行后都要重新在页面设置选项框里,选择你格式的名字(新格式),最后打印,要是想默认为你设置的格式,要继续以下步骤:
    1、在控制面板/打印机和传真的窗口里选择打印机,右键,属性
    2、在属性窗口里,常规/打印首选项,选高级,纸张规格的下拉框里选择你的格式名字(新格式),确定
    3、回到属性窗口里,高级(刚刚是常规)/打印默认值,选高级,纸张规格的下拉框里选择你的格式名字    (新格式),确定
    好了,现在就已经全部结束了。
    要是我有错误欢迎指出,或者有更好的办法也欢迎大家回帖!
    我的5*8问题最后还有一点小BUG,有的时候会连续走好几张纸,第一张正确,但是后面会带出好几张空白纸,现在没有什么好的解决办法,有谁知道问题出在哪里吗?
      

  15.   

    PS:你的最后还有一点小BUG,估计是分页上有问题。