come si imposta il tipo di carta mentre si utilizza PrinterDialog?

Sto cercando di stampare in silenzio un file di immagine e ho bisogno di stamparlo su un tipo di carta speciale (“Carta fotografica lucida”) e su determinate dimensioni (10 cm su 15 cm).

Nella normale finestra di dialogo di Windows 7 posso scegliere:

Formato carta,

Qualità della carta (ad esempio: “Auto”, “Alto”, “Standard”, “Personalizzato”)

Tipo di carta (“Carta comune”, “Carta fotografica lucida”, “Carta fotografica più lucida”, “Carta fotografica Pro Platinum”, “Hagaki”, ecc …)

Ma attraverso il codice c #, sono riuscito a impostare solo PaperSize (che è 4 “su 6” == 10 cm su 15 cm).

Il mio problema è come ottengo l’opzione per impostare il tipo di carta, e non il PaperSource (“Vassoio 1”, “Vassoio 2”, ecc.) ….

So che ogni stampante ha i propri tipi di carta che supporta, quindi probabilmente ho bisogno di scorrere tutto, ma non riesco a capirlo come.

questo è il mio codice attuale:

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

grazie a tutti in anticipo

Non sto dicendo che è imansible, ma non sarà bello. In teoria è ansible ottenere la struttura DEVMODE del dispositivo (quella struttura avrà estensioni specifiche per il driver della stampante), impostare i valori corretti e quindi riscriverli. Esistono alcune funzioni di supporto per l’object PrinterSettings. C’è un esempio di farlo qui

Questo può essere fatto senza DEVMODE. Impostare il tipo di carta tramite la proprietà PrintTicket.PageMediaType . Ad esempio :

  // ---------------------- GetPrintTicketFromPrinter ----------------------- ///  /// Returns a PrintTicket based on the current default printer. ///  /// A PrintTicket for the current local default printer. 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; }