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

Обзор

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

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

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

Aspose.PDF for .NET предоставляет множество функций для конвертации различных форматов файлов в PDF документы и конвертации PDF файлов в различные форматы вывода. Эта статья обсуждает, как конвертировать PDF файл в HTML. Aspose.PDF for .NET предоставляет возможность конвертировать HTML файлы в PDF формат с использованием подхода InLineHtml. Мы получили много запросов на функциональность, которая конвертирует PDF файл в HTML формат и предоставили эту функцию. Обратите внимание, что эта функция также поддерживает XHTML 1.0.

Aspose.PDF for .NET поддерживает функции для конвертации PDF файла в HTML. Основные задачи, которые вы можете выполнить с библиотекой Aspose.PDF, перечислены:

  • Конвертация PDF в HTML.
  • Разделение вывода на многопользовательский HTML.
  • Указание папки для хранения SVG файлов.
  • Сжатие SVG изображений во время конвертации.
  • Сохранение изображений в качестве фона PNG.
  • Указание папки для изображений.
  • Создание последующих файлов только с содержимым тела.
  • Прозрачный рендеринг текста.
  • Рендеринг слоев PDF документа.

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

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

  1. Создайте экземпляр объекта Document с исходным PDF документом.
  2. Сохраните его в формате SaveFormat.Html, вызвав метод Document.Save().
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertPDFtoHTML()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFToHTML.pdf"))
    {
        // Save the output HTML
        document.Save(dataDir + "output_out.html", Aspose.Pdf.SaveFormat.Html);
    }
}

Разделение вывода на многопользовательский HTML

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

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertPDFtoMultiPageHTML()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFToHTML.pdf"))
    {
        // Instantiate HTML SaveOptions object
        var htmlOptions = new Aspose.Pdf.HtmlSaveOptions
        {
            // Specify to split the output into multiple pages
            SplitIntoPages = true
        };

        // Save the output HTML
        document.Save(dataDir + "MultiPageHTML_out.html", htmlOptions);
    }
}

Указание папки для хранения SVG файлов

Во время конвертации PDF в HTML возможно указать папку, в которую должны сохраняться SVG изображения. Используйте класс HtmlSaveOption SpecialFolderForSvgImages property, чтобы указать специальный каталог для SVG изображений. Это свойство получает или устанавливает путь к каталогу, в который SVG изображения должны быть сохранены при встрече во время конвертации. Если параметр пустой или равен null, то любые SVG файлы сохраняются вместе с другими изображениями.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void SavePDFtoHTMLWithSVG()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFToHTML.pdf"))
    {
        // Instantiate HTML save options object
        var newOptions = new Aspose.Pdf.HtmlSaveOptions
        {
            // Specify the folder where SVG images are saved during PDF to HTML conversion
            SpecialFolderForSvgImages = dataDir
        };

        // Save the output HTML
        document.Save(dataDir + "SaveSVGFiles_out.html", newOptions);
    }
}

Сжатие SVG изображений во время конвертации

Чтобы сжать SVG изображения во время конвертации PDF в HTML, пожалуйста, попробуйте использовать следующий код:

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void SavePDFtoCompressedHTMLWithSVG()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFToHTML.pdf"))
    {
        // Create HtmlSaveOptions with tested feature
        var newOptions = new Aspose.Pdf.HtmlSaveOptions
        {
            // Compress the SVG images if there are any
            CompressSvgGraphicsIfAny = true
        };

        // Save the output HTML
        document.Save(dataDir + "CompressedSVGHTML_out.html", newOptions);
    }
}

Сохранение изображений в качестве фона PNG

Формат вывода по умолчанию для сохранения изображений - SVG. Во время конвертации некоторые изображения из PDF преобразуются в векторные изображения SVG. Это может быть медленно. Вместо этого изображения могут быть преобразованы в один файл фона PNG для каждой страницы.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void PdfToHtmlSaveImagesAsPngBackground()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion_PDFToHTMLFormat();
           
    // Create HtmlSaveOption with tested feature
    var htmlSaveOptions = new HtmlSaveOptions();
           
    // Option to save images in PNG format as background for each page.
    htmlSaveOptions.RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.AsEmbeddedPartsOfPngPageBackground;

    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    {
       document.Save(dataDir + "imagesAsPngBackground_out.html", htmlSaveOptions);         
    }
}

Указание папки для изображений

Мы также можем указать папку, в которую изображения будут сохранены во время конвертации PDF в HTML:

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void SavePDFtoHTMLWithSeparateImageFolder()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFToHTML.pdf"))
    {
        // Create HtmlSaveOptions with tested feature
        var newOptions = new Aspose.Pdf.HtmlSaveOptions
        {
            // Specify the separate folder to save images
            SpecialFolderForAllImages = dataDir
        };

        // Save the output HTML
        document.Save(dataDir + "HTMLWithSeparateImageFolder_out.html", newOptions);
    }
}

Создание последующих файлов только с содержимым тела

Недавно нам было предложено ввести функцию, при которой PDF файлы конвертируются в HTML, и пользователь может получить только содержимое тега <body> для каждой страницы. Это приведет к созданию одного файла с CSS, <html>, <head> деталями и всех страниц в других файлах только с содержимым <body>.

Чтобы удовлетворить это требование, новое свойство HtmlMarkupGenerationMode было введено в класс HtmlSaveOptions.

С помощью следующего простого фрагмента кода вы можете разделить выходной HTML на страницы. В выходных страницах все HTML объекты должны находиться точно там, где они находятся сейчас (обработка шрифтов и вывод, создание и вывод CSS, создание и вывод изображений), за исключением того, что выходной HTML будет содержать содержимое, в настоящее время размещенное внутри тегов (теперь теги “body” будут опущены). Однако, при использовании этого подхода, ссылка на CSS является ответственностью вашего кода, потому что такие вещи, как будут удалены. Для этой цели вы можете прочитать CSS через File.ReadAllText() и отправить его через AJAX на веб-страницу, где он будет применен с помощью jQuery.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertPDFToHTMLWithBodyContent()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFToHTML.pdf"))
    {
        // Initialize HtmlSaveOptions
        var options = new Aspose.Pdf.HtmlSaveOptions
        {
            // Set HtmlMarkupGenerationMode to generate only body content
            HtmlMarkupGenerationMode =
                Aspose.Pdf.HtmlSaveOptions.HtmlMarkupGenerationModes.WriteOnlyBodyContent,

            // Specify to split the output into multiple pages
            SplitIntoPages = true
        };

        // Save the output HTML
        document.Save(dataDir + "CreateSubsequentFiles_out.html", options);
    }
}

Прозрачный рендеринг текста

В случае, если исходный/входной PDF файл содержит прозрачные тексты, затененные передними изображениями, могут возникнуть проблемы с рендерингом текста. Поэтому, чтобы учесть такие сценарии, можно использовать свойства SaveShadowedTextsAsTransparentTexts и SaveTransparentTexts.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertPDFToHTMLWithTransparentTextRendering()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFToHTML.pdf"))
    {
        // Initialize HtmlSaveOptions
        var htmlOptions = new Aspose.Pdf.HtmlSaveOptions
        {
            // Enable transparent text rendering
            SaveShadowedTextsAsTransparentTexts = true,
            SaveTransparentTexts = true
        };

        // Save the output HTML
        document.Save(dataDir + "TransparentTextRendering_out.html", htmlOptions);
    }
}

Рендеринг слоев PDF документа

Мы можем рендерить слои PDF документа в отдельном элементе типа слоя во время конвертации PDF в HTML:

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertPDFToHTMLWithLayersRendering()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "PDFToHTML.pdf"))
    {
        // Instantiate HTML SaveOptions object
        var htmlOptions = new Aspose.Pdf.HtmlSaveOptions
        {
            // Enable rendering of PDF document layers separately in the output HTML
            ConvertMarkedContentToLayers = true
        };

        // Save the output HTML
        document.Save(dataDir + "LayersRendering_out.html", htmlOptions);
    }
}