Конвертация HTML в PDF в .NET

Обзор

Эта статья объясняет, как конвертировать HTML в PDF с помощью C#. Она охватывает следующие темы.

Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.

Формат: HTML

Формат: MHTML

Формат: WebPage

Конвертация HTML в PDF на C#

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

Aspose.PDF для .NET - это API для работы с PDF, которое позволяет без проблем преобразовывать существующие HTML-документы в PDF. Процесс преобразования HTML в PDF может быть гибко настроен.

Конвертировать HTML в PDF

Следующий пример кода на C# показывает, как преобразовать HTML-документ в PDF.

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

  1. Создайте экземпляр класса HtmlLoadOptions.
  2. Инициализируйте объект Document.
  3. Сохраните выходной документ PDF, вызвав метод Document.Save().
public static void ConvertHTMLtoPDF()
{
    HtmlLoadOptions options= new HtmlLoadOptions();
    Document pdfDocument= new Document(_dataDir + "test.html", options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

Преобразование Aspose.PDF HTML в PDF с помощью бесплатного приложения

Расширенное преобразование из HTML в PDF

Движок преобразования HTML имеет несколько опций, позволяющих нам контролировать процесс конвертации.

Поддержка медиа запросов

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

public static void ConvertHTMLtoPDFAdvanced_MediaType()
{
    HtmlLoadOptions options = new HtmlLoadOptions
    {
        // установите режим Печать или Экран
        HtmlMediaType = HtmlMediaType.Print
    };
    Document pdfDocument= new Document(_dataDir + "test.html", options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

Включение (отключение) встраивания шрифтов

HTML-страницы часто используют шрифты (например, шрифты из локальной папки, Google Fonts и т.д.). Мы также можем контролировать встраивание шрифтов в документ с помощью свойства IsEmbedFonts.

public static void ConvertHTMLtoPDFAdvanced_EmbedFonts()
{
    // Отключение встраивания шрифтов
    HtmlLoadOptions options = new HtmlLoadOptions {IsEmbedFonts = false};
    Document pdfDocument= new Document(_dataDir + "test_fonts.html", options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

Управление загрузкой внешних ресурсов

Механизм преобразования предоставляет механизм, который позволяет вам контролировать загрузку определенных ресурсов, связанных с HTML-документом. Класс HtmlLoadOptions имеет свойство CustomLoaderOfExternalResources, с помощью которого мы можем определить поведение загрузчика ресурсов. Класс HtmlLoadOptions имеет свойство CustomLoaderOfExternalResources, с помощью которого мы можем определить поведение загрузчика ресурсов. Предположим, что нам нужно заменить все изображения PNG на одно изображение test.jpg и заменить внешний URL на внутренний для других ресурсов. Для этого мы можем определить пользовательский загрузчик SamePictureLoader и указать CustomLoaderOfExternalResources на это имя.

public static void ConvertHTMLtoPDFAdvanced_DummyImage()
{
    HtmlLoadOptions options = new HtmlLoadOptions
    {
        CustomLoaderOfExternalResources = SamePictureLoader
    };
    Document pdfDocument = new Document(_dataDir + "test.html", options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

private static LoadOptions.ResourceLoadingResult SamePictureLoader(string resourceURI)
{
    LoadOptions.ResourceLoadingResult result;

    if (resourceURI.EndsWith(".png"))
    {
        byte[] resultBytes = File.ReadAllBytes(_dataDir + "test.jpg");
        result = new LoadOptions.ResourceLoadingResult(resultBytes)
        {
            // Установить MIME тип
            MIMETypeIfKnown = "image/jpeg"
        };
    }
    else
    {
        result = new LoadOptions.ResourceLoadingResult(GetContentFromUrl(resourceURI));
    }
    return result;
}

private static byte[] GetContentFromUrl(string url)
{
    var httpClient = new HttpClient();
    return httpClient.GetByteArrayAsync(url).GetAwaiter().GetResult();
}

Конвертация веб-страницы в PDF

Конвертация веб-страницы немного отличается от конвертации локального HTML-документа. Для преобразования содержимого веб-страницы в формат PDF сначала можно получить содержимое HTML-страницы с использованием экземпляра HttpClient, создать объект Stream, передать содержимое в объект Document и отобразить результат в формате PDF.

При конвертации веб-страницы, размещенной на веб-сервере, в PDF:

Шаги: Конвертация веб-страницы в PDF на C#

  1. Прочитайте содержимое страницы с помощью объекта HttpClient.
  2. Создайте объект HtmlLoadOptions и установите базовый URL.
  3. Инициализируйте объект Document, передав объект Stream.
  4. При необходимости установите размер страницы и/или ориентацию.
public static void ConvertHTMLtoPDFAdvanced_WebPage()
{
    const string url = "https://en.wikipedia.org/wiki/Aspose_API";
    // Установите размер страницы A3 и ориентацию Landscape;   
    HtmlLoadOptions options = new HtmlLoadOptions(url)
    {
        PageInfo = {Width = 842, Height = 1191, IsLandscape = true}
    };
    Document pdfDocument= new Document(GetContentFromUrlAsStream(url), options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

private static Stream GetContentFromUrlAsStream(string url, ICredentials credentials = null)
{
    using (var handler = new HttpClientHandler { Credentials = credentials })
    using (var httpClient = new HttpClient(handler))
    {
        return httpClient.GetStreamAsync(url).GetAwaiter().GetResult();
    }
}

Предоставление учетных данных для конвертации веб-страницы в PDF

Иногда нам нужно выполнить конвертацию HTML-файлов, которые требуют аутентификации и привилегий доступа, чтобы только аутентифицированные пользователи могли получить содержимое страницы. Это также включает сценарий, когда некоторые ресурсы/данные, на которые ссылается HTML, загружаются с некоторого внешнего сервера, который требует аутентификации и для удовлетворения этой потребности, свойство ExternalResourcesCredentials добавлено в класс HtmlLoadOptions. Следующий пример кода показывает шаги по передаче учетных данных для запроса HTML и его соответствующих ресурсов при конвертации HTML-файла в PDF.

public static void ConvertHTMLtoPDFAdvanced_Authorized()
{
    const string url = "http://httpbin.org/basic-auth/user1/password1";
    var credentials = new NetworkCredential("user1", "password1");
    HtmlLoadOptions options = new HtmlLoadOptions(url)
    {
        ExternalResourcesCredentials = credentials
    };
    Document pdfDocument= new Document(GetContentFromUrlAsStream(url, credentials), options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

private static Stream GetContentFromUrlAsStream(string url, ICredentials credentials = null)
{
    using (var handler = new HttpClientHandler { Credentials = credentials })
    using (var httpClient = new HttpClient(handler))
    {
        return httpClient.GetStreamAsync(url).GetAwaiter().GetResult();
    }
}

Отрисовка всего HTML-содержимого на одной странице

Aspose.PDF для .NET позволяет отрисовывать все содержимое на одной странице при конвертации HTML-файла в формат PDF. Например, если у вас есть HTML-содержимое, размер которого превышает одну страницу, вы можете использовать опцию для вывода данных в одну страницу PDF. Для использования этой опции класс HtmlLoadOptions был расширен флагом IsRenderToSinglePage. Приведенный ниже фрагмент кода показывает, как использовать эту функциональность.

// Для полных примеров и файлов данных, пожалуйста, перейдите на https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Путь к директории документов.
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();
// Инициализация опций HTMLLoadSave
HtmlLoadOptions options = new HtmlLoadOptions();
// Установка свойства отрисовки на одну страницу
options.IsRenderToSinglePage = true;
// Загрузка документа
Document pdfDocument= new Document(dataDir + "HTMLToPDF.html", options);
// Сохранение
pdfDocument.Save(dataDir + "RenderContentToSamePage.pdf");

Отрисовка HTML с данными SVG

Отрисовка HTML с данными SVG

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

// Для полных примеров и файлов данных, пожалуйста, перейдите по ссылке https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Путь к директории документов.
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();
// Установить путь к входному файлу
string inFile = dataDir + "HTMLSVG.html";
// Установить путь к выходному файлу
string outFile = dataDir + "RenderHTMLwithSVGData.pdf";
// Инициализировать HtmlLoadOptions
HtmlLoadOptions options = new HtmlLoadOptions(Path.GetDirectoryName(inFile));
// Инициализировать объект Document
Document pdfDocument = new Document(inFile, options);
// сохранить
pdfDocument.Save(outFile);

Конвертация MHTML в PDF

MHTML, сокращенно от MIME HTML, это формат архива веб-страниц, используемый для объединения ресурсов, которые обычно представлены внешними ссылками (такими как изображения, анимации Flash, апплеты Java и аудиофайлы) с HTML-кодом в один файл. MHTML, сокращение от MIME HTML, это формат архивации веб-страниц, используемый для объединения ресурсов, которые обычно представлены внешними ссылками (такими как изображения, анимации Flash, Java апплеты и аудиофайлы) с HTML кодом в один файл.

Шаги: Конвертация MHTML в PDF на C#

  1. Создайте экземпляр класса MhtLoadOptions.
  2. Инициализируйте объект Document.
  3. Сохраните выходной PDF документ, вызвав метод Document.Save().
public static void ConvertMHTtoPDF()
{
    MhtLoadOptions options = new MhtLoadOptions()
    {
        PageInfo = { Width = 842, Height = 1191, IsLandscape = true}
    };
    Document pdfDocument = new Document(_dataDir + "fileformatinfo.mht", options);
    pdfDocument.Save(_dataDir + "mhtml_test.PDF");
}

См. также

Эта статья также охватывает эти темы. Эта статья также охватывает следующие темы.

Формат: HTML

Формат: MHTML

Формат: WebPage