我正在尝试以静默方式打印图片文件,并且需要在特殊纸张类型(“光面照片纸”)和特定尺寸(10 厘米乘 15 厘米)上打印它。
在普通的 Windows 7 打印对话框中我可以选择:
纸张尺寸,
纸张质量(例如 - “自动”、“高”、“标准”、“自定义”)
纸张类型(“普通纸”、“光面照片纸”、“高级光面照片纸”、“专业白金照片纸”、“Hagaki”等...)
但是,通过 C# 代码,我成功地仅设置了 PaperSize(即 4'' on 6'' == 10cm on 15cm)。
我的问题是如何获得设置纸张类型的选项,以及不纸张来源(“纸盘 1”、“托盘 2"等)....
我知道每台打印机都有自己支持的纸张类型,因此我可能需要遍历所有内容,但我就是不知道如何实现。
这是我当前的代码:
string strPrinterName = "Canon iP4850";
PrintDocument printDoc = new PrintDocument();
// We set the paper size
printDoc.DefaultPageSettings.PaperSize = new PaperSize("PhotoPaper", 400, 600);
// Inside the event i actually draw the image all over the paper by using e.Graphics.DrawImage(...)
printDoc.PrintPage += PrintDocPrintPage;
// Creating the print dialog
PrintDialog dlgPrint = new PrintDialog
{
Document = printDoc
};
// We choose the printer
dlgPrint.PrinterSettings.PrinterName = strPrinterName;
// just to be sure - give the new size of our paper
dlgPrint.PrinterSettings.DefaultPageSettings.PaperSize = new PaperSize("PhotoPaper", 400, 600);
// If the printer is invalid
if (!dlgPrint.PrinterSettings.IsValid)
{
throw new Exception(@"Printer is invalid" + Environment.NewLine + strPrinterName);
}
// Print without showing the dialog
printDoc.Print();
提前谢谢大家。
最佳答案
这实际上可以在没有 DEVMODE 的情况下完成。通过 PrintTicket.PageMediaType 设置纸张类型属性(property)。对于 example :
// ---------------------- GetPrintTicketFromPrinter -----------------------
/// <summary>
/// Returns a PrintTicket based on the current default printer.</summary>
/// <returns>
/// A PrintTicket for the current local default printer.</returns>
public PrintTicket GetPrintTicketFromPrinter()
{
PrintQueue printQueue = null;
var localPrintServer = new LocalPrintServer();
// Retrieving collection of local printer on user machine
PrintQueueCollection localPrinterCollection = localPrintServer.GetPrintQueues();
System.Collections.IEnumerator localPrinterEnumerator =
localPrinterCollection.GetEnumerator();
if (localPrinterEnumerator.MoveNext())
{
// Get PrintQueue from first available printer
printQueue = (PrintQueue)localPrinterEnumerator.Current;
}
else
{
// No printer exist, return null PrintTicket
return null;
}
// Get default PrintTicket from printer
PrintTicket printTicket = printQueue.DefaultPrintTicket;
PrintCapabilities printCapabilites = printQueue.GetPrintCapabilities();
// Modify PrintTicket
if (printCapabilites.PageMediaTypeCapability.Contains(PageMediaType.CardStock))
{
printTicket.PageMediaType = PageMediaType.CardStock;
}
return printTicket;
}
关于c# - 使用 PrinterDialog 时如何设置纸张类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668873/