#117 - Effettuare stampe con System.Printing

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

IL CONTENUTO
SCRIPT VIA E-MAIL

Iscriviti alle nostre newsletter unoscript@lgiorno e Xcript per ricevere gli script via e-mail.

MEDIA
IN EVIDENZA
MISC