Trabajando con impresión de PDF - Fachadas
Imprimir archivo PDF en la impresora predeterminada usando configuraciones de impresora y página
Primero, el documento se convierte en imagen y luego se imprime en la impresora. Creamos una instancia de la clase PdfViewer que le permite imprimir un archivo PDF en la impresora predeterminada, usando el método BindPdf para el documento y realizar ciertas configuraciones. En nuestro ejemplo, estamos usando formato A4, orientación vertical. En las printerSettings, primero indicamos el nombre de la impresora en la que estamos imprimiendo. De lo contrario, imprimirá en la impresora predeterminada. A continuación, anotamos el número de copias que necesitamos.
public static void PrintingPDFFile()
{
// Crear objeto PdfViewer
PdfViewer viewer = new PdfViewer();
// Abrir archivo PDF de entrada
viewer.BindPdf(_dataDir + "sample.pdf");
// Establecer atributos para la impresión
viewer.AutoResize = true; // Imprimir el archivo con tamaño ajustado
viewer.AutoRotate = true; // Imprimir el archivo con rotación ajustada
viewer.PrintPageDialog = false; // No mostrar el diálogo de número de página al imprimir
// Crear objetos para configuraciones de impresora y de página y PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrintDocument prtdoc = new System.Drawing.Printing.PrintDocument();
// Establecer nombre de la impresora
ps.PrinterName = prtdoc.PrinterSettings.PrinterName;
// Establecer tamaño de página (si es necesario)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Establecer márgenes de página (si es necesario)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimir documento usando configuraciones de impresora y de página
viewer.PrintDocumentWithSettings(pgs, ps);
// Cerrar el archivo PDF después de imprimir
viewer.Close();
}
En orden de mostrar un diálogo de impresión, intenta usar el siguiente fragmento de código:
public static void PrintingPDFDisplayPrintDialog()
{
// Crear objeto PdfViewer
PdfViewer viewer = new PdfViewer();
// Abrir archivo PDF de entrada
viewer.BindPdf(_dataDir + "sample.pdf");
// Establecer atributos para imprimir
viewer.AutoResize = true; // Imprimir el archivo con tamaño ajustado
viewer.AutoRotate = true; // Imprimir el archivo con rotación ajustada
// Crear objetos para la impresora y configuraciones de página y PrintDocument
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings
{
// Establecer PageSize (si es necesario)
PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169),
// Establecer PageMargins (si es necesario)
Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0)
};
System.Windows.Forms.PrintDialog printDialog = new System.Windows.Forms.PrintDialog();
if (printDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// El código de impresión del documento va aquí
// Imprimir documento usando la impresora y configuraciones de página
System.Drawing.Printing.PrinterSettings ps = printDialog.PrinterSettings;
viewer.PrintDocumentWithSettings(pgs, ps);
}
// Cerrar el archivo PDF después de imprimir
viewer.Close();
}
Imprimir PDF en Impresora Virtual
Hay impresoras que imprimen en un archivo. Establecemos el nombre de la impresora virtual y, por analogía con el ejemplo anterior, realizamos la configuración.
public static void PrintingPDFToSoftPrinter()
{
// Crear objeto PdfViewer
PdfViewer viewer = new PdfViewer();
// Abrir archivo PDF de entrada
viewer.BindPdf(_dataDir + "sample.pdf");
// Establecer atributos para la impresión
viewer.AutoResize = true; // Imprimir el archivo con tamaño ajustado
viewer.AutoRotate = true; // Imprimir el archivo con rotación ajustada
viewer.PrintPageDialog = false; // No producir el diálogo de número de página al imprimir
viewer.PrintAsImage = false;
// Crear objetos para configuración de impresora y página y PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Establecer nombre de la impresora
ps.PrinterName = "HP Universal Printing PS (v7.0.0)";
// O establecer la impresora PDF
//ps.PrinterName = "Adobe PDF";
// Establecer tamaño de página (si es necesario)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Establecer márgenes de página (si es necesario)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimir documento usando la configuración de impresora y página
viewer.PrintDocumentWithSettings(pgs, ps);
// Cerrar el archivo PDF después de imprimir
viewer.Close();
}
Ocultando el Diálogo de Impresión
Aspose.PDF para .NET te permite ocultar el diálogo de impresión. Para esto, utiliza el método PrintPageDialog.
El siguiente fragmento de código te muestra cómo ocultar el diálogo de impresión.
public static void PrintingPDFHidePrintDialog()
{
// Crear objeto PdfViewer
PdfViewer viewer = new PdfViewer();
// Abrir archivo PDF de entrada
viewer.BindPdf(_dataDir + "sample.pdf");
// Establecer atributos para la impresión
viewer.AutoResize = true; // Imprimir el archivo con tamaño ajustado
viewer.AutoRotate = true; // Imprimir el archivo con rotación ajustada
viewer.PrintPageDialog = false; // No producir el diálogo de número de página al imprimir
// Crear objetos para la impresora y la configuración de página y PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Establecer nombre de impresora XPS/PDF
ps.PrinterName = "OneNote for Windows 10";
// Establecer PageSize (si es necesario)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Establecer PageMargins (si es necesario)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimir documento usando la configuración de impresora y página
viewer.PrintDocumentWithSettings(pgs, ps);
// Cerrar el archivo PDF después de imprimir
viewer.Close();
}
Imprimir PDF en Color a Archivo XPS en Escala de Grises
Un documento PDF en color puede ser impreso en una impresora XPS como escala de grises, usando PdfViewer. Para lograrlo, necesitas usar la propiedad PdfViewer.PrintAsGrayscale y configurarla en true. El siguiente fragmento de código demuestra la implementación de la propiedad PdfViewer.PrintAsGrayscale.
public static void PrintingPDFasGrayscale()
{
// Crear objeto PdfViewer
PdfViewer viewer = new PdfViewer();
// Abrir archivo PDF de entrada
viewer.BindPdf(_dataDir + "sample.pdf");
// Establecer atributos para la impresión
viewer.AutoResize = true; // Imprimir el archivo con tamaño ajustado
viewer.AutoRotate = true; // Imprimir el archivo con rotación ajustada
viewer.PrintPageDialog = false; // No mostrar el diálogo de número de página al imprimir
viewer.PrintAsGrayscale = false;
// Crear objetos para la impresora y configuración de página y PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Establecer nombre de impresora XPS/PDF
ps.PrinterName = "OneNote for Windows 10";
// Establecer tamaño de página (si es necesario)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Establecer márgenes de página (si es necesario)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimir documento usando la impresora y configuración de página
viewer.PrintDocumentWithSettings(pgs, ps);
// Cerrar el archivo PDF después de imprimir
viewer.Close();
}
Conversión de PDF a PostScript
La clase PdfViewer proporciona la capacidad de imprimir documentos PDF y, con la ayuda de esta clase, también podemos convertir archivos PDF al formato PostScript. Para convertir un archivo PDF a PostScript, primero instale cualquier impresora PS y simplemente imprima en un archivo con la ayuda de PdfViewer.
El siguiente fragmento de código le muestra cómo imprimir y convertir un PDF al formato PostScript.
public static void PrintingPDFToPostScript()
{
// Crear objeto PdfViewer
PdfViewer viewer = new PdfViewer();
// Abrir archivo PDF de entrada
viewer.BindPdf(_dataDir + "sample.pdf");
// Establecer atributos para la impresión
viewer.AutoResize = true; // Imprimir el archivo con tamaño ajustado
viewer.AutoRotate = true; // Imprimir el archivo con rotación ajustada
viewer.PrintPageDialog = false; // No producir el diálogo de número de página al imprimir
viewer.PrintAsImage = false;
// Crear objetos para la configuración de la impresora y página y PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Establecer el nombre de la impresora XPS/PDF
ps.PrinterName = "HP Universal Printing PS (v7.0.0)";
// Establecer el nombre del archivo de salida y el atributo PrintToFile
ps.PrintFileName = _dataDir + "PdfToPostScript_out.ps";
ps.PrintToFile = true;
// Establecer el tamaño de la página (si es necesario)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Establecer los márgenes de la página (si es necesario)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimir documento usando la configuración de impresora y página
viewer.PrintDocumentWithSettings(pgs, ps);
// Cerrar el archivo PDF después de imprimir
viewer.Close();
}
Comprobando el Estado del Trabajo de Impresión
Un archivo PDF puede ser impreso en una impresora física así como en el Microsoft XPS Document Writer, sin mostrar un cuadro de diálogo de impresión, usando la clase PdfViewer. Al imprimir archivos PDF grandes, el proceso puede tardar mucho tiempo, por lo que el usuario podría no estar seguro de si el proceso de impresión se completó o encontró un problema. Para determinar el estado de un trabajo de impresión, use la propiedad PrintStatus. El siguiente fragmento de código le muestra cómo imprimir el archivo PDF en un archivo XPS y obtener el estado de la impresión.
public static void CheckingPrintJobStatus()
{
// Crear objeto PdfViewer
PdfViewer viewer = new PdfViewer();
// Abrir archivo PDF de entrada
viewer.BindPdf(_dataDir + "sample1.pdf");
// Establecer atributos para la impresión
viewer.AutoResize = true; // Imprimir el archivo con tamaño ajustado
viewer.AutoRotate = true; // Imprimir el archivo con rotación ajustada
viewer.PrintPageDialog = false; // No producir el cuadro de diálogo de número de página al imprimir
viewer.PrintAsImage = false;
// Crear objetos para configuraciones de impresora y de página y PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Establecer nombre de la impresora XPS/PDF
ps.PrinterName = "HP Universal Printing PS (v7.0.0)";
// Establecer nombre del archivo de salida y atributo PrintToFile
ps.PrintFileName = _dataDir + "PdfToPostScript_out.ps";
ps.PrintToFile = true;
// Establecer tamaño de página (si es necesario)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Establecer márgenes de página (si es necesario)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Imprimir documento usando configuraciones de impresora y de página
viewer.PrintDocumentWithSettings(pgs, ps);
// Comprobar el estado de la impresión
if (viewer.PrintStatus != null && viewer.PrintStatus is Exception ex)
{
Console.WriteLine(ex.Message);
}
else
{
// No se encontraron errores. El trabajo de impresión se ha completado exitosamente
Console.WriteLine("Impresión completada sin ningún problema..");
}
// Cerrar el archivo PDF después de la impresión
viewer.Close();
}
struct PrintingJobSettings
{
public int ToPage { get; set; }
public int FromPage { get; set; }
public string OutputFile { get; set; }
public System.Drawing.Printing.Duplex Mode { get; set; }
}
Imprimiendo páginas en modo Simplex y Duplex
En un trabajo de impresión específico, las páginas de un documento PDF pueden imprimirse en modo Duplex o en modo Simplex, pero no se pueden imprimir algunas páginas como simplex y otras como duplex dentro de un solo trabajo de impresión. Sin embargo, para cumplir con el requisito, se pueden utilizar diferentes rangos de páginas y el objeto PrintingJobSettings. El siguiente fragmento de código muestra cómo imprimir algunas páginas de un archivo PDF en modo Simplex y algunas páginas en modo Duplex.
public static void PrintingPagesInSimplexAndDuplexMode()
{
int printingJobIndex = 0;
string inPdf = _dataDir + "sample-8page.pdf";
string output = _dataDir;
IList<PrintingJobSettings> printingJobs = new List<PrintingJobSettings>();
PrintingJobSettings printingJob1 = new PrintingJobSettings
{
FromPage = 1,
ToPage = 3,
OutputFile = output + "sample_1_3.xps",
Mode = Duplex.Default
};
printingJobs.Add(printingJob1);
PrintingJobSettings printingJob2 = new PrintingJobSettings
{
FromPage = 4,
ToPage = 6,
OutputFile = output + "sample_4_6.xps",
Mode = Duplex.Simplex
};
printingJobs.Add(printingJob2);
PrintingJobSettings printingJob3 = new PrintingJobSettings
{
FromPage = 7,
ToPage = 7,
OutputFile = output + "sample_7.xps",
Mode = Duplex.Default
};
printingJobs.Add(printingJob3);
PdfViewer viewer = new PdfViewer();
viewer.BindPdf(inPdf);
viewer.AutoResize = true;
viewer.AutoRotate = true;
viewer.PrintPageDialog = false;
PrinterSettings ps = new PrinterSettings();
PageSettings pgs = new PageSettings();
ps.PrinterName = "Microsoft XPS Document Writer";
ps.PrintFileName = System.IO.Path.GetFullPath(printingJobs[printingJobIndex].OutputFile);
ps.PrintToFile = true;
ps.FromPage = printingJobs[printingJobIndex].FromPage;
ps.ToPage = printingJobs[printingJobIndex].ToPage;
ps.Duplex = printingJobs[printingJobIndex].Mode;
ps.PrintRange = PrintRange.SomePages;
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
ps.DefaultPageSettings.PaperSize = pgs.PaperSize;
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
viewer.EndPrint += (sender, args) =>
{
if (++printingJobIndex < printingJobs.Count)
{
ps.PrintFileName = System.IO.Path.GetFullPath(printingJobs[printingJobIndex].OutputFile);
ps.FromPage = printingJobs[printingJobIndex].FromPage;
ps.ToPage = printingJobs[printingJobIndex].ToPage;
ps.Duplex = printingJobs[printingJobIndex].Mode;
viewer.PrintDocumentWithSettings(pgs, ps);
}
};
viewer.PrintDocumentWithSettings(pgs, ps);
}