如何通过PaperKind获取预定义的纸张尺寸

我需要通过System.Drawing.Printing.PaperKind获取纸张大小。 有预定义的值吗? 我不想硬编码或计算纸张尺寸,我只是想以编程方式获取它。 谢谢。

通过迭代PrinterSettings.PaperSizes集合,可以获得预定义值的子集。

我们的应用程序让用户选择一台打印机,为我们提供一个PrinterSettings对象。 包含在PrinterSettings是打印机支持的PaperSize列表 – 不是所有内容(请注意XPS文档驱动程序(win7)支持所有尺寸)。

在我们的例子中,我们需要的是支持大小的子集。 用户指定的PaperKind传递给我们的打印代码,它通过我们的PrinterSettings对象,直到它找到用户的选择或放弃并使用默认值。

在下面的示例中,您可以看到PaperSize对象已正确填充。

 PrinterSettings settings = new PrinterSettings(); foreach (PaperSize size in settings.PaperSizes) Debug.WriteLine(size); 

它只是一个子集,但也许这对你来说也足够了。 .NET中的打印API真的不清楚,msdn并没有太大帮助……希望它能让你走上正轨!

LINQ实现目标的方法是这样的:

 PrinterSettings printerSettings = new PrinterSettings(); IQueryable paperSizes = printerSettings.PaperSizes.Cast().AsQueryable(); PaperSize a4rotated = paperSizes.Where(paperSize => paperSize.Kind == PaperKind.A4Rotated).FirstOrDefault(); 

祝好运!

您可以尝试使用System.Drawing.Printing.PaperSize类。 有一个RawKind属性,可以设置为System.Drawing.Printing.PaperKind。

就像是:

 PaperSize size = new PaperSize(); size.RawKind = (int) PaperKind.A3; 
 public static PaperSize GetPaperSize(string Name) { PaperSize size1 = null; Name=Name.ToUpper(); PrinterSettings settings = new PrinterSettings(); foreach (PaperSize size in settings.PaperSizes) if (size.Kind.ToString().ToUpper() == Name) { size1 = size; break; } return size1; } 
 PaperSize pkSize; PrintDocument printDoc = new PrintDocument(); for (int i = 0; i < printDoc.PrinterSettings.PaperSizes.Count; i++) { pkSize = printDoc.PrinterSettings.PaperSizes[i]; cmbPaperSize.Items.Add(pkSize); }