Questa pagina può contenere testo tradotto automaticamente.
Rendering e stampa di documenti PDF in C# e VB.NET
Tutti pensano ad Adobe Reader quando si tratta di leggere documenti PDF. Ma cosa fare se sei uno sviluppatore di software e desideri visualizzare documenti PDF nella tua applicazione? Non vuoi chiedere all'utente di configurare Adobe Reader e aprire il documento lì.
Potrebbe anche essere necessario implementare altri requisiti relativi ai PDF. Ad esempio, stampare documenti PDF. Oppure genera miniature per i documenti PDF caricati. Oppure supporta la modifica dei PDF nella tua applicazione desktop o web.
Tutto ciò di cui hai bisogno è una libreria PDF in grado di eseguire il rendering e stampare documenti PDF.
Libreria .NET per visualizzare, modificare o stampare documenti PDF
Libreria Docotic.Pdf consente di visualizzare, modificare e stampare documenti PDF in C# e VB.NET. Puoi implementare qualsiasi flusso di rendering PDF complesso utilizzando tre funzionalità principali.
Il primo è la possibilità di convertire PDF in immagini. Puoi implementare quasi tutto in base a questa funzionalità. Dalla stampa PDF alla visualizzazione di un PDF su HoloLense o alla pubblicazione di un PDF su Instagram. Ciò è possibile perché le immagini sono supportate ovunque.
La seconda caratteristica fondamentale è la capacità di disegnare pagine PDF sulla superficie di
disegno di un System.Drawing.Graphics
. Ti consente di eseguire il rendering e stampare PDF in
Windows Forms o applicazioni WPF. Per utilizzare questa funzionalità, aggiungi DLL dell'estensione
BitMiracle.Docotic.Pdf.Gdi al tuo progetto.
Ultimo ma non meno importante è la possibilità di estrarre oggetti dalla pagina PDF. Questa funzionalità ti consente di creare un visualizzatore PDF o un editor PDF nella tua applicazione C# o VB.NET.
9.5.17615-dev Ne sono passati 14,813 Download totali di NuGet 4,924,084Ottieni la libreria e una chiave di licenza gratuita a tempo limitato sulla pagina Scarica la libreria PDF C# .NET.
Stampa PDF in Windows Forms o nell'applicazione WPF
.NET non supporta la stampa di documenti PDF immediatamente. Devi trasformare il tuo documento PDF
in un'immagine, un file XPS o disegnarlo su una superficie System.Drawing.Graphics
. È quindi
possibile utilizzare le classi .NET per stampare l'output dall'interno di un Windows Form o di
un'applicazione WPF.
Nelle applicazioni Windows Forms, puoi utilizzare le classi dallo spazio dei nomi
System.Drawing.Printing
. Sono inoltre disponibili utili classi PrintDialog
e
PrintPreviewDialog
per creare un'interfaccia utente di stampa.
Tieni presente che non è consigliabile utilizzare nulla dello spazio dei nomi System.Drawing
negli ambienti macOS e Linux. Le implementazioni macOS e Linux di System.Drawing
sono incomplete
e diverse dall'implementazione Windows. Potresti ottenere risultati errati e/o incoerenti se
utilizzi lo spazio dei nomi System.Drawing
in ambienti macOS e Linux.
WPF fornisce un'altra classe PrintDialog
ma non fornisce classi per l'anteprima di stampa.
Fortunatamente, WPF ti consente di utilizzare la classe PrintPreviewDialog
da
System.Windows.Forms.dll. Pertanto, è più semplice utilizzare le classi di stampa dagli spazi dei
nomi System.Windows.Forms
e System.Drawing.Printing
nelle applicazioni WPF.
Guarda l'applicazione demo Stampa PDF in .NET disponibile nelle versioni C# e VB.NET per WinForms e WPF. L'applicazione mostra come:
- visualizzare un'anteprima di stampa per i documenti PDF
- stampare documenti PDF su una stampante selezionata
- impostare il formato della carta, la modalità di ridimensionamento e altre impostazioni di stampa
L'applicazione utilizza la libreria Docotic.Pdf, DLL dell'estensione
BitMiracle.Docotic.Pdf.Gdi e classi di stampa dagli spazi dei nomi
System.Windows.Forms
e System.Drawing.Printing
. È possibile utilizzare le classi
PdfPrintDocument e PdfPrintHelper nei
progetti WPF o Windows Forms.
La classe PdfPrintDocument
descrive la logica di stampa principale. Questa classe collega
Docotic.Pdf con la classe System.Drawing.Printing.PrintDocument
. Il metodo chiave è il gestore di
eventi printDocument_PrintPage
:
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
Graphics gr = e.Graphics;
// Lavora per punti per avere unità coerenti per tutti i contesti:
// 1. Stampante
// 2. Anteprima di stampa
// 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);
}
Per prima cosa impostiamo le trasformazioni dell'oggetto Graphics
della pagina stampata. È
importante rispettare le impostazioni "Adatta pagina" e "Dimensioni reali". E visualizziamo anche i
margini rigidi della stampante nella finestra di dialogo Anteprima di stampa. Quindi disegniamo la
pagina PDF corrente sull'oggetto Graphics
utilizzando il metodo di estensione
PdfPage.Draw.
La classe PdfPrintHelper
ti consente di utilizzare PdfPrintDocument
con le classi
dell'interfaccia utente per la stampa. Ad esempio, puoi mostrare la finestra di dialogo di stampa
per il tuo documento PDF in questo modo:
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;
}
}
Questo è tutto. Effettuare le seguenti operazioni per implementare la stampa PDF nell'applicazione Windows Forms o WPF:
- aggiungere i file
PdfPrintDocument
,PdfPrintHelper
ePrintSize
da l'esempio - aggiungere un riferimento alla libreria Docotic.Pdf
- aggiungere un riferimento alla DLL dell'estensione BitMiracle.Docotic.Pdf.Gdi
- (Solo WPF) aggiunge riferimenti agli assembly System.Windows.Forms e System.Drawing
Stampa PDF utilizzando la conversione in immagine
Le classi dello spazio dei nomi System.Drawing.Printing
funzionano bene nelle applicazioni
Windows Form e WPF. Ma ci sono casi in cui non puoi o non dovresti usare System.Drawing.Printing
.
Ad esempio, non dovresti utilizzare System.Drawing.Printing
nei servizi Windows o nelle
applicazioni ASP.NET. System.Drawing.Printing
potrebbe produrre risultati incoerenti durante la
stampa su Linux o macOS. E non puoi utilizzare System.Drawing.Printing
nelle applicazioni
Eto.Forms o Avalonia.
In questi casi, è necessario prima convertire il documento PDF in immagine. Questo esempio C# mostra come salvare una pagina PDF come immagine PNG o convertire un intero documento PDF in un TIFF multipagina:
using (var pdf = new PdfDocument(@"your_document.pdf"))
{
PdfDrawOptions options = PdfDrawOptions.Create();
options.HorizontalResolution = printerDpi;
options.VerticalResolution = printerDpi;
// salva una pagina
pdf.Pages[0].Save("page0.png", options);
// salvare l'intero documento come TIFF bitonale multipagina
options.Compression = ImageCompressionOptions.CreateTiff().SetBitonal();
pdf.SaveAsTiff("your_document.tiff", options);
}
Quindi, stampa le immagini utilizzando un framework o uno strumento di stampa alternativo. Guarda
l'applicazione demo Stampa PDF in Eto.Forms che mostra come stampare
documenti PDF senza System.Drawing.Printing
.
Rendering di PDF in C# e VB.NET
Visualizzare il PDF nella tua applicazione è come stamparlo. In ASP.NET, WPF, Eto.Forms, Avalonia o qualsiasi altro tipo di applicazione, converti PDF in immagine e quindi visualizza l'immagine.
In un'app Windows Forms, puoi disegnare una pagina PDF in un contesto System.Drawing.Graphics
da
qualsiasi controllo. Oppure puoi convertire una pagina PDF in un System.Drawing.Bitmap
e quindi
visualizzare la bitmap in un PictureBox
.
Questo esempio mostra come convertire una pagina PDF in Bitmap
in 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");
}
}
Il codice precedente richiede l'aggiunta della DLL dell'estensione BitMiracle.Docotic.Pdf.Gdi al progetto.
Crea un visualizzatore PDF o un editor PDF nell'applicazione .NET
Docotic.Pdf ti consente di ottenere informazioni dettagliate su ogni oggetto su una pagina PDF. Puoi estrarre porzioni di testo, immagini, percorsi vettoriali, controlli di moduli e annotazioni da una pagina PDF.
Quindi nella tua applicazione puoi eseguire il rendering di tutti gli oggetti estratti. Puoi anche implementare la possibilità di selezionare e modificare gli oggetti renderizzati.
Guarda l'esempio Estrai testo, immagini e percorsi dal PDF. Mostra come
estrarre e disegnare oggetti di pagina nel contesto System.Drawing.Graphics
.
Puoi anche estrarre oggetti di testo come tracciati vettoriali. Utilizzare l'overload PdfPage.GetObjects(PdfObjectExtractionOptions) per questo.
Conclusione
Utilizza la libreria Docotic.Pdf per visualizzare e stampare documenti PDF nei tuoi progetti .NET. Guarda gli esempi C# e VB.NET correlati:
Contattaci se hai domande sulla stampa o sul rendering dei PDF.
Risorse correlate
- Articolo Converti PDF in immagine in C# e VB.NET
- Esempi di Rendering e stampa PDF