Effettuare stampe con System.Printing

di Cristian Civera, in .NET Framework,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi