问题:
        (1)  打印机是否可以打印任意大小的纸.
        (2)  下面代码这样设置printDocument打印机是否可以识别,是否会按这种设置打印.
        (3)  我按下面这样设置,结果预览没问题,可打印出来却少了3行,为什么?            PaperSize defaultPagerSize =  this.printDocument1.DefaultPageSettings.PaperSize;     //提取缺省设置,默认A4纸
            // 自定义设置,高为原来一半,宽为原来的21分之24.
            PaperSize papersize = new PaperSize("First custom size", defaultPagerSize.Width * 24 / 21, defaultPagerSize.Height / 2);
            this.printDocument1.DefaultPageSettings.PaperSize = papersize;
          // 页顶边距为原来的8分之1
            this.printDocument1.DefaultPageSettings.Margins.Top = this.printDocument1.DefaultPageSettings.Margins.Top / 8;

解决方案 »

  1.   

    我认为 PaperSize papersize = new PaperSize("First custom size", defaultPagerSize.Width * 24 / 21, defaultPagerSize.Height / 2);
    this.printDocument1.DefaultPageSettings.PaperSize = papersize;
    这种方式在NT系统上行不通
    而且我估计printDocument1.DefaultPageSettings.PaperSize只接受Document.PrinterSettings.PaperSizes中存在的值.
    我一般是这样处理问题的,比如你在服务器属性中已添加了自定义的纸张类型
    那么用如下方式去处理:
     string paperName = "xxx";
                foreach(PaperSize paperSize in this.printDocument.PrinterSettings.PaperSizes)
                {
                    if (paperSize.PaperName == paperName)
                    {
                        this.printDocument.DefaultPageSettings.PaperSize = paperSize;
                        break;
                    }
                }
      

  2.   

    jointan() 的意思是先把自定义PaperSize先添加到服务器属性中,然后再遍历所有属性,
    找到要用的PaperSize再负给printDocument吗?这样打印机应该可以识别吗?
      

  3.   

    你如果你装有多个打印机的话,改一下printDocument.PrinterSettings.PrinterName为另一台打印机的名称,就会发现,PrinterSettings.PaperSizes中的内容不一样,凡是出现在PrinterSettings.PaperSizes中的纸张类型,都是该打印机所支持的纸张类型.
      

  4.   

    有点明白了,谢谢jointan() !
    还有个问题:怎么在服务器属性中添加自定义的纸张类型.
      

  5.   

    再次谢谢jointan() ,这个问题困挠我几天了,呵呵.