Effettuare stampe con System.Printing

di , 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

Effettuare stampe con System.Printing (#117)
| 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