如何通过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); }