在某些计算机上使用C#中的PrintDocument进行打印时,无法修改页面大小

时间:2015-01-22 22:35:04

标签: canvas printing size printdocument

这是一个非常简单的程序。字面打印" Hello World"使用选定的画布大小。它在我的测试中的4台机器上运行良好(包括Win 7和Win 8),但不能在其他2台机器(Windows 7)上工作,即使我选择ANSI E,打印结果仍然是ANSI A 。

这里有一些注意事项:

  1. 我使用PDFLite,Adobe Acrobat和Microsoft XPS打印 结果是一样的。
  2. 我可以通过pdflite和其他pdf writer在Ansi E canvas上成功打印记事本文本文件。其他一些工具也可以通过PdfLite成功打印到ANSI E。
  3. 该计划基本上是:

    1. 选择页面大小为ANSI E
    2. 单击打印按钮,弹出选择打印机窗口。
    3. 选择虚拟打印机,例如PDFLite,点击打印。
    4. 生成PDF,仍为ANSI A。
    5. 这是完整的源代码(没有UI代码):

       private void PrintButton_Click(object sender, RoutedEventArgs e)
          {
              PrintDocument printDocument = new PrintDocument();
              printDocument.DefaultPageSettings.PaperSize = GetPaperSize();
              printDocument.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
      
              System.Windows.Forms.PrintDialog printWindowDialog = new System.Windows.Forms.PrintDialog();
              printWindowDialog.Document = printDocument;
              if (printWindowDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
              {
                  printDocument.Print();
              }
          }
      
          private void pd_PrintPage(object sender, PrintPageEventArgs ev)
          {
              ev.Graphics.DrawString("Hello World", new Font("Arial", 10), Brushes.Black, 5, 0, new StringFormat());
          }
      
          private PaperSize GetPaperSize()
          {
              PaperSize printPreviewPaperSize = new PaperSize("AnsiA", 850, 1100);
              switch (((ComboBoxItem)sizeCb.SelectedItem).Content.ToString())
              {
                  case "ANSI A – 8.5'' x 11''":
                  default:
                      printPreviewPaperSize = new PaperSize("AnsiA", 850, 1100);
                      break;
                  case "ANSI B – 11'' x 17''":
                      printPreviewPaperSize = new PaperSize("AnsiB", 1100, 1700);
                      break;
                  case "ANSI C – 17'' x 22''":
                      printPreviewPaperSize = new PaperSize("AnsiC", 1700, 2200);
                      break;
                  case "ANSI D – 22'' x 34''":
                      printPreviewPaperSize = new PaperSize("AnsiD", 2200, 3400);
                      break;
                  case "ANSI E – 34'' x 44''":
                      printPreviewPaperSize = new PaperSize("AnsiE", 3400, 4400);
                      break;
              }
      
              return printPreviewPaperSize;
          }
      

      代码中有什么问题吗?请指教。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

那是因为对话框中的默认设置取代了您的手册页面大小。试试这个,它工作正常。

if (printWindowDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
 {
     printDocument.PrinterSettings.DefaultPageSettings.PaperSize = = new PaperSize("AnsiE", 3400, 4400);
     printDocument.DefaultPageSettings.PaperSize = new PaperSize("AnsiE", 3400, 4400);
     printDocument.Print();
}