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.