• Saltar a la navegación principal
  • Saltar al contenido principal
LUISCALDEVILLA

LUISCALDEVILLA

El blog personal de Luis Caldevilla

  • Inicio
  • Sobre mi
  • Recursos
  • Contactar

08/06/2017 by lcaldevilla

Imprimir un PDF desde c#

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

Publicado en: Programación

Copyright © 2025 · Hello! Pro 3 en Genesis Framework · WordPress · Acceder