Converter HTML para PDF em .NET

Visão Geral

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

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

Formato: HTML

Formato: MHTML

Formato: WebPage

Conversão de HTML para PDF em C#

Conversão de HTML para PDF em C#

Aspose.PDF para .NET é uma API de manipulação de PDF que permite converter documentos HTML existentes para PDF de forma contínua. O processo de conversão de HTML para PDF pode ser personalizado flexivelmente.

Converter HTML para PDF

O seguinte exemplo de código C# mostra como converter um documento HTML em 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().
public static void ConvertHTMLtoPDF()
{
    HtmlLoadOptions options= new HtmlLoadOptions();
    Document pdfDocument= new Document(_dataDir + "test.html", options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

Aspose.PDF Conversão de HTML para PDF usando o App Gratuito

Conversão avançada de HTML para PDF

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

Suporte a Media Queries

Media queries são uma técnica popular para fornecer uma folha de estilo adaptada para diferentes dispositivos. Podemos definir o tipo de dispositivo usando a propriedade HtmlMediaType.

public static void ConvertHTMLtoPDFAdvanced_MediaType()
{
    HtmlLoadOptions options = new HtmlLoadOptions
    {
        // definir modo Impressão ou Tela
        HtmlMediaType = HtmlMediaType.Print
    };
    Document pdfDocument= new Document(_dataDir + "test.html", options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

Ativar (desativar) incorporação de fontes

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

public static void ConvertHTMLtoPDFAdvanced_EmbedFonts()
{
    // Desativar incorporação de fontes
    HtmlLoadOptions options = new HtmlLoadOptions {IsEmbedFonts = false};
    Document pdfDocument= new Document(_dataDir + "test_fonts.html", options);
    pdfDocument.Save(_dataDir + "html_test.PDF");
}

Gerenciar carregamento de recursos externos

O Motor 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. A classe HtmlLoadOptions possui a propriedade CustomLoaderOfExternalResources com a qual podemos definir o comportamento do carregador de recursos. Suponha que precisemos substituir todas as imagens PNG por uma única imagem test.jpg e substituir URL externa por interna para outros recursos. Para fazer isso, podemos definir um carregador personalizado SamePictureLoader e apontar CustomLoaderOfExternalResources para este nome.

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)
        {
            // Definir o Tipo 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();
}

Converter página Web para PDF

Converter uma página web é ligeiramente diferente de converter um documento HTML local. Para converter o conteúdo de uma página 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 em formato PDF.

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

Passos: Converter WebPage para PDF em C#

  1. Ler 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 enquanto passa o objeto stream.
  4. Opcionalmente, defina o tamanho da página e/ou orientação.
public static void ConvertHTMLtoPDFAdvanced_WebPage()
{
    const string url = "https://pt.wikipedia.org/wiki/Aspose_API";
    // Definir tamanho da página A3 e orientação Paisagem;   
    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();
    }
}

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

Às vezes, precisamos realizar a conversão de arquivos HTML que requerem autenticação e privilégios de acesso, de modo 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 obtidos de algum servidor externo que requer autenticação e, para atender a essa necessidade, a propriedade ExternalResourcesCredentials é adicionada à classe HtmlLoadOptions. O seguinte trecho de código mostra os passos para passar credenciais para solicitar HTML e seus respectivos recursos durante a conversão de arquivo HTML para 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();
    }
}

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

Aspose.PDF para .NET oferece a capacidade de renderizar todos os conteúdos em uma única página ao converter um arquivo HTML para o formato PDF. Por exemplo, se você tem algum conteúdo HTML cujo tamanho de saída é maior que uma página, você 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.

// Para exemplos completos e arquivos de dados, por favor, visite https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// O caminho para o diretório dos documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();
// Inicializar as opções de HTMLLoadSave
HtmlLoadOptions options = new HtmlLoadOptions();
// Definir a propriedade Renderizar para uma única página
options.IsRenderToSinglePage = true;
// Carregar documento
Document pdfDocument= new Document(dataDir + "HTMLToPDF.html", options);
// Salvar
pdfDocument.Save(dataDir + "RenderContentToSamePage.pdf");

Renderizar HTML com dados SVG

Renderizar HTML com Dados SVG

Aspose.PDF para .NET fornece a capacidade de converter uma página HTML em documento PDF. Uma vez que o HTML permite adicionar o elemento gráfico SVG como uma tag na página, o 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 para Documentos PDF Etiquetados.

// Para exemplos completos e arquivos de dados, por favor, vá para https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// O caminho para o diretório dos documentos.
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();
// Definir o caminho do arquivo de entrada
string inFile = dataDir + "HTMLSVG.html";
// Definir o caminho do arquivo de saída
string outFile = dataDir + "RenderHTMLwithSVGData.pdf";
// Inicializar HtmlLoadOptions
HtmlLoadOptions options = new HtmlLoadOptions(Path.GetDirectoryName(inFile));
// Inicializar objeto Document
Document pdfDocument = new Document(inFile, options);
// salvar
pdfDocument.Save(outFile);

Converter MHTML para PDF

O Aspose.PDF para .NET apresenta a você uma aplicação online gratuita “MHTML para PDF”, onde você pode explorar a funcionalidade e a qualidade com que funciona.

Conversão de MHTML para PDF usando o Aplicativo Gratuito Aspose.PDF

MHTML, abreviação para MIME HTML, é um formato de arquivo de arquivo de página 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. MHTML, abreviação para MIME HTML, é um formato de arquivo de arquivo de página 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.

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().
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");
}

Veja também

Este artigo também aborda esses tópicos. Este artigo também aborda esses tópicos.

Format: HTML

Format: MHTML

Format: WebPage