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");
