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);
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.