Преобразование HTML в PDF файл на Java

Обзор

Эта статья объясняет, как преобразовывать HTML в PDF с использованием Java. Код очень простой, просто загрузите HTML в класс Document и сохраните его как выходной PDF. Преобразование MHTML в PDF на Java также похоже. Она охватывает следующие темы

Java HTML to PDF Converter Library

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

Convert HTML to PDF

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

  1. Создайте экземпляр класса HtmlLoadOptions.
  2. Инициализируйте объект Document.
  3. Сохраните выходной PDF-документ, вызвав метод Document.save(String).
// Открыть исходный PDF-документ
Document document = new Document(DATA_DIR + "PDFToHTML.pdf")

// Создать экземпляр объекта HTML SaveOptions
HtmlSaveOptions htmlsaveOptions = new HtmlSaveOptions();

// Сохранить документ
document.save(DATA_DIR + "MultiPageHTML_out.html", htmlsaveOptions);

Расширенная конвертация из HTML в PDF

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

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

  1. Создайте HTML LoadOptions.
  2. Установите режим печати или экрана.
  3. Инициализируйте объект Document.
  4. Сохраните выходной PDF-документ.

Медиа-запросы - это популярная техника для предоставления адаптированного стиля для разных устройств. Мы можем установить тип устройства с помощью свойства HtmlMediaType.

// Создайте HTML LoadOptions
HtmlLoadOptions options = new HtmlLoadOptions();

// Установите режим печати или экрана
options.setHtmlMediaType(HtmlMediaType.Print);

// Инициализируйте объект документа
String htmlFileName = Paths.get(DATA_DIR.toString(), "test.html").toString();
Document document = new Document(htmlFileName, options);

// Сохраните выходной PDF-документ
document.save(Paths.get(DATA_DIR.toString(), "HTMLtoPDF.pdf").toString());
document.close();

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

  1. Добавьте новый Html LoadOptions.
  2. Включите/отключите встраивание шрифтов.
  3. Сохраните новый документ.

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

HtmlLoadOptions options = new HtmlLoadOptions();
// Включение/отключение встраивания шрифтов
options.setEmbedFonts(true);

Document document = new Document(DATA_DIR + "test_fonts.html", options);
document.save(DATA_DIR + "html_test.PDF");
document.close();

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

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

Класс HtmlLoadOptions имеет свойство CustomLoaderOfExternalResources, с помощью которого мы можем определить поведение загрузчика ресурсов.

HtmlLoadOptions options = new HtmlLoadOptions();

options.setCustomLoaderOfExternalResources(
        new LoadOptions.ResourceLoadingStrategy() {
            public LoadOptions.ResourceLoadingResult invoke(String resourceURI) {
                // Создание чистого шаблона ресурса для замены:
                LoadOptions.ResourceLoadingResult res = new LoadOptions.ResourceLoadingResult(new byte[] {});
                // Возвращаем пустой массив байт в случае сервера i.imgur.com
                if (resourceURI.contains("i.imgur.com")) {
                    return res;
                } else {
                    // Обработка ресурсов с помощью загрузчика ресурсов по умолчанию
                    res.setLoadingCancelled(true);
                    return res;
                }
            }   
});

Document document = new Document(DATA_DIR + "test.html", options);
document.save(DATA_DIR + "html_test.PDF");
document.close();    

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

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

Следующий фрагмент кода показывает, как конвертировать файлы MHTML в формат PDF с использованием Java:

// Создайте экземпляр MhtLoadOptions, чтобы указать параметры загрузки для
// MHTML файла.
MhtLoadOptions options = new MhtLoadOptions();

// Установите путь к MHTML файлу.
String mhtmlFileName = Paths.get(DATA_DIR.toString(), "samplefile.mhtml").toString();

// Загрузите MHTML файл в объект Document.
Document document = new Document(mhtmlFileName, options);

// Сохраните документ как PDF файл.
document.save(Paths.get(DATA_DIR.toString(), "MarkdowntoPDF.pdf").toString());

// Закройте документ.
document.close();