La conversione di una pagina HTML in un documento PDF in C# è un'operazione comune, spesso utilizzata per creare fatture, report, contratti e altri documenti aziendali da modelli HTML. La conversione di una pagina HTML in un documento PDF in C# è inoltre essenziale per creare documenti statici, portatili e pronti per la stampa da contenuti web dinamici.
Il processo di conversione di una pagina HTML in un documento PDF prevede i seguenti passaggi:
- Aprire il file HTML sorgente e analizzare il codice della pagina HTML.
- Ottenere i file CSS e JS utilizzati nella pagina HTML.
- Analizzare gli stili CSS nei file CSS.
- Analizzare il codice JavaScript nei file JS.
- Eseguire il codice JavaScript e ottenere il codice della pagina HTML risultante.
- Creare un nuovo documento PDF.
- Convertire la grafica raster e vettoriale presente nella pagina HTML (inclusi stili CSS e trasparenza) in grafica presente nella pagina PDF e aggiungere la grafica al documento PDF risultante.
- Convertire il testo presente nella pagina HTML (inclusi stili CSS) in testo presente nella pagina PDF e aggiungere il testo al documento PDF risultante.
- Salva il documento PDF creato in un file.
La specifica dello standard HTML5 (
https://html.spec.whatwg.org/print.pdf) contiene 1553 pagine.
La specifica dello standard CSS2 (
https://www.w3.org/TR/CSS22/css2.pdf) contiene 426 pagine.
La specifica dello standard JavaScript (
https://ecma-international.org/wp-content/uploads/ECMA-262_16th_edition_june_2025.pdf) contiene 835 pagine.
I passaggi per convertire HTML in PDF e le informazioni sulle specifiche HTML5, CSS2 e JavaScript sono forniti sopra per chiarire che, in generale, la conversione da HTML a PDF è un'operazione molto complessa se implementata da zero.
Allo stesso tempo, questa operazione complessa è già implementata nei moderni browser web, che visualizzano le pagine HTML perfettamente e possono salvare la pagina HTML renderizzata in un file PDF. Pertanto, sorge spontanea una domanda: è possibile utilizzare un browser web in un'applicazione C# per convertire una pagina HTML in un documento PDF?
In questo articolo, vedremo come convertire una pagina HTML di qualsiasi complessità in un documento PDF in un'applicazione C# in modo completamente gratuito e con la massima qualità utilizzando Chromium.
Chromium è un progetto di browser web open source che viene utilizzato principalmente come base per la maggior parte dei browser web moderni, tra cui Google Chrome, Microsoft Edge, Opera e altri. È progettato pensando a velocità, sicurezza e stabilità e presenta contributi significativi da parte di sviluppatori di Google, Microsoft e altre aziende.
Conversione di una pagina HTML in un documento PDF in C# utilizzando la riga di comando di Chrome
Il modo più semplice per convertire una pagina HTML in un documento PDF è eseguire il seguente comando di Chrome dalla riga di comando:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --headless --disable-gpu —run-all-compositor-stages-before-draw --no-margins --printBackground=true --no-pdf-header-footer --print-to-pdf="D:\result.pdf" "https://www.vintasoft.com/index.html"
Ecco una breve descrizione dei parametri utilizzati nella riga di comando di Chrome:
- --headless – specifica che Chrome deve essere eseguito senza un'interfaccia grafica.
- --disable-gpu – specifica che la GPU deve essere disabilitata durante il rendering di una pagina HTML.Questo parametro è necessario per la compatibilità con le versioni precedenti di Chrome.
- --run-all-compositor-stages-before-draw – specifica che tutte le fasi di rendering e composizione devono essere completate prima che venga visualizzata la pagina HTML.
- --no-margins – specifica che la pagina HTML deve essere visualizzata senza margini.
- --printBackground – specifica che la pagina HTML deve contenere grafica di sfondo.
- --no-pdf-header-footer – specifica che il documento PDF generato non deve contenere un'intestazione/piè di pagina con informazioni sul documento.
- --print-to-pdf – specifica il percorso del file PDF salvato. Il percorso deve essere assoluto.
Il comando precedente può essere eseguito dalla riga di comando di Windows/Linux/maOS o dal codice C#.
Ecco il codice C# che dimostra come convertire una pagina HTML in un documento PDF in un'applicazione console .NET utilizzando Chrome:
using System.Diagnostics;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
string chromePath = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
string sourceUrl = "https://www.vintasoft.com/index.html";
string resultPdfFilePath = @"D:\result.pdf";
string chromeArgsTemplate =
"--headless --no-pdf-header-footer --no-margins --disable-gpu --run-all-compositor-stages-before-draw --printBackground=true --print-to-pdf=\"{0}\" {1}";
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = chromePath,
Arguments = string.Format(chromeArgsTemplate, resultPdfFilePath, sourceUrl),
UseShellExecute = false,
CreateNoWindow = false
};
using (Process process = Process.Start(startInfo))
{
process.WaitForExit();
}
Console.WriteLine("HTML page is converted to the PDF document.");
}
}
}
Questo metodo di conversione può essere utilizzato se il browser web Chrome è installato sul computer e si conosce il percorso del file "chrome.exe".
L'applicazione .NET risultante è di piccole dimensioni perché non contiene librerie aggiuntive e si basa interamente sul browser web Chrome.
Conversione di una pagina HTML in un documento PDF in C# utilizzando il pacchetto NuGet CefSharp.OffScreen
Il pacchetto NuGet CefSharp.OffScreen contiene una versione compilata della libreria CefSharp e consente agli sviluppatori di eseguire un'istanza completa del browser web Chromium in background senza un'interfaccia utente visibile.
Se si desidera utilizzare la libreria CefSharp.OffScreen in un'applicazione .NET Framework, è sufficiente aggiungere un riferimento al pacchetto NuGet CefSharp.OffScreen all'applicazione .NET Framework.
Se si desidera utilizzare la libreria CefSharp.OffScreen in un'applicazione .NET Core, è sufficiente aggiungere un riferimento al pacchetto NuGet CefSharp.OffScreen.NETCore all'applicazione .NET Core.
Ecco il codice C# per un'applicazione console .NET che converte una pagina HTML in un documento PDF utilizzando la libreria CefSharp.OffScreen:
using CefSharp;
using CefSharp.OffScreen;
using System;
using System.Threading.Tasks;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
string sourceUrl = "https://www.vintasoft.com/index.html";
string resultPdfFilePath = @"D:\result.pdf";
Task task = ConvertHtmlToPdfUsingCefSharpOffScreen(sourceUrl, resultPdfFilePath);
task.Wait();
Console.WriteLine("HTML page is converted to the PDF document.");
Console.ReadKey();
}
static async Task ConvertHtmlToPdfUsingCefSharpOffScreen(string url, string pdfPath)
{
// if CEF is not initialized
if (Cef.IsInitialized == null || Cef.IsInitialized == false)
{
// create CEF settings
CefSettings settings = new CefSettings();
// initialize CEF
Cef.Initialize(settings);
}
// create Chromium web browser
using (ChromiumWebBrowser browser = new ChromiumWebBrowser(url))
{
// wait while page will be loaded
await browser.WaitForInitialLoadAsync();
// create PDF print settings
PdfPrintSettings printSettings = new PdfPrintSettings
{
MarginType = CefPdfPrintMarginType.None,
PrintBackground = true,
Landscape = false,
Scale = 1.0,
PreferCssPageSize = true,
DisplayHeaderFooter = false
};
// print web page to a PDF file
await browser.PrintToPdfAsync(pdfPath, printSettings);
}
}
}
}
Questo metodo di conversione è indipendente dal browser web Chrome e, in questo caso, non è necessario compilare CefSharp autonomamente, poiché i creatori del pacchetto NuGet CefSharp.OffScreen lo hanno già fatto.
L'applicazione .NET risultante è completamente autonoma e di grandi dimensioni (poco più di 300 MB) perché contiene i file della libreria CefSharp.
Conversione di una pagina HTML in un documento PDF in C# utilizzando la libreria CefSharp
CefSharp è un progetto open source che fornisce un wrapper .NET per il Chromium Embedded Framework (CEF). CefSharp consente agli sviluppatori di incorporare un browser web basato su Chromium completamente funzionale direttamente in applicazioni desktop C# o VB.NET.
Il repository CefSharp si trova su GitHub:
https://github.com/cefsharp/cefsharp
Il repository contiene 15 progetti, tra cui un'applicazione console di esempio, un'applicazione WinForms di esempio e un'applicazione WPF di esempio.
Prova a eseguire l'applicazione WPF di esempio (progetto "CefSharp.Wpf.Example.netcore") e vedrai un'applicazione WPF con navigazione tra le pagine simile a Chrome. L'applicazione WPF include la navigazione tramite link, stili CSS e codice JavaScript: l'esperienza è identica a quella di Chrome. Nel menu principale dell'applicazione, puoi selezionare il menu "Test => Stampa scheda corrente in PDF" e salvare la pagina HTML renderizzata come file PDF.
Questo metodo di conversione è indipendente dal browser web Chrome, ma dovrai compilare manualmente CefSharp dal codice sorgente, operazione che viene eseguita automaticamente durante la compilazione del progetto CefSharp in Visual Studio.
L'applicazione .NET risultante (il progetto "CefSharp.Wpf.Example.netcore") è completamente autonoma e ha dimensioni considerevoli (poco più di 400 MB) perché contiene i file della libreria CefSharp.
Elaborazione di documenti PDF con VintaSoft Imaging .NET SDK
VintaSoft ha scelto di non includere la funzionalità per la conversione di pagine HTML in PDF documenti nei suoi SDK perché il compito è molto complesso ed è già implementato nei moderni browser web.
Allo stesso tempo,
VintaSoft Imaging .NET SDK e
VintaSoft PDF .NET Plug-in consentono di creare, visualizzare, verificare, stampare, annotare, modificare, proteggere, firmare, ottimizzare, comprimere, convertire e salvare documenti PDF e PDF/A in Windows, Linux e macOS.
Di conseguenza, l'SDK VintaSoft può essere utilizzato per elaborare il documento PDF creato, ovvero:
Informazioni dettagliate sulle funzionalità di elaborazione dei documenti PDF tramite
VintaSoft Imaging .NET SDK +
VintaSoft PDF .NET Plug-in è disponibile qui:
https://www.vintasoft.com/it/vspdf-dotnet-index.html