Questa pagina può contenere testo tradotto automaticamente.

Funzionalità da HTML a PDF

Puoi convertire HTML in PDF utilizzando la libreria Docotic.Pdf. Controlla le risorse menzionate in questa pagina per scoprire come creare bellissimi PDF dai tuoi dati.

Processo di conversione da HTML a PDF

Avresti bisogno del componente aggiuntivo HTML to PDF per le conversioni da HTML a PDF. Questo è un componente aggiuntivo gratuito per la libreria Docotic.Pdf. Il componente aggiuntivo è disponibile anche nel file zip con i file binari della libreria.

Libreria Docotic.Pdf 9.5.17615-dev Componente aggiuntivo da HTML a PDF 9.5.17615-dev
Test di regressione Ne sono passati 14,813 Download totali di NuGet 4,924,084

Riferimento API

Sul nostro sito forniamo il riferimento API per il componente aggiuntivo da HTML a PDF.

Articoli

Leggi quanto segue per saperne di più sulla conversione da HTML a PDF nel codice C# e VB.NET.

Codice d'esempio

Conversione da HTML a PDF è il termine che può descrivere la varietà di attività correlate. Le sezioni seguenti descrivono queste attività in modo più dettagliato.

Conversione da HTML a PDF C#

Dovresti iniziare con l'installazione dell'add-on. Usa Package Manager per installare l'add-on HTML to PDF da NuGet.

Install-Package BitMiracle.Docotic.Pdf.HtmlToPdf

L'add-on fornisce API solo asincrone. L'abbiamo progettato per funzionare con gestori di eventi asincroni e metodi asincroni. Puoi usare l'add-on in Windows Forms, WPF, ASP.NET e applicazioni console.

Il codice C# HTML in PDF si presenta così:

using var converter = await HtmlConverter.CreateAsync();
var uri = new Uri("https://bitmiracle.com/pdf-library/html-pdf/");
using var pdf = await converter.CreatePdfAsync(uri);
pdf.Save("out.pdf");

Il codice crea un'istanza del convertitore HTML-PDF. Quindi il codice usa l'istanza per creare un PDF da HTML. Puoi continuare a lavorare con PDF document ma il codice di esempio salva solo il documento.

Se la tua applicazione console usa una versione precedente di C# e non hai async Main, non preoccuparti. Puoi comunque usare l'add-on nella tua app.

Il codice seguente mostra come convertire un URL in PDF in un normale metodo sincrono:

Task.Run(async () =>
{
    using var converter = await HtmlConverter.CreateAsync();
    var uri = new Uri("https://bitmiracle.com/pdf-library/html-pdf/");
    using var pdf = await converter.CreatePdfAsync(uri);
    pdf.Save("out.pdf");
}).GetAwaiter().GetResult();

Le applicazioni VB.NET utilizzano un codice simile. Ecco uno snippet che mostra come convertire HTML in PDF in VB.NET.

Task.Run(
    Async Function()
        Using converter = Await HtmlConverter.CreateAsync()
            Dim uri = New Uri("https://bitmiracle.com/pdf-library/html-pdf/")
            Using pdf = Await converter.CreatePdfAsync(uri)
                pdf.Save("out.pdf")
            End Using
        End Using
    End Function
).GetAwaiter().GetResult()

Scarica progetti di test completi dal nostro repository GitHub:

Convertire la stringa HTML in PDF in C#

Uno dei compiti più comuni è generare PDF da HTML in un'applicazione C# o VB.NET. Il processo può iniziare con un modello che l'app popola con dati da un database. Non è raro che un utente di un sito web crei il modello, i dati o entrambi.

L'HTML generato o caricato automaticamente può assumere la forma di un file o di una stringa con il codice. L'add-on fornisce un metodo che accetta un percorso file. Utilizzare il metodo per convertire il file HTML in PDF nel codice C#. Il codice seguente è per il caso in cui si ha una stringa.

using var converter = await HtmlConverter.CreateAsync();

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

L'HTML può contenere riferimenti relativi a immagini, script e file CSS. Per convertire correttamente tale codice, dovresti usare le opzioni di conversione. Ecco come specificare un URL di base usando le opzioni:

using var converter = await HtmlConverter.CreateAsync();

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("out.pdf");

Il nostro repository GitHub contiene il progetto di test completo.

Eseguire JavaScript prima della conversione

L'API add-on fornisce un modo per eseguire un codice JS prima della conversione. Il codice può generare o modificare dinamicamente il contenuto HTML. Ad esempio, può attivare o disattivare elementi o far sì che il contenuto dinamico venga caricato.

Il codice seguente mostra come ritardare la conversione da HTML a PDF fino al completamento di JavaScript.

using var converter = await HtmlConverter.CreateAsync();

var options = new HtmlConversionOptions();
var js = @"document.body.style.backgroundColor = 'green';";
options.Start.SetStartAfterScriptRun(js);

var url = new Uri("https://google.com");
using var pdf = await converter.CreatePdfAsync(url, options);
pdf.Save("out.pdf");

Lo snippet soprastante usa un codice molto semplice solo per illustrare l'approccio. Per un esempio più concreto, dai un'occhiata a l'app di esempio corrispondente nel nostro repository GitHub. L'app mostra come gestire una pagina che carica dinamicamente i suoi contenuti. Il codice JavaScript nell'app scorre la pagina finché non ci sono più nuovi contenuti. Dopodiché, avviene la conversione in PDF.

Ignora gli errori SSL

Quando si inviano richieste sicure per caricare HTML, il componente aggiuntivo verifica se il certificato SSL che autentica l'identità di un sito web e abilita una connessione crittografata è valido e attendibile.

Di default, l'add-on genererà un'eccezione se il convertitore HTML-PDF non considera attendibile il certificato per qualsiasi motivo. Se comprendi il rischio di accettare un certificato non attendibile, puoi dire all'add-on di ignorare i controlli.

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("out.pdf");

Per il codice completo, vai al repository degli esempi Docotic.Pdf.

Fornire password per le pagine protette

Alcune pagine web richiedono l'autenticazione per accedervi. Quando accedi a un URL sicuro che richiede l'autenticazione HTTP, il browser ti chiede di fornire nome utente e password.

Utilizzando le opzioni di conversione, è possibile indicare all'API di fornire credenziali per le pagine web che richiedono l'accesso.

Questo codice C# mostra come convertire HTML protetto da password in PDF

using var converter = await HtmlConverter.CreateAsync();
var url = new Uri("http://httpbin.org/basic-auth/foo/bar");

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

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

Trova il campione di lavoro completo nel repository degli esempi.

Attendi prima della conversione

Ritardare la conversione da HTML a PDF può essere utile se la pagina continua ad aggiornarsi per un po' dopo essere stata caricata. Spesso è il caso quando si ha a che fare con contenuti dinamici generati da chiamate JavaScript o AJAX.

Il test Acid 3 è un esempio perfetto di una pagina che trarrebbe beneficio da un ritardo prima della conversione. Il test esegue il numero di controlli per valutare la capacità di un browser di rendere correttamente pagine web complesse. Questi controlli richiedono tempo. Prova a modificare il tempo di attesa nel codice seguente per vedere come influisce sui risultati della conversione.

var options = new HtmlConversionOptions();
options.Start.SetStartAfterDelay(10 * 1000);

using var converter = await HtmlConverter.CreateAsync();
var url = new Uri("http://acid3.acidtests.org/");
using var pdf = await converter.CreatePdfAsync(url, options);
pdf.Save("out.pdf");

Il codice soprastante mostra come convertire HTML in PDF con ritardo. Mentre il tempo aggiuntivo aiuta a ottenere risultati migliori, si noti che l'aggiunta di ritardi può influire sulle prestazioni. Ritardi insufficienti possono influire negativamente sulla qualità della conversione. Un approccio alternativo all'utilizzo di un ritardo è utilizzare uno script che verrebbe eseguito finché la pagina non è pronta.

È possibile ottenere il progetto di test completo nel repository degli esempi Docotic.Pdf.

L'API HTML to PDF può aggiungere blocchi di footer/header ripetibili sulle pagine generate. Il convertitore crea i blocchi dai modelli HTML specificati nelle opzioni di conversione. Consigliamo di utilizzare stili in linea e URI dati per le immagini all'interno dei modelli.

Il convertitore posiziona le intestazioni e i piè di pagina all'interno dei margini di pagina. Dato che i margini di pagina sono piccoli, il contenuto dell'intestazione e del piè di pagina potrebbe non essere visibile. Si consiglia di specificare esplicitamente i margini superiore e inferiore. La dimensione dovrebbe corrispondere alla dimensione dell'intestazione e del piè di pagina, rispettivamente.

Scopri come trasformare HTML in PDF e aggiungere intestazione e piè di pagina

using var converter = await HtmlConverter.CreateAsync();

var options = new HtmlConversionOptions();
options.Page.HeaderTemplate = File.ReadAllText("header-template.html");
options.Page.MarginTop = 50;

options.Page.FooterTemplate = File.ReadAllText("footer-template.html");
options.Page.MarginBottom = 50;

var url = new Uri("https://www.iana.org/numbers");
using var pdf = await converter.CreatePdfAsync(url, options);
pdf.Save("out.pdf");

Il convertitore può inserire valori come la data di conversione e il titolo del documento in posizioni predefinite all'interno dei modelli. Consulta la descrizione delle proprietà HeaderTemplate e FooterTemplate per maggiori informazioni.

Il codice completo del progetto di test e del modello si trova nel repository degli esempi Docotic.Pdf.

Contenuto della scala

Quando si ha a che fare con pagine web che hanno layout ampi, è possibile aumentare la dimensione del PDF di output o ridimensionare il contenuto per adattarlo alla pagina PDF. Per posizionare meglio il contenuto ridimensionato, è anche possibile impostare i margini.

Un PDF ben ridimensionato offre una migliore esperienza di lettura, perché i lettori non dovranno ingrandire o rimpicciolire per visualizzare correttamente il contenuto. Se il documento HTML è difficile da leggere a causa di una piccola dimensione del carattere, è possibile ridimensionare il contenuto.

Di default, l'API produce PDF con dimensioni di pagina pari ad A4. Non ci sono margini né ingrandimenti. Utilizzando le opzioni di conversione, puoi modificare queste impostazioni.

Scopri come impostare il fattore di scala e i margini durante la generazione di PDF da HTML

using var converter = await HtmlConverter.CreateAsync();

var html = "<html><head><style>body { background-color: coral; margin-top: 100px;}</style></head>" +
"<body><h1>Did you notice the margins and the scale?</h1></body></html>";

var options = new HtmlConversionOptions();
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.CreatePdfFromStringAsync(html, options);
pdf.Save("out.pdf");

Il repository di campioni Docotic.Pdf contiene il progetto completo.

Sovrapporre HTML a un PDF esistente

Ci sono casi in cui vorresti usare un PDF esistente come sfondo per il risultato della conversione. Questo è possibile con Docotic.Pdf e l'add-on.

Questo metodo prevede la creazione di un nuovo PDF dall'HTML (il contenuto di overlay) e la successiva fusione con il PDF esistente. Il documento finale includerà sia il contenuto originale che il nuovo overlay. Ecco il codice che illustra il metodo.

using var converter = await HtmlConverter.CreateAsync();

var options = new HtmlConversionOptions();
options.Page.SetSizeInches(4.13, 5.83);

string htmlCode =
    "<div style=\"position: absolute; top: 270px; right: 100px;\">" +
    "I would like to put this here</div>";
using var htmlPdf = await converter.CreatePdfFromStringAsync(htmlCode, options);

using var pdf = new PdfDocument("pdf-to-merge-with.pdf");
var xObj = pdf.CreateXObject(htmlPdf.Pages[0]);

pdf.Pages[0].Canvas.DrawXObject(xObj, 0, 0);
pdf.Save("out.pdf");

È importante specificare una dimensione di pagina per la sovrapposizione. Di solito, la dimensione dovrebbe essere uguale alla dimensione della pagina che si desidera sovrapporre. Quindi, sarà necessario produrre il nuovo PDF con il contenuto della sovrapposizione. Si noti che lo sfondo è trasparente per impostazione predefinita. È possibile modificare lo sfondo eseguendo uno script prima della conversione se necessario.

È il momento di aprire il PDF esistente. Questo documento dovrebbe creare un XObject da una pagina nel PDF generato. Quindi il codice disegna l'XObject in cima alla pagina esistente.

Il progetto di prova completo con un PDF sorgente di esempio si trova nel repository degli esempi Docotic.Pdf.

Convertire SVG in PDF in C#

Utilizzare il convertitore da HTML a PDF per creare un PDF da immagini con grafica vettoriale scalabile. Il seguente codice mostra il modo più semplice per eseguire la conversione:

using var converter = await HtmlConverter.CreateAsync();
var uri = new Uri("https://bitmiracle.com/images/team.svg");
using var pdf = await converter.CreatePdfAsync(uri);
pdf.Save("out.pdf");

Il convertitore utilizza la larghezza e/o l'altezza specificate nell'immagine SVG per produrre un output di alta qualità delle dimensioni corrette.

Puoi produrre un output di dimensione diversa usando opzioni di personalizzazione. È possibile aggiungere l'immagine convertita a un altro PDF.

Dai un'occhiata al progetto di test completo su GitHub.