#117 - Effettuare stampe con System.Printing
di Cristian Civera, in .NET Framework, 24 aprile 2009
Con il rilascio del .NET Framework 3.0 sono state introdotte nuove tecnologie che hanno un po' offuscato altre novità non meno importanti. Tra queste c'è il supporto a XPS e la presenza di nuove API per effettuare stampe bypassando tutto il sistema classico Windows basato sui GDI, ma bensì con un nuovo stack che si affianca e permette la stampa diretta di documenti WYSWYG.
La gestione dei server, delle stampanti e delle relative code è contenuta nell'assembly System.Printing che contiene tutte le classi per gestire in modo completo le stampanti (PrintQueue), locali e remote (PrintServer), le impostazioni (PrintTicket) e le code (PrintSystemJobInfo).
Per elencare per esempio la lista delle stampanti presenti su un server, si può fare in questo modo:
// Stampo la lista delle stampanti locali PrintServer server = new PrintServer(); foreach (PrintQueue pq in server.GetPrintQueues()) { Console.WriteLine(pq.Name); }
E' possibile poi ottenere un riferimento ad una stampante, anche in base al nome della stessa, ottenere le impostazioni predefinite e, per esempio, cambiare l'orientamento:
// Recupero il server locale server = new LocalPrintServer(); // Riferimento alla stampante virtuale XPS PrintQueue printQueue = new PrintQueue(server, "Microsoft XPS Document Writer"); // Parto dalle impostazioni predefinite PrintTicket printTicket = printQueue.DefaultPrintTicket.Clone(); // Pagina orizzontale printTicket.PageOrientation = PageOrientation.Landscape; printTicket.PageMediaSize = new PageMediaSize(printTicket.PageMediaSize.Height.Value, printTicket.PageMediaSize.Width.Value);
Tramite il metodo PrintQueue.CreateXpsDocumentWriter si ottiene poi un riferimento XpsDocumentWriter che permette poi di scrivere sulla stampante oggetti di Windows Presentation Foundation, quali FixedDocument, FixedPage o oggetti Visual (praticamente qualsiasi oggetto visibile di WPF).
Nel codice seguente è presente un esempio per creare una semplice etichetta di testo all'interno di una singola pagina. Il metodo Write (insieme a WriteAsync) elabora poi gli oggetti e li manda alla stampante:
XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(printQueue); // Pagina da stampare FixedPage page = new FixedPage(); // Testo di prova TextBlock text = new TextBlock(); text.Text = "Prova di stampa!"; text.FontSize = 40; FixedPage.SetLeft(text, 20); FixedPage.SetTop(text, 20); // Aggiunto il testo alla pagina page.Children.Add(text); // Mando tutto alla stampante writer.Write(page, printTicket);
Approfondimenti
-
Le problematiche più comuni di un'architettura M-V-VM con WPF
-
#151 - Disabilitare Aero programmaticamente per incrementare le performance di WPF
-
Disabilitare tutti i web control in una pagina?
-
MetadataDiffViewer: aggiornato al .NET Framework 4.0, Silverlight 4.0 e Sharepoint 2010
-
#adonetdataservices v1.5 CTP 2 con supporto al #databinding per #wpf e #silverlight su http://u.aspitalia.com/ac
-
La piattaforma Microsoft per il cloud computing: Windows Azure
-
#37 - Gestione dei dati in Data Binding in Silverlight 2.0: Converters
-
#vs 2010 e #netfx 4 beta 2 live su MSDN downloads http://u.aspitalia.com/br Info su http://u.aspitalia.com/bq
-
#115 - Creare file ZIP con System.IO.Packaging
-
Visual Studio 2010 e .NET Framework 4.0: beta 2 e data di release RTM
-
#147 - Gestire tutte le eccezioni in WPF

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.