Конвертировать HTML в PDF файл и добавить нумерацию страниц на C# и .NET
Полный код
using System;
using System.IO;
using SautinSoft.PdfVision;
namespace Sample
{
class Program
{
static void Main(string[] args)
{
AddPageNumbering();
}
public static void AddPageNumbering()
{
// Let's convert HTML to PDF and add page numbering in header.
string inpFile = File.ReadAllText(@"..\..\..\example.html");
string outFile = new FileInfo("Result.pdf").FullName;
// Before starting, we recommend to get a free 100-day key:
// https://sautinsoft.com/start-for-free/
// Apply the key here:
// SautinSoft.PdfVision.SetLicense("...");
PdfVision v = new PdfVision();
HtmlToPdfOptions options = new HtmlToPdfOptions()
{
PageSetup = new PageSetup()
{
PaperType = PaperType.Letter,
Orientation = Orientation.Landscape,
PageMargins = new PageMargins()
{
Left = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
Top = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
Right = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
Bottom = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter)
}
},
PrintBackground = true,
Scale = 1,
//Set a custom directory where will be placed portable Chromium browser.
//Default value depends of platform (win-x64, win-86, linux-x64 or osx-x64).
ChromiumBaseDirectory = Path.GetFullPath(@"..\..\..\..\..\..\Chromium\")
};
// Let's set page numbering in the page header (we can do the same in footer):
// P.S. the property 'Footer' works only in licensed version.
// 1. We've to increase the page margin top to fit page numbering.
options.PageSetup.PageMargins.Top += LengthUnitConverter.ToPoint(20, LengthUnit.Millimeter);
// 2. Specify page numbering in header in HTML format.
// Add attributes class="pageNumber" and class="totalPages" to any HTML tag,
// after converting this tag will be replaced by the appropriate values.
string headerWithNumbering = "<div style=\"font-size: 18pt; font-family: Sans-serif;" +
"color: #0d6efd; margin: 0px auto;\">" +
"Page <span class=\"pageNumber\"></span> of " +
"<span class=\"totalPages\"></span><div>";
options.Header = headerWithNumbering;
// Footer: In case of adding the page footer, don't forget to increase the margin bottom.
// Like this:
//options.PageSetup.PageMargins.Bottom += LengthUnitConverter.ToPoint(20, LengthUnit.Millimeter);
try
{
// The whole conversion process will be done completely in memory.
v.ConvertHtmlToPdf(inpFile, outFile, options);
// Open the result for demonstration purposes.
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outFile) { UseShellExecute = true });
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
Console.ReadLine();
}
}
}
}
Imports System
Imports System.IO
Imports SautinSoft.PdfVision
Namespace Sample
Friend Class Program
Shared Sub Main(ByVal args() As String)
AddPageNumbering()
End Sub
Public Shared Sub AddPageNumbering()
' Let's convert HTML to PDF and add page numbering in header.
Dim inpFile As String = File.ReadAllText("..\..\..\example.html")
Dim outFile As String = (New FileInfo("Result.pdf")).FullName
' Before starting, we recommend to get a free 100-day key:
' https://sautinsoft.com/start-for-free/
' Apply the key here:
' SautinSoft.PdfVision.SetLicense("...");
Dim v As New PdfVision()
Dim options As New HtmlToPdfOptions() With {
.PageSetup = New PageSetup() With {
.PaperType = PaperType.Letter,
.Orientation = Orientation.Landscape,
.PageMargins = New PageMargins() With {
.Left = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
.Top = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
.Right = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter),
.Bottom = LengthUnitConverter.ToPoint(5, LengthUnit.Millimeter)
}
},
.PrintBackground = True,
.Scale = 1D,
.ChromiumBaseDirectory = Path.GetFullPath("..\..\..\..\..\..\Chromium\")
}
' Let's set page numbering in the page header (we can do the same in footer):
' P.S. the property 'Footer' works only in licensed version.
' 1. We've to increase the page margin top to fit page numbering.
options.PageSetup.PageMargins.Top += LengthUnitConverter.ToPoint(20, LengthUnit.Millimeter)
' 2. Specify page numbering in header in HTML format.
' Add attributes class="pageNumber" and class="totalPages" to any HTML tag,
' after converting this tag will be replaced by the appropriate values.
Dim headerWithNumbering As String = "<div style=""font-size: 18pt; font-family: Sans-serif;" & "color: #0d6efd; margin: 0px auto;"">" & "Page <span class=""pageNumber""></span> of " & "<span class=""totalPages""></span><div>"
options.Header = headerWithNumbering
' Footer: In case of adding the page footer, don't forget to increase the margin bottom.
' Like this:
'options.PageSetup.PageMargins.Bottom += LengthUnitConverter.ToPoint(20, LengthUnit.Millimeter)
Try
' The whole conversion process will be done completely in memory.
v.ConvertHtmlToPdf(inpFile, outFile, options)
' Open the result for demonstration purposes.
System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(outFile) With {.UseShellExecute = True})
Catch ex As Exception
Console.WriteLine($"Error: {ex.Message}")
Console.ReadLine()
End Try
End Sub
End Class
End Namespace
Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу support@sautinsoft.com или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже: