【问题标题】:How to get paper size from printer variable?如何从打印机变量中获取纸张尺寸?
【发布时间】:2013-12-30 19:08:35
【问题描述】:

我有 3 台打印机连接到我的 PC,在我的 win 表单上,我选择了按名称打印,在代码中(我不使用 PrintDialog)。每台打印机都有不同的纸张尺寸(小、中、大)。有什么方法可以获取当前打印机的纸张尺寸。 我试试

Console.WriteLine(e.PageSettings.Bounds.ToString());
Console.WriteLine(e.PageSettings.PaperSize.ToString());
Console.WriteLine(e.Graphics.VisibleClipBounds.ToString());
Console.WriteLine(e.Graphics.ClipBounds.ToString());

我从我的委托参数方法中得到变量 e:

// When I launch my printer (in class constructor):
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler(PrintLabel);
//.... other code



//My delegate method:
   private void PrintLabel(object o, PrintPageEventArgs e)
   {
      //This is my code from above:
        Console.WriteLine(e.PageSettings.Bounds.ToString());
      // other code
   }

但无论我使用哪种打印机,它都会显示相同的尺寸。 提前致谢。

【问题讨论】:

  • 您应该包括如何获得变量e
  • @ANeves 查看已编辑的问题。

标签: c# .net winforms printing


【解决方案1】:

为什么不直接使用来自System.Drawing.Printing 命名空间的专门设计的类? 还是我错过了问题中的某些内容?

using System.Drawing.Printing;

public static PageSettings GetPrinterPageInfo(String printerName) {
  PrinterSettings settings;

  // If printer name is not set, look for default printer
  if (String.IsNullOrEmpty(printerName)) {
    foreach (var printer in PrinterSettings.InstalledPrinters) {
      settings = new PrinterSettings();

      settings.PrinterName = printer.ToString();

      if (settings.IsDefaultPrinter)
        return settings.DefaultPageSettings;
    }

    return null; // <- No default printer  
  }

  // printer by its name 
  settings = new PrinterSettings();

  settings.PrinterName = printerName;

  return settings.DefaultPageSettings;
}

// Default printer default page info
public static PageSettings GetPrinterPageInfo() {
  return GetPrinterPageInfo(null);
}

...

// Default printer default page
PageSettings page = GetPrinterPageInfo(); 
// Or default page of some other printer given by its name
// PageSettings page = GetPrinterPageInfo(MyPrinterName); 

RectangleF area = page.PrintableArea;
Rectangle bounds = page.Bounds;
Margins margins = page.Margins;

【讨论】:

  • 您忘记在PageSettings page = GetPrinterPageInfo(); 中传入printerName,并在方法中使用它。
  • @ANeves:我使用了重载版本:GetPrinterPageInfo() {return GetPrinterPageInfo(null);} 用于默认打印机
  • 我只是尝试将它添加到我的类构造函数 PageSettings page = GetPrinterPageInfo(printerName);无论我将哪个打印机名称作为参数传递,它仍然显示相同的数据。只是想让你知道这 3 台打印机都不是我的默认打印机。
  • @DmitryBychenko 是的,对不起,这是真的。但是您仍然没有在方法中使用printerName 参数。它可能总是返回默认打印机或类似的东西。
  • 我已经测试了我的代码:在“控制面板\所有控制面板项目\设备和打印机”中,我已经更改了我的打印机的“打印首选项”(我有 2 个网络)为一台打印机设置 A4 纸张尺寸,为另一台设置 A5 纸张尺寸。所以我的代码为打印机返回了不同的结果。
猜你喜欢
  • 2022-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
相关资源
最近更新 更多