posts - 644, comments - 2003, trackbacks - 137

My Links

News

Raffaele Rialdi website

Su questo sito si trovano i miei articoli, esempi, snippet, tools, etc.

Archives

Post Categories

Image Galleries

Blogs

Links

Stampare un file su una stampante a scelta

Visto che la domanda è sempre più frequente ho pensato di metterla sul blog.

Per stampare un file arbitrario da un PC la soluzione è quella di usare i servizi della shell di Windows. La tipologia di file specificato è indifferente e dipende solo se sul PC in questione è stato installato un applicativo in grado di 'capire' il formato del file e i verb che la shell di Windows richiede.

I verb sono dei comandi che la shell impartisce agli applicativi tramite command line. Il modo in cui passare questi comandi è standard ed è scritto nel registry dalla stessa applicazione al momento della sua installazione.

In questo esempio il file pdf viene stampato sulla stampante di default:

   ProcessStartInfo si = new ProcessStartInfo(@"c:\temp\file.pdf");
   si.Verb = "print";
   Process.Start(si);

Per stampare invece su una specifica stampante, si può usare un verb meno conosciuto, printto:

   ProcessStartInfo si = new ProcessStartInfo(@"c:\temp\file.pdf");
   si.Verb = "printto";
   si.Arguments = "\"EPSON Stylus C80 Series\"";
   Process.Start(si);

Le doppie virgolette nel nome della stampante si rendono necessarie visto che ci sono degli spazi.

Print | posted on giovedì 27 gennaio 2005 13:16 | Filed Under [ .NET [Italiano] ]

Feedback

Gravatar

# re: Stampare un file su una stampante a scelta

Ciao Raffaele,
volevo chiederti se è possibile utilizzare il verb printto evitando l'apertura di Acrobat Reader...
Grazie!
04/12/2006 13:49 | Maurizio Magnani
Gravatar

# re: Stampare un file su una stampante a scelta

Scusami Raffaele mi sono spiegato male...
Dunque ho una ConsoleApplication e all'interno ho inserito il tuo codice per stampare un pdf. Il mio problema è che questa procedura "gira" su un srver e rimane in ascolto su di una cartella e appena arriva un pdf lo stampa ma non posso aprire n sessioni di Acrobat Reader. Cercavo un modo per mandare in stampa un pdf e successivamente chiudere acrobat.
Ti posto il mio codice:

while(true){
ProcessStartInfo psi = new ProcessStartInfo(tmpFile);
psi.Verb = "printto";
psi.Arguments = "\"Nome stampante\"";
Process print = new Process();
print.StartInfo = psi;
print.Start();

File.Delete(tmpFile);
}

Se utilizzo questo codice non riesco ad inviare in stampa il documento perchè mentre si avvia il processo il documento viene cancellato...non mi sembra bello utilizzare uno sleep per attendere che il pdf sia mandato in stampa perchè la grandezza del pdf puoi variare quindi non saprei...



04/12/2006 17:02 | Maurizio Magnani
Gravatar

# re: Stampare un file su una stampante a scelta

Maurizio, il blog non è posto per domande.
Posta la tua domanda sui ng di microsoft o ugidotnet...
Grazie e ciao
04/12/2006 17:12 | Raffaele Rialdi
Gravatar

# re: Stampare un file su una stampante a scelta

no non c'è nessun motivo, non sono incavolato con te anche perché non ti conosco e sono capitato qui per caso, è solo che mi è sembrata una risposta arrogante la tua.

Le idee su cosa sia il blog mi sono chiare, a mio parere il commento non si discosta di molto rispetto al post quindi una risposta ci sarebbe stata (anche perché è la prima volta che vedo qualcuno che dice che "il blog non è posto per domande", testuali parole, ma sono contento che tu sia andato a leggere su cosa sia davvero su wikipedia).

Detto questo il mio era solo un appunto, senza risentimenti in quanto non ti conosco.

Demetrio Filocamo

27/12/2006 11:11 | Demetrio Filocamo
Gravatar

# re: Stampare un file su una stampante a scelta

Mi dispiace veramente che la mia risposta ti sia apparsa come arrogante. Non era proprio la mia intenzione. Se così fosse stato non mi sarei preoccupato di rispondergli sui newsgroup così velocemente. Quanto al blog il significato di commento mi sembra più che chiaro.

Spero che tu capisca anche che ricevo una grossa quantità di email con problemi di ogni genere e chiedo a tutti di postarle pubblicamente proprio perché le risposte (mie o di altri) possano essere di aiuto/spunto a tutti coloro che faranno uso di google groups.
27/12/2006 12:22 | Raffaele Rialdi
Gravatar

# re: Stampare un file su una stampante a scelta

La shell non prevede di passare altri parametri, quindi la risposta è no.
Ovviamente se l'applicativo che si occupa la stampa prevedesse di accettare da command line il numero di copie, allora sarebbe possibile.
18/05/2012 16:49 | Raffaele Rialdi
Gravatar

# re: Stampare un file su una stampante a scelta

Infatti supponevo che fosse una cosa del genere. Grazie per la risposta.
27/05/2012 17:54 | girolamo
Gravatar

# re: Stampare un file su una stampante a scelta

Dipende da cosa vuoi fare.
Se vuoi attendere la fine della stampa puoi usare WaitForExit() a patto che lo fai in un altro thread, altrimenti la UI viene bloccata e l'app si pianta fino a che la stampa non finisce.

Stampare più copie non fa differenza. Le stampe vengono accumulate nello spooler quindi attendere la fine della precedente è opzionale. Certo sarebbe molto più efficiente poter dare il numero di copie allo spooler, ma la command line non si può.
07/11/2012 21:15 | Raffaele Rialdi
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET