Para un proyecto que estamos implementando ha surgido la necesidad de imprimir un PDF desde la propia aplicación en desarrollo.
Existen diversas utilidades de pago pero ahora vamos a realizar el proceso con el software de Acrobat. Por ello un requisito imprescindible es instalar la versión actual de Acrobat Reader.
Lo primero que vamos a hacer es localizar la ruta del ejecutable de Acrobat, para ello vamos a buscar en el registro de Windows, esto lo podemos hacer con el siguiente código:
string applicationPath=""; var printApplicationRegistryPaths = new[] { @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Acrobat.exe", @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRD32.exe" }; foreach (var printApplicationRegistryPath in printApplicationRegistryPaths) { using (var regKeyAppRoot = Registry.LocalMachine.OpenSubKey(printApplicationRegistryPath)) { if (regKeyAppRoot == null) { continue; } applicationPath = (string)regKeyAppRoot.GetValue(null); } }
Una vez que ya disponemos del ejecutable vamos a lanzar un proceso que ejecute Acrobat e imprima un fichero pdf. Para evitar que acrobat se quede abierto una vez que finaliza la impresión «matamos» manualmente el proceso.
- rutaFichero es el nombre del fichero con el path
- elConfig.printer es una estructura con el nombre de la impresora por la que queremos imprimir, podemos sustituirlo por p.ej. «RICOH Aficio SP C240DN DDST»
Process proc = new Process(); proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; proc.StartInfo.Verb = "print"; proc.StartInfo.FileName = applicationPath; proc.StartInfo.Arguments = String.Format("/h /t \"{0}\" \"{1}\"", rutaFichero, elConfig.Printer); proc.StartInfo.UseShellExecute = false; proc.StartInfo.CreateNoWindow = true; proc.Start(); proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; if (proc.HasExited == false) { proc.WaitForExit(10000); } proc.EnableRaisingEvents = true; proc.Close(); KillAdobe("AcroRd32");