Converter PDF para HTML em .NET

Visão Geral

Este artigo explica como converter PDF para HTML usando C#. Ele cobre os seguintes tópicos.

Formatação: HTML

O seguinte trecho de código também funciona com a biblioteca Aspose.PDF.Drawing.

Converter PDF para HTML

Aspose.PDF for .NET oferece muitos recursos para converter vários formatos de arquivo em documentos PDF e converter arquivos PDF em vários formatos de saída. Este artigo discute como converter um arquivo PDF em HTML. Aspose.PDF for .NET fornece a capacidade de converter arquivos HTML em formato PDF usando a abordagem InLineHtml. Recebemos muitos pedidos por uma funcionalidade que converte um arquivo PDF em formato HTML e fornecemos esse recurso. Observe que esse recurso também suporta XHTML 1.0.

Aspose.PDF for .NET suporta os recursos para converter um arquivo PDF em HTML. As principais tarefas que você pode realizar com a biblioteca Aspose.PDF estão listadas:

  • Converter PDF para HTML.
  • Dividir a saída em HTML de várias páginas.
  • Especificar a pasta para armazenar arquivos SVG.
  • Compactar imagens SVG durante a conversão.
  • Salvar imagens como fundo PNG.
  • Especificar a pasta de imagens.
  • Criar arquivos subsequentes apenas com conteúdos do corpo.
  • Renderização de texto transparente.
  • Renderização de camadas de documentos PDF.

Aspose.PDF for .NET fornece um código de duas linhas para transformar um arquivo PDF de origem em HTML. A enumeração SaveFormat contém o valor Html que permite salvar o arquivo de origem em HTML. O seguinte trecho de código mostra o processo de conversão de um arquivo PDF em HTML.

Passos: Converter PDF para HTML em C#

  1. Crie uma instância do objeto Document com o documento PDF de origem.
  2. Salve-o no formato SaveFormat.Html chamando o método 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);
    }
}

Dividir a saída em HTML de várias páginas

Ao converter um arquivo PDF grande com várias páginas para o formato HTML, a saída aparece como uma única página HTML. Isso pode acabar sendo muito longo. Para controlar o tamanho da página, é possível dividir a saída em várias páginas durante a conversão de PDF para HTML. Tente usar o seguinte trecho de código.

// 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);
    }
}

Especificar a pasta para armazenar arquivos SVG

Durante a conversão de PDF para HTML, é possível especificar a pasta onde as imagens SVG devem ser salvas. Use a classe HtmlSaveOption propriedade SpecialFolderForSvgImages para especificar um diretório especial para imagens SVG. Esta propriedade obtém ou define o caminho para o diretório onde as imagens SVG devem ser salvas quando encontradas durante a conversão. Se o parâmetro estiver vazio ou nulo, então quaisquer arquivos SVG são salvos junto com outros arquivos de imagem.

// 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);
    }
}

Compactar imagens SVG durante a conversão

Para compactar imagens SVG durante a conversão de PDF para HTML, tente usar o seguinte código:

// 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);
    }
}

Salvar imagens como fundo PNG

O formato de saída padrão para salvar imagens é SVG. Durante a conversão, algumas imagens do PDF são transformadas em imagens vetoriais SVG. Isso pode ser lento. Em vez disso, as imagens podem ser transformadas em um arquivo de fundo PNG para cada página.

// 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);         
    }
}

Especificar a pasta de imagens

Também podemos especificar a pasta onde as imagens serão salvas durante a conversão de PDF para 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);
    }
}

Criar arquivos subsequentes apenas com conteúdos do corpo

Recentemente, fomos solicitados a introduzir um recurso onde arquivos PDF são convertidos em HTML e o usuário pode obter apenas o conteúdo da tag <body> para cada página. Isso produziria um arquivo com detalhes de CSS, <html>, <head> e todas as páginas em outros arquivos apenas com conteúdos de <body>.

Para atender a essa necessidade, uma nova propriedade, HtmlMarkupGenerationMode, foi introduzida na classe HtmlSaveOptions.

Com o seguinte trecho de código simples, você pode dividir a saída HTML em páginas. Nas páginas de saída, todos os objetos HTML devem ir exatamente para onde vão agora (processamento e saída de fontes, criação e saída de CSS, criação e saída de imagens), exceto que o HTML de saída conterá conteúdos atualmente colocados dentro das tags (agora as tags “body” serão omitidas). No entanto, ao usar essa abordagem, o link para o CSS é responsabilidade do seu código, pois coisas como serão removidas. Para esse propósito, você pode ler o CSS via File.ReadAllText() e enviá-lo via AJAX para uma página da web onde será aplicado pelo 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);
    }
}

Renderização de texto transparente

Caso o arquivo PDF de origem/entrada contenha textos transparentes sombreado por imagens de primeiro plano, pode haver problemas de renderização de texto. Portanto, para atender a tais cenários, as propriedades SaveShadowedTextsAsTransparentTexts e SaveTransparentTexts podem ser usadas.

// 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);
    }
}

Renderização de camadas de documentos PDF

Podemos renderizar camadas de documentos PDF em um elemento de tipo de camada separado durante a conversão de PDF para 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);
    }
}

Veja Também

Este artigo também cobre estes tópicos. Os códigos são os mesmos que acima.

Formatação: HTML