c# - 如何从打印机变量中获取纸张大小?

标签 c# .net winforms printing

我有 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());

我从委托(delegate)参数方法中获取变量 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
   }

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

最佳答案

为什么不直接使用 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;

关于c# - 如何从打印机变量中获取纸张大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20542374/

相关文章:

python - 如何使用 Viewstate 参数抓取页面请求?

c# - 使用 SELECT 查询时抛出异常 : 'System.Collections.Generic.KeyNotFoundException' in mscorlib. dll

c# - 如何在 Aero/.NET 4 中获取 block 样式进度条

c# - ASP.NET 控件可以在 WinForms 中使用吗?

c# - 事件处理程序会阻止垃圾收集的发生吗?

C#:如何解析用户查询

c# - C# 中 pred 和 succ 的等价物是什么?

c# - 等待 TcpClient 数据可用的最佳方式?

.net - 如何检测.NET中的跨线程访问(强制线程关联)?

c# - 比较javascript中的两个字符串; ASP。净C#