Questa pagina può contenere testo tradotto automaticamente.

Converti HTML in PDF in C# e VB.NET

Se hai già speso molto tempo e denaro per creare contenuti in formato HTML, potresti voler creare PDF da quell'HTML. Un simile approccio è una direzione naturale per chiunque voglia evitare un lavoro duplicato.

Per un riutilizzo efficace degli investimenti, la conversione dovrebbe essere eseguita a livello di codice e il PDF risultante dovrebbe essere il più vicino possibile visivamente all'HTML di origine.

Conversione da HTML a PDF

API per la conversione da HTML a PDF nelle applicazioni .NET

Il componente aggiuntivo gratuito da HTML a PDF per la libreria Docotic.Pdf fornisce un'API per tali conversioni. Sia il componente aggiuntivo che la libreria possono essere utilizzati da applicazioni Web e desktop create per framework .NET e .NET Core.

Il componente aggiuntivo è una libreria .NET da HTML a PDF che utilizza Chromium durante la conversione. Prima di ogni conversione, il componente aggiuntivo controlla automaticamente se è già stato scaricato l'ultimo Chromium supportato. Qualsiasi versione idonea già scaricata verrà riutilizzata. Se non viene trovata alcuna versione idonea, il componente aggiuntivo ne scarica una prima della conversione. Si prevede che abbia la stessa conformità agli standard web di Google Chrome (R).

Il componente aggiuntivo può generare PDF da HTML in ambienti Windows, macOS e Linux. Leggi come configurare il componente aggiuntivo in Linux nell'articolo sulla conversione da HTML a PDF in Azure.

Il componente aggiuntivo è disponibile su NuGet ed è anche incluso nello zip con file binari della libreria. Per provare la libreria senza restrizioni sulla modalità di valutazione, è possibile ottenere la chiave di licenza gratuita limitata nel tempo qui.

Semplice conversione da HTML a PDF C#

Utilizzando l'API da HTML a PDF, il codice di conversione C# può assomigliare a questo:

static async Task convertUrlToPdfAsync(string urlString, string pdfFileName)
{
    using (var converter = await HtmlConverter.CreateAsync())
    {
        using (var pdf = await converter.CreatePdfAsync(new Uri(urlString)))
            pdf.Save(pdfFileName);
    }
}

È piuttosto semplice. Sono necessarie solo due chiamate per produrre un documento PDF. Come puoi vedere, l'API è asincrona e non fornisce affatto metodi sincroni.

Nei casi in cui desideri chiamare l'API da un codice sincrono, puoi utilizzare il seguente wrapper:

Task.Run(async () =>
{
    await convertUrlToPdfAsync("https://bitmiracle.com/", "output.pdf");
}).GetAwaiter().GetResult();

Tieni presente che in generale non è consigliabile chiamare i metodi asincroni in modo sincrono, quindi utilizza il wrapper solo quando non hai altra scelta.

Forniamo codice di esempio che mostra come utilizzare l'API da applicazioni console sia sincrone che asincrone. Inoltre, sono disponibili codici di esempio per le applicazioni Windows Forms e WPF.

Esiste anche il gruppo di esempi HTML to PDF. Ogni esempio è disponibile nella versione C# e VB.NET.

Crea un PDF con una stringa o un file HTML in C# e VB.NET

È facile convertire una stringa HTML in PDF con l'API. La stringa può contenere un documento HTML completo o solo un frammento. Il convertitore creerà per te un PDF dal codice HTML.

var html = "<body><br/><br/><br/><h1>Hello, World<h1></body>";
using (var pdf = await converter.CreatePdfFromStringAsync(html))
    pdf.Save("output.pdf");

Puoi specificare un URL di base per tutti i link relativi nel codice HTML che intendi convertire. Ecco uno snippet di codice su come convertire HTML in PDF con un URL di base in C#.

var incompleteHtml = "<img src=\"/images/team.svg\"></img>";
var options = new HtmlConversionOptions();
options.Load.BaseUri = new Uri("https://bitmiracle.com/");
using (var pdf = await converter.CreatePdfFromStringAsync(incompleteHtml, options))
    pdf.Save("output.pdf");

La conversione di un file HTML è quasi la stessa cosa della conversione di un URL. Usa semplicemente l'overload CreatePdfAsync che accetta un percorso invece di un URL. L'URL di base e altre opzioni sono supportati anche durante la conversione di un file HTML in PDF in codice C# o VB.NET.

var sampleHtmlPath = @"C:\path\to\sample.html";
using (var pdf = await converter.CreatePdfAsync(sampleHtmlPath))
    pdf.Save("output.pdf");

Puoi anche convertire immagini SVG in PDF utilizzando l'API.

Utilizza dimensioni, margini e scala della pagina personalizzati

Puoi impostare qualsiasi conversione da HTML a PDF C# fornendo opzioni di conversione ai metodi di creazione di PDF.

Ecco uno snippet di codice che mostra come configurare le dimensioni, i margini e la scala della pagina di output in C#:

using (var converter = await HtmlConverter.CreateAsync())
{
    var options = new HtmlConversionOptions();

    // puoi anche specificare se l'orientamento della pagina deve essere
    // orizzontale e puoi fornire una dimensione in punti o pollici
    options.Page.SetSize(PdfPaperSize.ItalyEnvelope);

    options.Page.MarginLeft = 10;
    options.Page.MarginTop = 20;
    options.Page.MarginRight = 30;
    options.Page.MarginBottom = 40;

    options.Page.Scale = 1.5;

    using (var pdf = await converter.CreatePdfAsync(url, options))
        pdf.Save("output.pdf");
}

Puoi specificare modelli di intestazione e piè di pagina utilizzando le opzioni di pagina. I modelli utilizzano codice HTML normale con supporto per alcune variabili. Queste variabili sono date, title, url, pageNumber e totalPages.

Si consiglia di utilizzare stili in linea e URI dati per le immagini.

Potresti voler specificare i margini superiore e inferiore per la pagina. Senza margini, l'intestazione o il piè di pagina potrebbero essere oscurati dal contenuto della pagina.

Il codice di esempio Converti HTML in PDF con intestazione e piè di pagina in C# o VB.NET mostra come usare le variabili e gli URI di dati nei modelli.

Conversione da HTML a PDF C# protetta da password

Puoi creare PDF anche se una pagina HTML è protetta da una coppia nome utente/password. È facile come impostare le opzioni di autenticazione all'interno di HtmlConversionOptions.

var options = new HtmlConversionOptions();
options.Authentication.SetCredentials("foo", "bar");

using (var pdf = await converter.CreatePdfAsync(url, options))
    pdf.Save("output.pdf");

È anche facile se la pagina necessita di alcuni cookie impostati per funzionare correttamente. Basta aggiungere quei cookie alle opzioni. Ecco come:

var options = new HtmlConversionOptions();
options.Cookies.Add(new Cookie("sessionID", "my-session-ID"));

using (var pdf = await converter.CreatePdfAsync(url, options))
    pdf.Save("output.pdf");

Ritarda l'inizio della conversione

Per impostazione predefinita, la conversione inizia immediatamente dopo il caricamento. Ma ci sono casi in cui la pagina ha bisogno di tempo per stabilizzarsi. Ad esempio, quando esegue alcuni calcoli e aggiorna il contenuto dopo che tali calcoli sono pronti.

Utilizzando le opzioni di avvio della conversione è possibile ritardare la conversione per un numero specificato di millisecondi.

// Attendi 10 secondi prima di avviare la conversione.
var options = new HtmlConversionOptions();
options.Start.SetStartAfterDelay(10 * 1000);

A volte è necessario eseguire uno script per attivare/disattivare gli elementi sulla pagina caricata o per consentire il caricamento dinamico del contenuto. Questo è anche possibile:

var options = new HtmlConversionOptions();
var js = @"
    async function scrollDownUntilYouCantAnyMore() {
        await new Promise((resolve, reject) => {
            // omesso per brevità
            }, 400);
        });
    }
    scrollDownUntilYouCantAnyMore();
";
options.Start.SetStartAfterScriptRun(js);
using (var pdf = await converter.CreatePdfAsync(url, options))
    pdf.Save("output.pdf");

Il codice di esempio da HTML a PDF dopo uno script eseguito in C# o VB.NET contiene la funzione completa scrollDownUntilYouCantAnyMore. L'esempio mostra come eseguire uno script prima della conversione da HTML a PDF.

Converti HTML in PDF in .NET ignorando gli errori SSL

Durante una conversione, può verificarsi un errore SSL. Tali errori di solito si verificano a causa di certificati autofirmati o altrimenti non attendibili. I certificati revocati e scaduti possono far sì che anche il convertitore da HTML a PDF generi eccezioni.

Puoi ignorare gli errori SSL se capisci perché si verificano e sei sicuro che sia sicuro ignorarli. Per ignorare gli errori SSL durante una conversione da HTML a PDF, utilizzare le opzioni motore con IgnoreSslErrors = true.

var engineOptions = new HtmlEngineOptions
{
    IgnoreSslErrors = true
};
using (var converter = await HtmlConverter.CreateAsync(engineOptions))
{
    var url = new Uri("https://self-signed.badssl.com/");
    using (var pdf = await converter.CreatePdfAsync(url))
        pdf.Save("output.pdf");
}

Inserisci contenuti HTML sulle pagine PDF

Ci sono casi in cui potresti dover convertire HTML e inserire il risultato della conversione sopra alcune pagine PDF esistenti. Ad esempio, quando hai l'immagine di un modulo, potresti voler mettere qualcosa sopra le aree vuote dell'immagine. Il risultato sarà simile a un modulo compilato.

Per inserire l'HTML convertito sul contenuto PDF esistente, dovrai:

  • creare pagine PDF con sfondo trasparente dall'HTML
  • creare XObject dalle pagine convertite
  • disegna quegli XObject su pagine PDF esistenti.

Il codice di esempio Converti HTML e inseriscilo sul contenuto PDF esistente in C# o VB.NET mostra tutti i passaggi. Si prega di dare un'occhiata al campione.