Эта страница может содержать автоматически переведенный текст.

Функции для HTML в PDF

Вы можете конвертировать HTML в PDF с помощью библиотеки Docotic.Pdf. Ознакомьтесь с ресурсами, упомянутыми на этой странице, чтобы узнать, как создавать прекрасные PDF-файлы из ваших данных.

Процесс преобразования HTML в PDF

Для преобразования HTML в PDF вам понадобится надстройка HTML в PDF. Это бесплатное дополнение к библиотеке Docotic.Pdf. Дополнение также доступно в zip-файле с бинарными файлами библиотеки.

Библиотека Docotic.Pdf 9.5.17573-dev Дополнение HTML в PDF 9.5.17573-dev
Регрессионные тесты 14,726 прошло Всего загрузок NuGet 4,765,230

Справочник по API

На нашем сайте мы предоставляем описание API для надстройки HTML в PDF.

Статьи

Прочтите следующее, чтобы узнать больше о преобразовании HTML в PDF в коде C# и VB.NET.

Примеры кода

Конвертация HTML в PDF — это термин, который может описать множество связанных задач. В следующих разделах эти задачи описываются более подробно.

Преобразование HTML в PDF на C#

Вам нужно начать с установки дополнения. Используйте Package Manager для установки дополнения HTML to PDF из NuGet.

Install-Package BitMiracle.Docotic.Pdf.HtmlToPdf

Дополнение предоставляет только асинхронное API. Мы разработали его для работы с асинхронными обработчиками событий и асинхронными методами. Вы можете использовать дополнение в Windows Forms, WPF, ASP.NET и консольных приложениях.

Код C# HTML в PDF выглядит следующим образом:

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");

Код создает экземпляр конвертера HTML в PDF. Затем код использует экземпляр для создания PDF из HTML. Вы можете продолжить работу с PDF-документом, но пример кода просто сохраняет документ.

Если ваше консольное приложение использует старую версию C# и у вас нет асинхронного Main - не волнуйтесь. Вы все равно можете использовать надстройку в своем приложении.

Следующий код показывает, как преобразовать URL в PDF обычным синхронным методом:

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();

Приложения VB.NET используют похожий код. Вот фрагмент, который показывает, как преобразовать HTML в PDF в 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()

Загрузите полные тестовые проекты из нашего репозитория GitHub:

Преобразование HTML-строки в PDF на C#

Одной из распространенных задач является генерация PDF из HTML в приложении C# или VB.NET. Процесс может начинаться с шаблона, который приложение заполняет данными из базы данных. Нередко пользователь веб-сайта создает шаблон, данные или и то, и другое.

Автоматически сгенерированный или загруженный HTML может иметь форму файла или строки с кодом. Дополнение предоставляет метод который принимает путь к файлу. Используйте этот метод для преобразования файла HTML в PDF в коде C#. Следующий код предназначен для случая, когда у вас есть строка.

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");

HTML может содержать относительные ссылки на изображения, скрипты и файлы CSS. Чтобы правильно преобразовать такой код, вам нужно будет использовать параметры преобразования. Вот как указать базовый URL с помощью параметров:

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");

В нашем репозитории GitHub содержится полный тестовый проект.

Выполнить JavaScript перед конвертацией

API надстройки предоставляет способ запустить код JS перед конвертацией. Код может динамически генерировать или изменять содержимое HTML. Например, он может переключать элементы или запускать динамическую загрузку содержимого.

Следующий код показывает, как отложить преобразование HTML в PDF до завершения работы 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");

В приведенном выше фрагменте используется очень простой код, просто чтобы проиллюстрировать подход. Для более реального примера ознакомьтесь с соответствующим образцом приложения в нашем репозитории GitHub. Приложение показывает, как работать со страницей, которая динамически загружает свое содержимое. Код JavaScript в приложении прокручивает страницу до тех пор, пока не останется нового содержимого. После этого происходит преобразование в PDF.

Игнорировать ошибки SSL

При отправке защищенных запросов на загрузку HTML надстройка проверяет, является ли SSL-сертификат, удостоверяющий личность веб-сайта и обеспечивающий зашифрованное соединение, действительным и надежным.

По умолчанию надстройка выдаст исключение, если конвертер HTML в PDF по какой-либо причине не доверяет сертификату. Если вы понимаете риск принятия ненадежного сертификата, вы можете указать надстройке обходить проверки.

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");

Для полного кода перейдите в репозиторий примеров Docotic.Pdf.

Указать пароль для защищенных страниц

Для доступа к некоторым веб-страницам требуется аутентификация. Когда вы получаете доступ к защищенному URL, требующему HTTP-аутентификации, браузер просит вас указать имя пользователя и пароль.

Используя параметры преобразования, вы можете поручить API предоставлять учетные данные для веб-страниц, требующих входа в систему.

Этот код C# показывает, как преобразовать защищенный паролем HTML в 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");

Вы найдете полный рабочий пример в репозитории примеров.

Подождать перед конвертацией

Отсрочка преобразования HTML в PDF может быть полезна, если страница продолжает обновляться некоторое время после загрузки. Это часто случается при работе с динамическим контентом, сгенерированным вызовами JavaScript или AJAX.

Тест Acid 3 — прекрасный пример страницы, которая выиграла бы от задержки перед преобразованием. Тест выполняет ряд проверок для оценки способности браузера правильно отображать сложные веб-страницы. Эти проверки занимают время. Попробуйте изменить время ожидания в следующем коде, чтобы увидеть, как это влияет на результаты преобразования.

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");

Приведенный выше код показывает, как преобразовать HTML в PDF с задержкой. Хотя дополнительное время помогает получить лучшие результаты, обратите внимание, что добавление задержек может повлиять на производительность. Недостаточные задержки могут негативно повлиять на качество преобразования. Альтернативный для использования задержки подход — использование скрипта, который будет выполняться до тех пор, пока страница не будет готова.

Вы можете получить полный тестовый проект в репозитории примеров Docotic.Pdf.

API HTML to PDF может добавлять повторяющиеся блоки нижнего колонтитула / верхнего колонтитула на сгенерированных страницах. Конвертер создает блоки из шаблонов HTML, указанных в параметрах конвертации. Мы рекомендуем использовать встроенные стили и URI данных для изображений внутри шаблонов.

Конвертер размещает верхние и нижние колонтитулы внутри полей страницы. Учитывая, что поля страницы небольшие, содержимое верхнего и нижнего колонтитулов может быть не видно. Мы рекомендуем явно указывать верхние и нижние поля. Размер должен совпадать с размером верхнего и нижнего колонтитулов соответственно.

Посмотрите, как преобразовать HTML в PDF и добавить верхний и нижний колонтитулы.

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");

Конвертер может вставлять значения, такие как дата конвертации и заголовок документа, в предопределенные места внутри шаблонов. Ознакомьтесь с описанием свойств HeaderTemplate и FooterTemplate для получения дополнительной информации.

Полный тестовый проект и код шаблонов находится в репозитории примеров Docotic.Pdf.

Масштабирование контента

При работе с веб-страницами с широкими макетами вы можете либо увеличить размер выходного PDF-файла, либо уменьшить масштаб содержимого, чтобы оно вписалось в страницу PDF. Чтобы лучше расположить масштабированное содержимое, вы также можете настроить поля.

Хорошо масштабированный PDF обеспечивает лучший опыт чтения, поскольку его читателям не нужно увеличивать или уменьшать масштаб, чтобы правильно просмотреть содержимое. Если HTML-документ трудно читать из-за маленького размера шрифта, вы можете увеличить масштаб содержимого.

По умолчанию API создает PDF-файлы с размером страницы, равным A4. Поля и увеличение отсутствуют. Используя параметры конвертации, вы можете изменить эти настройки.

Узнайте, как настроить коэффициент масштабирования и поля при создании PDF из 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");

Репозиторий примеров Docotic.Pdf содержит полный проект.

Наложение HTML на существующий PDF-файл

Бывают случаи, когда вы хотите использовать существующий PDF в качестве фона для результата конвертации. Это возможно с Docotic.Pdf и дополнением.

Этот метод включает создание нового PDF из HTML (контента наложения) и его последующее слияние с существующим PDF. Окончательный документ будет включать как исходное содержимое, так и новый оверлей. Вот код, иллюстрирующий метод.

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");

Важно указать размер страницы для наложения. Обычно размер должен быть равен размеру страницы, на которую вы хотите наложить. Затем вам нужно будет создать новый PDF с содержимым наложения. Обратите внимание, что фон по умолчанию прозрачный. Вы можете изменить фон, запустив скрипт перед конвертацией, если это необходимо.

Пришло время открыть существующий PDF. Этот документ должен создать XObject из страницы в сгенерированном PDF. Затем код рисует XObject поверх существующей страницы.

Полный тестовый проект с примером исходного PDF-файла находится в репозитории примеров Docotic.Pdf.

Конвертировать SVG в PDF на C#

Используйте конвертер HTML в PDF для создания PDF из изображений с масштабируемой векторной графикой. Следующий код показывает простейший способ выполнения преобразования:

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");

Конвертер использует ширину и/или высоту, указанные в изображении SVG, для создания высококачественного выходного файла правильного размера.

Вы можете создать вывод другого размера, используя параметры настройки. Возможно добавить преобразованное изображение в другой PDF.

Ознакомьтесь с полным тестовым проектом на GitHub.