Knowledgebase (2330)
Children categories
Spire.PDF for .NET is a professional PDF API applied to creating, writing, editing, handling and reading PDF files without any external dependencies within .NET (C#, VB.NET, ASP.NET, .NET Core, .NET 5.0, .NET 6.0, .NET 7.0, MonoAndroid and Xamarin.iOS) application. Using this .NET PDF library, you can implement rich capabilities to create PDF files from scratch or process existing PDF documents entirely through C#/VB.NET without installing Adobe Acrobat.
Many rich features can be supported by the .NET PDF API, such as adding digital signature, including timestamp in signature, adding dynamic/image stamp, adding text/image watermark, creating PDF Portfolio, extracting text/attachment/images, PDF merging/spliting, metadata updating, section, graph/image drawing and inserting, table creation and processing, cropping pages, copying pages, and importing data etc.

Converting HTML to PDF is a common task for developers who need to generate printable documents or preserve web content offline. With Spire.PDF for .NET, developers can achieve this conversion through multiple approaches that suit different environments. Whether you prefer using the built-in HTML-to-PDF capabilities with the QT plugin, or you want more control through ChromeHtmlConverter, Spire.PDF provides flexible solutions. This tutorial covers several ways to convert HTML to PDF using C# in .NET applications.
| Method | Best For | Features |
|---|---|---|
| 1. Convert HTML/URL to PDF With QT Plugin | Developers who seek quick setup with minimal customization | Login session support; Shorter code with faster conversion process |
| 2. ChromeHtmlConverter with Output Logs | Developers who need high-fidelity output and diagnostics | Pixel-perfect rendering; Executes JS and dynamic content; Logs useful for debugging |
Convert HTML/URL to PDF with QT Plugin
Before guiding you to the specific code sample of how to convert HTML files to PDF format, let me introduce Spire.PDF for .NET to you. It is a powerful C# library designed for creating, editing, and converting PDF documents. Except for HTML to PDF conversion, you can also use it to add digital signatures, create PDF Portfolios, extract elements like texts and images, and PDF file merging and splitting.
More reasons to help you choose Spire.PDF for .NET:
- Compress PDF files from 10 – 100 times to reduce file size
- Widely compatibility of C# environments
- Add encryption to PDF files to protect your file privacy
- More features waiting for you to explore...
To run the conversion process smoothly, you should use the C# API with QT plugin. In the following content, you will learn the step-by-step tutorial.
Step 1. Download Spire.PDF for .NET code library from the official download page to add it in your C# program.
Tip: To unlock all powerful functions of Spire.PDF, please request a 30-day trial license for yourself.
Step 2. Download the plugin on your computer. You can click the following link according to your own computer system.
Step 3. After downloading, unzip package somewhere on your disk to get the "plugins" folder like the pic shows below.

We recommend that you set the "Platform target" of your project to x64 or x86 accordingly.

Step 4. After adding the plugin, you just need to copy the following code sample to manage the conversion process.
If you have the original HTML file, copy the following code to your C# program:
using System.IO;
using Spire.Additions.Qt;
using System.Drawing;
using Spire.Pdf.Graphics;
namespace ConvertHtmlStringToPdfWithPlugin
{
class Program
{
static void Main(string[] args)
{
//Get the HTML string from a .html file
string htmlString = File.ReadAllText(@"C:\Users\Administrator\Desktop\Document\Html\Sample.html");
//Specify the output file path
string fileName = "HtmlStringToPdf.pdf";
//Specify the plugin path
string pluginPath = "F:\\Libraries\\Plugin\\plugins-windows-x64\\plugins";
//Set plugin path
HtmlConverter.PluginPath = pluginPath;
//Convert HTML string to PDF
HtmlConverter.Convert(htmlString, fileName, true, 100000, new Size(1080, 1000), new PdfMargins(0), LoadHtmlType.SourceCode);
}
}
}
If you only get the URL, the code sample below is what you need:
using Spire.Pdf.Graphics;
using Spire.Additions.Qt;
using System.Drawing;
namespace ConvertUrlToPdf
{
class Program
{
static void Main(string[] args)
{
//Specify the URL path
string url = "https://www.wikipedia.org/";
//Specify the output file path
string fileName = "UrlToPdf.pdf";
//Specify the plugin path
string pluginPath = "F:\\Libraries\\Plugin\\plugins-windows-x64\\plugins";
//Set the plugin path
HtmlConverter.PluginPath = pluginPath;
//Convert URL to PDF
HtmlConverter.Convert(url, fileName, true, 100000, new Size(1080, 1000), new PdfMargins(0));
}
}
}
RESULT:

Convert HTML to PDF using ChromeHtmlConverter with Output Logs
Unlike standard conversion methods that rely solely on engine defaults or basic libraries, ChromeHtmlConverter leverages the power of a headless Chrome browser to render HTML content exactly as it appears in a real browser environment. It provides output logs, which are essential for diagnosing rendering issues, monitoring conversion performance, or maintaining compliance in production environments.
Let's now look at the specific code to use Spire.PDF for .NET and ChromeHtmlConverter to manage this conversion:
using Spire.Additions.Chrome;
namespace ConvertHtmlToPdfUsingChrome
{
internal class Program
{
static void Main(string[] args)
{
//Specify the input URL and output PDF file path
string inputUrl = @"https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/C-/VB.NET-Convert-Image-to-PDF.html";
string outputFile = @"HtmlToPDF.pdf";
// Specify the log file path
string logFilePath = @"Logs.txt";
//Specify the path to the Chrome plugin
string chromeLocation = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
//Create an instance of the ChromeHtmlConverter class
ChromeHtmlConverter converter = new ChromeHtmlConverter(chromeLocation);
//Enable logging
converter.Logger = new Logger(logFilePath);
//Create an instance of the ConvertOptions class
ConvertOptions options = new ConvertOptions();
//Set conversion timeout
options.Timeout = 10 * 3000;
//Set paper size and page margins of the converted PDF
options.PageSettings = new PageSettings()
{
PaperWidth = 8.27,
PaperHeight = 11.69,
MarginTop = 0,
MarginLeft = 0,
MarginRight = 0,
MarginBottom = 0
};
//Convert the URL to PDF
converter.ConvertToPdf(inputUrl, outputFile, options);
}
}
}
The output log looks like below:

Read more details with the following post:
Convert HTML to PDF using ChromeHtmlConverter
Conclusion:
Spire.PDF for .NET offers a range of tools to convert HTML/URL to PDF in C#, whether you're dealing with local HTML files or remote web pages. Depending on your project requirements—such as rendering complexity, output quality, or dependency preferences, you can select the most suitable method.
Mail Merge is a powerful feature in Microsoft Word that allows you to create multiple documents such as letters, labels, envelopes, and even e-mails from a single template document and a data source. It's particularly useful for tasks like sending personalized correspondence to a large number of recipients without having to write each letter individually.
In this article, you will learn how to perform a mail merge in a Word document using Spire.Doc for .NET.
- Understanding the Components of Mail Merge
- Create a Template Word Document
- Simple Mail Merge in a Word Document
- Mail Merge with a Region
- Mail Merge with Nested Regions
Install Spire.Doc for .NET
To begin with, you need to add the DLL files included in the Spire.Doc for .NET package as references in your .NET project. The DLL files can be either downloaded from this link or installed via NuGet.
PM> Install-Package Spire.Doc
Understanding the Components of Mail Merge
- Main Document: This is the template file where you design your letter, label, or other types of documents with placeholders (also known as merge fields) that will be filled in by data from the data source.
- Data Source: This is the spreadsheet or database containing the information you want to use to populate your main document. It can be an Excel sheet, Access database, CSV file, XML file or even a simple text file.
- Merge Fields: These are placeholders in the main document that will be replaced with data from the corresponding record in the data source.
Create a Template Word Document
To generate a template Word document with merge fields, it’s recommended that you use Word editors such as Microsoft Word. The visual interface of the Word editor allows you to design a unique layout, formatting, and other elements interactively for your template.
The following screenshot shows the addition of merge fields to a Word document using MS Word. Remember to use the "Image:FieldName" format if you want to merge an image into a merge field.

If you wish to create a template Word document using C# code, you can follow these steps.
- Create a Document object.
- Add a section.
- Add a paragraph to the section.
- Add merge fields to the paragraph using Paragraph.AppendField() method.
- Save the document to a Word file.
- C#
using Spire.Doc;
using Spire.Doc.Documents;
namespace CreateTemplate
{
class Program
{
static void Main(string[] args)
{
// Create a Document object
Document document = new Document();
// Add a section
Section section = document.AddSection();
// Add a paragraph
Paragraph paragraph = section.AddParagraph();
// Add text and mail merge fields to the paragraph
paragraph.AppendText("Full Name: ");
paragraph.AppendField("Name", FieldType.FieldMergeField);
paragraph.AppendBreak(BreakType.LineBreak);
paragraph.AppendText("Email Address: ");
paragraph.AppendField("Email", FieldType.FieldMergeField);
paragraph.AppendBreak(BreakType.LineBreak);
paragraph.AppendText("Avatar: ");
paragraph.AppendField("Image:Avatar", FieldType.FieldMergeField);
// Save the document
document.SaveToFile("Template.docx", FileFormat.Docx2019);
// Dispose resources
document.Dispose();
}
}
}
Simple Mail Merge in a Word Document
Spire.Doc offers the MailMerge.Execute() method to perform the specified mail merge operation in a Word document. This method has 6 overloads allowing users to perform a mail merge from different data sources, such as DataTable, DataView, and string arrays.
The steps to perform a mail merge using data provided in arrays are as follows.
- Create a Document object.
- Load a template Word document from a specified file path.
- Define an array to hold the field names.
- Define an array to hold the values that will be used to fill the fields
- Mail merge data into the fields using MailMerge.Execute() method.
- Save the document to a different Word file.
- C#
using Spire.Doc;
using Spire.Doc.Reporting;
using System.Drawing;
namespace MailMergeInDocument
{
class Program
{
static void Main(string[] args)
{
// Create a Document object
Document document = new Document();
// Load the template Word document
document.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Template.docx");
// Specify field names
String[] fieldNames = {
"Name",
"Email",
"Avatar"
};
// Specify values that'll be used to fill the fields
String[] fieldValues = {
"John Smith",
"john.smith@e-iceblue.com",
"C:\\Users\\Administrator\\Desktop\\avatar.png"
};
// Register an event which occurs when merging the image filed
document.MailMerge.MergeImageField += new MergeImageFieldEventHandler(MailMerge_MergeImageField);
// Mail merge data to the document
document.MailMerge.Execute(fieldNames, fieldValues);
// Save the document
document.SaveToFile("MailMerge.docx", FileFormat.Docx2019);
// Dispose resources
document.Dispose();
}
// Fill an image field with a picture
private static void MailMerge_MergeImageField(object sender, MergeImageFieldEventArgs field)
{
string filePath = field.FieldValue as string;
if (!string.IsNullOrEmpty(filePath))
{
field.Image = Image.FromFile(filePath);
}
}
}
}

Mail Merge with a Region
A region refers to a specific area within a document where you want to insert data from your data source. Mail Merge will repeat that region for each record in the data source. Spire.Doc offers the MailMerge.ExecuteWidthRegion() method to execute mail merge with a region.
The steps to perform a mail merge with a region using the data provided by a DataTable are as follows.
- Create a Document object.
- Load a template Word document from a specified file path.
- Create a DataTable object, which will be used as the data source.
- Execute mail merge with the region using MailMerge.ExecuteWidthRegion() method.
- Save the document to a different Word file.
- C#
using Spire.Doc;
using System.Data;
namespace MailMergeWithGroup
{
class Program
{
static void Main(string[] args)
{
// Create a Document object
Document document = new Document();
// Load a template Word document
document.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Template.docx");
// Create a datatable, specifying table name
DataTable table = new DataTable("Employee");
// Add sample data to table
table.Columns.Add("Name");
table.Columns.Add("Address");
table.Columns.Add("City");
table.Rows.Add("John Doe", "123 Main St", "New York");
table.Rows.Add("Jane Smith", "456 Elm St", "Los Angeles");
table.Rows.Add("Bob Johnson", "789 Oak St", "Chicago");
// Mail merge within the region
document.MailMerge.ExecuteWidthRegion(table);
// Save the document
document.SaveToFile("MailMergeWithRegion.docx", FileFormat.Docx2019);
// Dispose resources
document.Dispose();
}
}
}

Mail Merge with Nested Regions
Mail merge for nested groups works by replacing merge fields within nested regions with data that is organized in a hierarchical structure. Nested regions allow you to create more complex layouts where the content of one region depends on the data in another region.
The steps to perform a mail merge with nested regions using the data from an XML file are as follows.
- Create a Document object.
- Load a template Word document from a specified file path.
- Read data from an XML file to a DataSet object.
- Create a List<DictionaryEntry> object to store the merge field information.
- Create DicitionaryEntry objects and add them to the list, which specify the merge field names and associated expressions.
- Execute mail merge with the nested regions using MailMerge.ExecuteWidthNestedRegion() method.
- Save the document to a different Word file.
- C#
using Spire.Doc;
using System.Collections;
using System.Data;
namespace MailMergeWithNestedRegions
{
class Program
{
static void Main(string[] args)
{
// Create a Document object
Document document = new Document();
// Load a template Word document
document.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Template.docx");
// Read data from an XML file to a DataSet object
DataSet dataSet = new DataSet();
dataSet.ReadXml("C:\\Users\\Administrator\\Desktop\\Orders.xml");
// Create a List object to store the merge field information
List list = new List();
// Create two DicitionaryEntry objects and add them to the list (each object specifies the merge field name and associated expression)
DictionaryEntry dictionaryEntry = new DictionaryEntry("Customer", string.Empty);
list.Add(dictionaryEntry);
dictionaryEntry = new DictionaryEntry("Order", "Customer_Id = %Customer.Customer_Id%");
list.Add(dictionaryEntry);
// Perform the mail merge operation with the nested region
document.MailMerge.ExecuteWidthNestedRegion(dataSet, list);
// Save to file
document.SaveToFile("MailMergeWithNestedRegions.docx", FileFormat.Docx2019);
// Dispose resources
document.Dispose();
}
}
}

Apply for a Temporary License
If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.


