#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
-
#159 - Gestire code di operazioni con un Dispatcher personalizzato
-
MetadataDiffViewer: aggiornato al .NET Framework 4.0, Silverlight 4.0 e Sharepoint 2010
-
#155 - Gestire e ottimizzare messaggi di grandi dimensioni in WCF
-
Velocity arriva alla CTP3
-
#167 - Eseguire un'applicazione per il .NET Framework con privilegi amministrativi
-
WPF e Siverlight: Dispatcher e finestre modali
-
#999 - Mostrare una finestra di dialogo popolata tramite AJAX utilizzando jQuery
-
#125 - Scaricare un file FTP tramite FtpWebRequest
-
12 aprile 2010: ecco la data ufficiale di lancio di VS 2010 e .NET Framework 4.0
-
Usare LINQ to SQL oggi è semplicemente sbagliato
-
Scopri i nostri nuovi libri su ASP.NET 4.0, C# 4 e Visual Basic 2010: in offerta lancio al 20% di sconto!

















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