Esta página puede contener texto traducido automáticamente.
Renderizar e imprimir documentos PDF en C# y VB.NET
Todo el mundo piensa en Adobe Reader cuando se trata de leer documentos PDF. Pero, ¿qué hacer si es desarrollador de software y desea mostrar documentos PDF en su aplicación? No desea pedirle al usuario que configure Adobe Reader y abra el documento allí.
Es posible que también deba implementar otros requisitos relacionados con PDF. Por ejemplo, imprima documentos PDF. O genere miniaturas para los documentos PDF cargados. O admita la edición de PDF en su escritorio o aplicación web.
Todo lo que necesita es una biblioteca de PDF que pueda renderizar e imprimir documentos PDF.
Biblioteca .NET para ver, editar o imprimir documentos PDF
Biblioteca Docotic.Pdf le permite mostrar, editar e imprimir documentos PDF en C# y VB.NET. Puede implementar cualquier flujo de renderizado de PDF complejo utilizando tres funciones principales.
La primera es la capacidad de convertir PDF a imágenes. Puede implementar casi todo basándose en esta característica. Desde imprimir PDF hasta mostrar un PDF en HoloLense o publicar un PDF en Instagram. Esto es posible porque las imágenes se admiten en todas partes.
La segunda característica clave es la capacidad de dibujar páginas PDF en la superficie de dibujo
de un System.Drawing.Graphics
. Le permite renderizar e imprimir archivos PDF en Windows Forms o
aplicaciones WPF. Para utilizar esta función, agregue DLL de extensión
BitMiracle.Docotic.Pdf.Gdi a su proyecto.
Por último, pero no menos importante, está la capacidad de extraer objetos de páginas PDF. Esta característica le permite crear un visor o editor de PDF en su aplicación C# o VB.NET.
9.5.17615-dev 14,813 pasaron Descargas totales de NuGet 4,924,084Obtenga la biblioteca y una clave de licencia gratuita por tiempo limitado en la página Descargar la biblioteca PDF de C# .NET.
Imprima PDF en Windows Forms o aplicación WPF
.NET no admite la impresión de documentos PDF listos para usar. Debe transformar su documento PDF
en una imagen, un archivo XPS o dibujarlo en una superficie System.Drawing.Graphics
. Luego puede
usar clases .NET para imprimir el resultado desde Windows Forms o una aplicación WPF.
En las aplicaciones de Windows Forms, puede utilizar clases del espacio de nombres
System.Drawing.Printing
. También hay clases útiles PrintDialog
y PrintPreviewDialog
para
crear una interfaz de usuario de impresión.
Tenga en cuenta que no se recomienda utilizar nada del espacio de nombres System.Drawing
en
entornos macOS y Linux. Las implementaciones de macOS y Linux de System.Drawing
están incompletas
y son diferentes de la implementación de Windows. Es posible que obtenga resultados incorrectos y/o
inconsistentes si usa el espacio de nombres System.Drawing
en entornos macOS y Linux.
WPF proporciona otra clase PrintDialog
pero no proporciona clases para la vista previa de
impresión. Afortunadamente, WPF le permite utilizar la clase PrintPreviewDialog
de
System.Windows.Forms.dll. Por lo tanto, es más fácil usar clases de impresión de los espacios de
nombres System.Windows.Forms
y System.Drawing.Printing
en aplicaciones WPF.
Mire la aplicación de demostración Imprimir PDF en .NET que viene en versiones C# y VB.NET para WinForms y WPF. La aplicación muestra cómo:
- mostrar una vista previa de impresión para documentos PDF
- imprimir documentos PDF en una impresora seleccionada
- configurar el tamaño del papel, el modo de escala y otras configuraciones de impresión
La aplicación utiliza la biblioteca Docotic.Pdf, DLL de extensión
BitMiracle.Docotic.Pdf.Gdi y clases de impresión de los espacios de
nombres System.Windows.Forms
y System.Drawing.Printing
. Puede utilizar sus clases
PdfPrintDocument y PdfPrintHelper en sus
proyectos de WPF o Windows Forms.
La clase PdfPrintDocument
describe la lógica de impresión principal. Esta clase conecta
Docotic.Pdf con la clase System.Drawing.Printing.PrintDocument
. El método clave es el controlador
de eventos printDocument_PrintPage
:
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
Graphics gr = e.Graphics;
// Trabajar en puntos para tener unidades consistentes para todos los contextos:
// 1. Impresora
// 2. Vista previa de impresión
// 3. PDF
gr.PageUnit = GraphicsUnit.Point;
if (m_printAction == PrintAction.PrintToPreview)
{
gr.Clear(Color.LightGray);
gr.FillRectangle(Brushes.White, m_printableAreaInPoints);
gr.IntersectClip(m_printableAreaInPoints);
gr.TranslateTransform(m_printableAreaInPoints.X, m_printableAreaInPoints.Y);
}
PdfPage page = m_pdf.Pages[m_pageIndex];
PdfSize pageSizeInPoints = getPageSizeInPoints(page);
if (m_printSize == PrintSize.FitPage)
{
float sx = (float)(m_printableAreaInPoints.Width / pageSizeInPoints.Width);
float sy = (float)(m_printableAreaInPoints.Height / pageSizeInPoints.Height);
float scaleFactor = Math.Min(sx, sy);
centerContentInPrintableArea(gr, pageSizeInPoints, scaleFactor);
gr.ScaleTransform(scaleFactor, scaleFactor);
}
else if (m_printSize == PrintSize.ActualSize)
{
centerContentInPrintableArea(gr, pageSizeInPoints, 1);
}
page.Draw(gr);
++m_pageIndex;
e.HasMorePages = (m_pageIndex <= m_lastPageIndex);
}
Primero, configuramos las transformaciones del objeto Graphics
de la página impresa. Es
importante respetar las configuraciones de "Ajustar página" y "Tamaño real". Y también mostramos
los márgenes duros de la impresora en el cuadro de diálogo Vista previa de impresión. Luego
dibujamos la página PDF actual en el objeto Graphics
usando el método de extensión
PdfPage.Draw.
La clase PdfPrintHelper
le permite usar PdfPrintDocument
con clases de UI para imprimir. Por
ejemplo, puede mostrar el cuadro de diálogo de impresión de su documento PDF así:
using (var pdf = new PdfDocument("your_document.pdf"))
action(pdf, getPrintSize());
public static DialogResult ShowPrintDialog(PdfDocument pdf, PrintSize printSize)
{
using (var printDialog = new PrintDialog())
{
printDialog.AllowSomePages = true;
printDialog.AllowCurrentPage = true;
printDialog.AllowSelection = true;
printDialog.PrinterSettings.MinimumPage = 1;
printDialog.PrinterSettings.MaximumPage = pdf.PageCount;
printDialog.PrinterSettings.FromPage = printDialog.PrinterSettings.MinimumPage;
printDialog.PrinterSettings.ToPage = printDialog.PrinterSettings.MaximumPage;
var result = printDialog.ShowDialog();
if (result == DialogResult.OK)
{
using (var printDocument = new PdfPrintDocument(pdf, printSize))
printDocument.Print(printDialog.PrinterSettings);
}
return result;
}
}
Eso es todo. Haga lo siguiente para implementar la impresión de PDF en su aplicación Windows Forms o WPF:
- agregar archivos
PdfPrintDocument
,PdfPrintHelper
yPrintSize
de la muestra - agregar una referencia a la biblioteca Docotic.Pdf
- agregar una referencia a DLL de extensión BitMiracle.Docotic.Pdf.Gdi
- (solo WPF) agregue referencias a los ensamblados System.Windows.Forms y System.Drawing
Imprimir PDF mediante conversión a imagen
Las clases del espacio de nombres System.Drawing.Printing
funcionan bien en aplicaciones Windows
Forms y WPF. Pero hay casos en los que no puedes o no debes usar System.Drawing.Printing
.
Por ejemplo, no debe utilizar System.Drawing.Printing
en servicios de Windows o aplicaciones
ASP.NET. System.Drawing.Printing
puede producir resultados inconsistentes al imprimir en Linux o
macOS. Y no puede utilizar System.Drawing.Printing
en aplicaciones Eto.Forms o Avalonia.
En tales casos, primero debe convertir documento PDF a imagen. Este ejemplo de C# muestra cómo guardar una página PDF como una imagen PNG o convertir un documento PDF completo a un TIFF de varias páginas:
using (var pdf = new PdfDocument(@"your_document.pdf"))
{
PdfDrawOptions options = PdfDrawOptions.Create();
options.HorizontalResolution = printerDpi;
options.VerticalResolution = printerDpi;
// guardar una página
pdf.Pages[0].Save("page0.png", options);
// guarde todo el documento como TIFF bitonal de varias páginas
options.Compression = ImageCompressionOptions.CreateTiff().SetBitonal();
pdf.SaveAsTiff("your_document.tiff", options);
}
Luego, imprima imágenes utilizando un marco o herramienta de impresión alternativa. Mire la
aplicación de demostración Imprimir PDF en Eto.Forms que muestra cómo
imprimir documentos PDF sin System.Drawing.Printing
.
Renderizar PDF en C# y VB.NET
Mostrar un PDF en su aplicación es como imprimir. En ASP.NET, WPF, Eto.Forms, Avalonia o cualquier otro tipo de aplicación, convierta PDF a imagen y luego muestre la imagen.
En una aplicación de Windows Forms, puede dibujar una página PDF en un contexto
System.Drawing.Graphics
desde cualquier control. O puede convertir una página PDF a un
System.Drawing.Bitmap
y luego mostrar el mapa de bits en un PictureBox
.
Este ejemplo muestra cómo convertir una página PDF a Bitmap
en C#:
using (var pdf = new PdfDocument("render.pdf"))
{
const float TargetResolution = 300;
PdfPage page = pdf.Pages[0];
double scaleFactor = TargetResolution / page.Resolution;
using (var bitmap = new Bitmap((int)(page.Width * scaleFactor), (int)(page.Height * scaleFactor)))
{
bitmap.SetResolution(TargetResolution, TargetResolution);
using (Graphics gr = Graphics.FromImage(bitmap))
page.Draw(gr);
bitmap.Save("result.png");
}
}
El código anterior requiere que agregue BitMiracle.Docotic.Pdf.Gdi extensión DLL a su proyecto.
Cree un visor de PDF o un editor de PDF en una aplicación .NET
Docotic.Pdf le permite obtener información detallada sobre cada objeto en una página PDF. Puede extraer fragmentos de texto, imágenes, rutas vectoriales, controles de formulario y anotaciones de una página PDF.
Luego, en tu aplicación, puedes renderizar todos los objetos extraídos. También puede implementar la capacidad de seleccionar y editar los objetos renderizados.
Mire el ejemplo Extraer texto, imágenes y rutas de PDF. Muestra cómo
extraer y dibujar objetos de página en el contexto System.Drawing.Graphics
.
También puedes extraer objetos de texto como rutas vectoriales. Utilice la sobrecarga PdfPage.GetObjects(PdfObjectExtractionOptions) para eso.
Conclusión
Utilice la biblioteca Docotic.Pdf para mostrar e imprimir documentos PDF en sus proyectos .NET. Mire ejemplos relacionados de C# y VB.NET:
Contáctenos si tiene preguntas sobre la impresión o renderizado de PDF.
Recursos Relacionados
- Artículo Convertir PDF a imagen en C# y VB.NET
- Renderizar e imprimir PDF muestras