Converter HTML para PDF em .NET

Visão Geral

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

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

Formatação: HTML

Formatação: MHTML

Formatação: WebPage

Conversão de C# HTML para PDF

Aspose.PDF for .NET é uma API de manipulação de PDF que permite converter qualquer documento HTML existente para PDF de forma contínua. O processo de conversão de HTML para PDF pode ser personalizado de forma flexível.

Converter HTML para PDF

O seguinte exemplo de código C# mostra como converter um documento HTML para um PDF.

Passos: Converter HTML para PDF em C#

  1. Crie uma instância da classe HtmlLoadOptions.
  2. Inicialize o objeto Document.
  3. Salve o documento PDF de saída 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 ConvertHTMLtoPDF()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Load the HTML file into a document using HtmlLoadOptions
    var options = new Aspose.Pdf.HtmlLoadOptions();

    // Open HTML document
    using (var document = new Aspose.Pdf.Document(dataDir + "test.html", options))
    {
        // Save PDF document
        document.Save(dataDir + "ConvertHTMLtoPDF_out.pdf");
    }
}

Conversão avançada de HTML para PDF

O mecanismo de conversão HTML possui várias opções que nos permitem controlar o processo de conversão.

Suporte a Consultas de Mídia

Consultas de mídia são uma técnica popular para fornecer uma folha de estilo personalizada para diferentes dispositivos. Podemos definir o tipo de dispositivo usando a propriedade HtmlMediaType.

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

    // Load the HTML file into a document using HtmlLoadOptions with Print media type
    var options = new HtmlLoadOptions
    {
        // Set Print or Screen mode
        HtmlMediaType = Aspose.Pdf.HtmlMediaType.Print
    };

    // Open HTML document
    using (var document = new Aspose.Pdf.Document(dataDir + "test.html", options))
    {
        // Save PDF document
        document.Save(dataDir + "ConvertHTMLtoPDFAdvancedMediaType_out.pdf");
    }
}

Habilitar (desabilitar) incorporação de fontes

Páginas HTML frequentemente usam fontes (por exemplo, fontes da pasta local, Google Fonts, etc). Também podemos controlar a incorporação de fontes em um documento usando a propriedade IsEmbedFonts.

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

     // Load the HTML file into a document using HtmlLoadOptions with the font embedding option set
     var options = new Aspose.Pdf.HtmlLoadOptions
     {
         // Disable font embedding
         IsEmbedFonts = false
     };

     // Open HTML document
     using (var document = new Aspose.Pdf.Document(dataDir + "test_fonts.html", options))
     {
         // Save PDF document
         document.Save(dataDir + "ConvertHTMLtoPDFAdvanced_EmbedFonts_out.pdf");
     }
 }

Gerenciar o carregamento de recursos externos

O mecanismo de conversão fornece um mecanismo que permite controlar o carregamento de certos recursos associados ao documento HTML. A classe HtmlLoadOptions possui a propriedade CustomLoaderOfExternalResources com a qual podemos definir o comportamento do carregador de recursos. Suponha que precisamos substituir todas as imagens PNG por uma única imagem test.jpg e substituir a URL externa por interna para outros recursos. Para fazer isso, podemos definir um carregador personalizado SamePictureLoader e apontar CustomLoaderOfExternalResources para esse nome.

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

    // Load the HTML file into a document with a custom resource loader for external images
    var options = new Aspose.Pdf.HtmlLoadOptions
    {
        CustomLoaderOfExternalResources = SamePictureLoader
    };

    // Open HTML document
    using (var document = new Aspose.Pdf.Document(dataDir + "test.html", options))
    {
        // Save PDF document
        document.Save(dataDir + "html_test.pdf");
    }
}

private static Aspose.Pdf.LoadOptions.ResourceLoadingResult SamePictureLoader(string resourceURI)
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();
    Aspose.Pdf.LoadOptions.ResourceLoadingResult result;

    if (resourceURI.EndsWith(".png"))
    {
        byte[] resultBytes = File.ReadAllBytes(dataDir + "test.jpg");
        result = new Aspose.Pdf.LoadOptions.ResourceLoadingResult(resultBytes)
        {
            // Set MIME Type
            MIMETypeIfKnown = "image/jpeg"
        };
    }
    else
    {
        result = new Aspose.Pdf.LoadOptions.ResourceLoadingResult(GetContentFromUrl(resourceURI));
    }
    return result;
}

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

Converter página da Web para PDF

Converter uma página da web é ligeiramente diferente de converter um documento HTML local. Para converter o conteúdo da página da Web para o formato PDF, podemos primeiro buscar o conteúdo da página HTML usando uma instância HttpClient, criar um objeto Stream, passar o conteúdo para o objeto Document e renderizar a saída no formato PDF.

Ao converter uma página da web hospedada em um servidor web para PDF:

Passos: Converter WebPage para PDF em C#

  1. Leia o conteúdo da página usando um objeto HttpClient.
  2. Instancie o objeto HtmlLoadOptions e defina a URL base.
  3. Inicialize um objeto Document passando o objeto stream.
  4. Opcionalmente, defina o tamanho da página e/ou orientação.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertHTMLtoPDFAdvanced_WebPage()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    const string url = "https://en.wikipedia.org/wiki/Aspose_API";

    // Set page size A3 and Landscape orientation;   
    var options = new Aspose.Pdf.HtmlLoadOptions(url)
    {
        PageInfo =
        {
            Width = 842,
            Height = 1191,
            IsLandscape = true
        }
    };

    // Load the web page content as a stream and create a PDF document
    using (var document = new Aspose.Pdf.Document(GetContentFromUrlAsStream(url), options))
    {
        // Save PDF document
        document.Save(dataDir + "html_test.pdf");
    }
}

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

Fornecer credenciais para conversão de página da Web para PDF

Às vezes, precisamos realizar a conversão de arquivos HTML que requerem autenticação e privilégios de acesso, para que apenas usuários autênticos possam buscar o conteúdo da página. Isso também inclui o cenário em que alguns recursos/dados referenciados dentro do HTML são buscados de algum servidor externo que requer autenticação e, para atender a essa necessidade, a propriedade ExternalResourcesCredentials foi adicionada à classe HtmlLoadOptions. O seguinte trecho de código mostra os passos para passar credenciais para solicitar HTML e seus respectivos recursos ao converter um arquivo HTML para PDF.

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

     const string url = "http://httpbin.org/basic-auth/user1/password1";
     var credentials = new System.Net.NetworkCredential("user1", "password1");

     var options = new Aspose.Pdf.HtmlLoadOptions(url)
     {
         ExternalResourcesCredentials = credentials
     };

     using (var document = new Aspose.Pdf.Document(GetContentFromUrlAsStream(url, credentials), options))
     {
         // Save PDF document
         document.Save(dataDir + "HtmlTest_out.pdf");
     }
 }

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

Renderizar todo o conteúdo HTML em uma única página

Aspose.PDF for .NET fornece a capacidade de renderizar todo o conteúdo em uma única página ao converter um arquivo HTML para o formato PDF. Por exemplo, se você tiver algum conteúdo HTML cujo tamanho de saída seja maior que uma página, pode usar a opção para renderizar os dados de saída em uma única página PDF. Para usar essa opção, a classe HtmlLoadOptions foi estendida com a flag IsRenderToSinglePage. O trecho de código abaixo mostra como usar essa funcionalidade.

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

     // Initialize HtmlLoadOptions
     var options = new Aspose.Pdf.HtmlLoadOptions
     {
         // Set Render to single page property
         IsRenderToSinglePage = true
     };

     // Open PDF document
     using (var document = new Aspose.Pdf.Document(dataDir + "HTMLToPDF.html", options))
     {
         // Save PDF document
         document.Save(dataDir + "RenderContentToSamePage_out.pdf");
     }
 }

Renderizar HTML com Dados SVG

Aspose.PDF for .NET fornece a capacidade de converter uma página HTML em um documento PDF. Como o HTML permite adicionar elementos gráficos SVG como uma tag na página, Aspose.PDF também suporta a conversão de tais dados no arquivo PDF resultante. O seguinte trecho de código mostra como converter arquivos HTML com tags gráficas SVG em Documentos PDF Marcados.

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

    // Initialize HtmlLoadOptions
    var options = new Aspose.Pdf.HtmlLoadOptions(Path.GetDirectoryName(dataDir + "HTMLSVG.html"));

    // Initialize Document object
    using (var document = new Aspose.Pdf.Document(dataDir + "HTMLSVG.html", options))
    {
        // Save PDF document
        document.Save(dataDir + "RenderHTMLwithSVGData_out.pdf");
    }
}

Converter MHTML para PDF

MHTML, abreviação de MIME HTML, é um formato de arquivo de arquivamento de página da web usado para combinar recursos que são tipicamente representados por links externos (como imagens, animações Flash, applets Java e arquivos de áudio) com código HTML em um único arquivo. O conteúdo de um arquivo MHTML é codificado como se fosse uma mensagem de email HTML, usando o tipo MIME multipart/related. Aspose.PDF for .NET pode converter arquivos HTML para o formato PDF e, com o lançamento do Aspose.PDF for .NET 9.0.0, introduzimos um novo recurso que permite converter arquivos MHTML para o formato PDF. O próximo trecho de código mostra como converter arquivos MHTML para o formato PDF com C#:

Passos: Converter MHTML para PDF em C#

  1. Crie uma instância da classe MhtLoadOptions.
  2. Inicialize o objeto Document.
  3. Salve o documento PDF de saída 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 ConvertMHTtoPDF()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf();

    // Initialize MhtLoadOptions with page setup
    var options = new Aspose.Pdf.MhtLoadOptions()
    {
        PageInfo = { Width = 842, Height = 1191, IsLandscape = true }
    };

    // Initialize Document object using the MHT file and options
    using (var document = new Aspose.Pdf.Document(dataDir + "fileformatinfo.mht", options))
    {
        // Save PDF document
        document.Save(dataDir + "MhtmlTest_out.pdf");
    }
}

Veja Também

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

Formatação: HTML

Formatação: MHTML

Formatação: WebPage