Imprimir un PDF desde asp.net y C#
Hola, si necesitar que tu aplicacion asp.net con c# pueda generar PDF y mandarlos imprimir automaticamente, pues te comento que no se pude por cuestiones de seguridad el codigo de la aplicacion no tiene permisos para mandar un archivo a la impresora.
Pero tranquilo eso no significa que no exista un solucion, la solucion es la siguiente:
1.- Generar el PDF que deseamos imprimir (es tema para otro post, yo actualmente genero un reporte de Crystal reports y desde codigo lo exporto a PDF).
2.- Utilizando iTextSharp podemos modificar dicho PDF y lo que hacemos es agregarle un pequeño script para que cuando el pdf se abra le aparesca al usuario la ventana para seleccionar la impresora.
3.- Al usuario le mandamos una nueva ventana emergente con un iFrame para que desplegue el PDF, tras lo cual le aparecerá al usuario las opciones para imprimir el pdf.
Pues bien, lo de descargar e importar el iTextSharp se los dejo a ustedes, yo les aporto el codigo para abrir y modificar el PDF. He aquí la función:
|
1 2 3 4 5 6 7 8 9 10 |
public static void AgregarPrintScript(string Original, string Copia)
{
PdfReader reader = new PdfReader(Original);
PdfStamper stamper = new PdfStamper(reader, new FileStream(Copia, FileMode.Create));
AcroFields fields = stamper.AcroFields;
stamper.JavaScript = "this.print(true);r";
stamper.FormFlattening = true;
stamper.Close();
reader.Close();
} |
Lo que la función recibe dos parametros, string Origina (el path a donde esta guardado el pdf) y Copi (el path en donde queremos que se guarde el nuevo pdf) lo que hace es leer el pdf creado (Original) agregarle el script para impresión y guardarlo en la Copia.
A continuacion un ejemplo de como utlizar la función:
|
1 |
AgregarPrintScript("C:\Test\Original.pdf", "C:\Test\Copia.pdf"); |
Pues bueno con lo anterior ya solo nos falta, abrir una nueva ventana donde muestremos el pdf (Copia.pdf) dentro de un iFrame, en cuanto el pdf termine de cargarse (puede demorar unos instantes dependiendo del tamaño del archivo) se abrirá la ventana para que el usuario seleccione la impresora
Espero que les sea de utilidad, y que les solucione el problema como a mi me lo solucionó, y si bien el archivo no se manda automaticamente a la impresora, solo hace falta un enter por parte del usuario para que eso suceda. Dudas o comentarios bien intencionados son bienvenidos

