Como gerar HTML para PDF com .NET no Azure

Como usar C# para converter HTML em PDF com o IronPDF no Azure Functions

This article was translated from English: Does it need improvement?
Translated
View the article in English

O IronPDF gera, manipula e lê documentos PDF em plataformas Azure, incluindo sites MVC e Azure Functions. Este guia mostra como implementar a conversão de HTML para PDF no Azure Functions com a configuração e otimização adequadas para ambientes de produção.

Se você estiver executando o Azure Functions em um contêiner Docker, consulte este tutorial do Azure Docker para Linux .

Guia Rápido: Converter PDF de HTML com IronPDF no Azure

Comece a converter HTML para PDF em seus aplicativos do Azure usando o IronPDF. Este guia rápido demonstra como renderizar uma URL como um documento PDF usando os métodos da API do IronPDF. Este exemplo demonstra a simplicidade do IronPDF para integrar recursos de PDF em soluções do Azure. Siga o exemplo para começar a gerar PDFs sem perder a formatação e colocar seu projeto do Azure em funcionamento rapidamente.

  1. Instale IronPDF com o Gerenciador de Pacotes NuGet

    PM > Install-Package IronPdf
  2. Copie e execute este trecho de código.

    var pdf = new IronPdf.ChromePdfRenderer()
        .RenderHtmlAsPdf("<h1>Hello Azure!</h1>")
        .SaveAs("output-azure.pdf");
  3. Implante para testar em seu ambiente de produção.

    Comece a usar IronPDF em seu projeto hoje com uma avaliação gratuita

    arrow pointer

Tutorial de Como Fazer

Como configuro meu projeto?

Qual pacote do IronPDF devo instalar?

O primeiro passo é instalar o IronPDF usando o NuGet:

Install-Package IronPdf

Como alternativa, instale manualmente o arquivo .dll usando o link de download direto do pacote IronPDF para Azure .

Para opções de instalação mais avançadas, consulte nosso guia completo de Pacotes NuGet .

Quais opções do Azure preciso configurar?

Qual plano de hospedagem do Azure devo escolher?

O Azure Basic B1 é o nível mínimo de hospedagem necessário para atender às necessidades de renderização. Se você estiver criando um sistema de alto rendimento, talvez seja necessário atualizá-lo. O plano B1 fornece recursos suficientes para o mecanismo de renderização de PDF do Chrome , que é responsável pela conversão de HTML para PDF do IronPDF.

AvisoA falha na seleção de um tipo de plano de serviço do aplicativo pode resultar na falha do IronPdf em renderizar documentos PDF.

Formulário de criação de Aplicativo de Funções do Azure com a opção de plano do Serviço de Aplicativo destacada na lista suspensa Tipo de Plano.

Por que devo desmarcar a opção "Executar a partir do arquivo de pacote"?

Ao publicar seu aplicativo Azure Functions, certifique-se de que Run from package file NÃO esteja selecionado. Esta opção cria uma implantação somente leitura que impede o IronPDF de extrair as dependências de tempo de execução necessárias durante a execução.

A caixa de diálogo de publicação do Azure Functions mostra a opção

Como faço para configurar o .NET 6?

A Microsoft removeu recentemente as bibliotecas de imagens do .NET 6+, o que quebrou muitas APIs legadas. Portanto, é necessário configurar seu projeto para ainda permitir chamadas a essas APIs legadas.

  1. No Linux, defina Installation.LinuxAndDockerDependenciesAutoConfig=true; para garantir que libgdiplus esteja instalado na máquina.
  2. Adicione o seguinte ao arquivo .csproj do seu projeto .NET 6:
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    XML
  3. Crie um arquivo em seu projeto chamado runtimeconfig.template.json e preencha-o com o seguinte:

    {
      "configProperties": {
        "System.Drawing.EnableUnixSupport": true
      }
    }
  4. Por fim, adicione a seguinte linha ao início do seu programa para habilitar o suporte Unix para System.Drawing:
    System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
    System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
    System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", True)
    $vbLabelText   $csharpLabel

Quando devo usar o Docker no Azure?

Uma maneira de obter controle, acesso a fontes SVG e a capacidade de controlar o desempenho no Azure é usar aplicativos e funções do IronPDF dentro de contêineres Docker. Essa abordagem proporciona um melhor controle sobre o ambiente de execução e elimina muitas limitações específicas da plataforma.

Temos um tutorial completo sobre o IronPDF Azure Docker para instâncias Linux e Windows, e recomendamos a sua leitura.

Como é o código da Função do Azure?

Este exemplo gera automaticamente entradas de log para o logger integrado do Azure (consulte ILogger log). Para obter configurações detalhadas de registro de logs, consulte nosso guia de registro de logs personalizado .

[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log, ExecutionContext context)
{
    log.LogInformation("Entered PrintPdf API function...");

    // Apply license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";

    // Configure logging
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;
    IronPdf.Logging.Logger.EnableDebugging = false;

    // Configure IronPdf settings
    Installation.LinuxAndDockerDependenciesAutoConfig = false;
    Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;

    try
    {
        log.LogInformation("About to render pdf...");

        // Create a renderer and render the URL as PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");

        log.LogInformation("Finished rendering pdf...");

        // Return the rendered PDF as a file download
        return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
    }
    catch (Exception e)
    {
        log.LogError(e, "Error while rendering pdf");
    }

    return new OkObjectResult("OK");
}
[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log, ExecutionContext context)
{
    log.LogInformation("Entered PrintPdf API function...");

    // Apply license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";

    // Configure logging
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;
    IronPdf.Logging.Logger.EnableDebugging = false;

    // Configure IronPdf settings
    Installation.LinuxAndDockerDependenciesAutoConfig = false;
    Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;

    try
    {
        log.LogInformation("About to render pdf...");

        // Create a renderer and render the URL as PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");

        log.LogInformation("Finished rendering pdf...");

        // Return the rendered PDF as a file download
        return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
    }
    catch (Exception e)
    {
        log.LogError(e, "Error while rendering pdf");
    }

    return new OkObjectResult("OK");
}
<FunctionName("PrintPdf")>
Public Shared Async Function Run(<HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route := Nothing)> ByVal req As HttpRequest, ByVal log As ILogger, ByVal context As ExecutionContext) As Task(Of IActionResult)
	log.LogInformation("Entered PrintPdf API function...")

	' Apply license key
	IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"

	' Configure logging
	IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom
	IronPdf.Logging.Logger.CustomLogger = log
	IronPdf.Logging.Logger.EnableDebugging = False

	' Configure IronPdf settings
	Installation.LinuxAndDockerDependenciesAutoConfig = False
	Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled

	Try
		log.LogInformation("About to render pdf...")

		' Create a renderer and render the URL as PDF
		Dim renderer As New ChromePdfRenderer()
		Dim pdf = renderer.RenderUrlAsPdf("https://www.google.com/")

		log.LogInformation("Finished rendering pdf...")

		' Return the rendered PDF as a file download
		Return New FileContentResult(pdf.BinaryData, "application/pdf") With {.FileDownloadName = "google.pdf"}
	Catch e As Exception
		log.LogError(e, "Error while rendering pdf")
	End Try

	Return New OkObjectResult("OK")
End Function
$vbLabelText   $csharpLabel

Exemplo avançado de renderização de strings HTML

Para cenários mais complexos que envolvam HTML personalizado com estilos CSS, você pode usar os recursos de conversão de string HTML para PDF :

[FunctionName("RenderHtmlWithCss")]
public static async Task<IActionResult> RenderHtmlWithCss(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
    ILogger log)
{
    log.LogInformation("Processing HTML to PDF request");

    // Read HTML content from request body
    string htmlContent = await new StreamReader(req.Body).ReadToEndAsync();

    // Configure renderer with custom options
    var renderer = new ChromePdfRenderer()
    {
        RenderingOptions = new ChromePdfRenderOptions()
        {
            MarginTop = 20,
            MarginBottom = 20,
            MarginLeft = 10,
            MarginRight = 10,
            CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true
        }
    };

    try
    {
        // Add custom CSS
        string styledHtml = $@"
            <html>
            <head>
                <style>
                    body {{ font-family: Arial, sans-serif; padding: 20px; }}
                    h1 {{ color: #2c3e50; }}
                    .highlight {{ background-color: #f1c40f; padding: 5px; }}
                </style>
            </head>
            <body>
                {htmlContent}
            </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(styledHtml);

        return new FileContentResult(pdf.BinaryData, "application/pdf") 
        { 
            FileDownloadName = "styled-document.pdf" 
        };
    }
    catch (Exception ex)
    {
        log.LogError(ex, "Failed to render HTML to PDF");
        return new BadRequestObjectResult("Error processing HTML content");
    }
}
[FunctionName("RenderHtmlWithCss")]
public static async Task<IActionResult> RenderHtmlWithCss(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
    ILogger log)
{
    log.LogInformation("Processing HTML to PDF request");

    // Read HTML content from request body
    string htmlContent = await new StreamReader(req.Body).ReadToEndAsync();

    // Configure renderer with custom options
    var renderer = new ChromePdfRenderer()
    {
        RenderingOptions = new ChromePdfRenderOptions()
        {
            MarginTop = 20,
            MarginBottom = 20,
            MarginLeft = 10,
            MarginRight = 10,
            CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true
        }
    };

    try
    {
        // Add custom CSS
        string styledHtml = $@"
            <html>
            <head>
                <style>
                    body {{ font-family: Arial, sans-serif; padding: 20px; }}
                    h1 {{ color: #2c3e50; }}
                    .highlight {{ background-color: #f1c40f; padding: 5px; }}
                </style>
            </head>
            <body>
                {htmlContent}
            </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(styledHtml);

        return new FileContentResult(pdf.BinaryData, "application/pdf") 
        { 
            FileDownloadName = "styled-document.pdf" 
        };
    }
    catch (Exception ex)
    {
        log.LogError(ex, "Failed to render HTML to PDF");
        return new BadRequestObjectResult("Error processing HTML content");
    }
}
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.Azure.WebJobs
Imports Microsoft.Azure.WebJobs.Extensions.Http
Imports Microsoft.AspNetCore.Http
Imports Microsoft.Extensions.Logging
Imports IronPdf

Public Module HtmlToPdfFunction

    <FunctionName("RenderHtmlWithCss")>
    Public Async Function RenderHtmlWithCss(
        <HttpTrigger(AuthorizationLevel.Function, "post", Route:=Nothing)> req As HttpRequest,
        log As ILogger) As Task(Of IActionResult)

        log.LogInformation("Processing HTML to PDF request")

        ' Read HTML content from request body
        Dim htmlContent As String = Await New StreamReader(req.Body).ReadToEndAsync()

        ' Configure renderer with custom options
        Dim renderer As New ChromePdfRenderer() With {
            .RenderingOptions = New ChromePdfRenderOptions() With {
                .MarginTop = 20,
                .MarginBottom = 20,
                .MarginLeft = 10,
                .MarginRight = 10,
                .CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
                .PrintHtmlBackgrounds = True,
                .CreatePdfFormsFromHtml = True
            }
        }

        Try
            ' Add custom CSS
            Dim styledHtml As String = $"
                <html>
                <head>
                    <style>
                        body {{ font-family: Arial, sans-serif; padding: 20px; }}
                        h1 {{ color: #2c3e50; }}
                        .highlight {{ background-color: #f1c40f; padding: 5px; }}
                    </style>
                </head>
                <body>
                    {htmlContent}
                </body>
                </html>"

            Dim pdf = renderer.RenderHtmlAsPdf(styledHtml)

            Return New FileContentResult(pdf.BinaryData, "application/pdf") With {
                .FileDownloadName = "styled-document.pdf"
            }
        Catch ex As Exception
            log.LogError(ex, "Failed to render HTML to PDF")
            Return New BadRequestObjectResult("Error processing HTML content")
        End Try
    End Function

End Module
$vbLabelText   $csharpLabel

Para gerenciar licenças em suas Funções do Azure, consulte nossa documentação sobre como usar chaves de licença .

Quais são os problemas conhecidos?

Por que as fontes SVG não são exibidas em planos de hospedagem compartilhada?

Uma limitação é que a visão geral da plataforma de hospedagem Azure não oferece suporte a servidores que carregam fontes SVG, como o Google Fonts, em seus planos mais baratos de aplicativos web compartilhados. Isso ocorre devido a restrições de segurança que impedem o acesso a objetos gráficos GDI+ do Windows.

Recomendamos o uso de um guia de contêiner Docker para Windows ou Linux para o IronPDF , ou talvez um VPS no Azure, para solucionar esse problema quando a melhor renderização de fontes for necessária.

Por que a hospedagem gratuita do Azure é lenta?

Os planos gratuitos e compartilhados do Azure, assim como o plano de consumo, não são adequados para renderização de PDFs. Recomendamos o plano de hospedagem Azure B1/Premium, que é o que nós mesmos utilizamos. O processo de HTML to PDF exige um esforço considerável de qualquer computador, semelhante a abrir e renderizar uma página da web em sua própria máquina. Um mecanismo de navegador real é utilizado , portanto, precisamos provisionar recursos adequadamente e esperar tempos de renderização semelhantes aos de um computador desktop com capacidade similar.

Como posso depurar o Azure Functions localmente?

Para desenvolvimento e testes locais, consulte nosso guia sobre Depuração de projetos do Azure Functions em uma máquina local . Isso ajuda você a identificar e resolver problemas antes da implantação no Azure.

Onde posso encontrar os logs do Azure?

Ao solucionar problemas de geração de PDFs, os logs do Azure são de valor inestimável. Consulte nosso guia de Arquivos de Log do Azure para obter instruções sobre como acessar e interpretar logs específicos das operações do IronPDF.

Como faço para criar uma solicitação de suporte técnico?

Para criar um ticket de solicitação, consulte o guia Como fazer uma solicitação de suporte técnico para o IronPDF .

Melhores práticas para produção

  1. Sempre utilize planos de hospedagem adequados - B1 ou superior para um desempenho confiável.
  2. Configure o registro de logs corretamente - Use o Azure Application Insights para monitoramento de produção.
  3. Lidar com exceções de forma adequada - Implementar lógica de repetição para falhas transitórias.
  4. Otimize o conteúdo HTML - Minimize recursos externos e use imagens codificadas em base64 sempre que possível.
  5. Teste minuciosamente - Valide a geração de PDFs localmente antes da implantação no Azure.
  6. Monitore o uso de recursos - Acompanhe o consumo de memória e CPU para dimensionar adequadamente.

Perguntas frequentes

Qual é o nível mínimo de hospedagem do Azure necessário para a geração de PDFs?

O IronPDF requer o nível de hospedagem Azure Basic B1 como nível mínimo para renderização de PDFs. O nível B1 fornece recursos suficientes para o mecanismo de renderização de PDF do Chrome, que viabiliza os recursos de conversão de HTML para PDF do IronPDF.

Qual pacote devo instalar para o Azure Functions baseado em Windows?

Para o Azure Functions baseado em Windows, instale o pacote IronPDF do NuGet. Este pacote é otimizado para ambientes Windows e oferece recursos completos de geração de PDFs com o mecanismo de renderização do Chrome.

Como faço para converter HTML em PDF no Azure Functions?

Você pode converter HTML para PDF com uma única linha de código usando o ChromePdfRenderer do IronPDF. Basta criar uma nova instância e chamar o método RenderHtmlAsPdf() com o seu conteúdo HTML e, em seguida, salvar o arquivo PDF resultante.

O que acontece se eu não selecionar o plano do Serviço de Aplicativos correto?

A não seleção de um tipo de plano do Serviço de Aplicativo pode resultar na falha do IronPDF em renderizar documentos PDF. A configuração adequada do ambiente de hospedagem do Azure é essencial para o funcionamento correto do mecanismo de renderização de PDF.

Por que a opção 'Executar a partir do arquivo de pacote' deve estar desmarcada ao publicar?

Ao publicar seu aplicativo Azure Functions, a opção "Executar a partir do arquivo de pacote" deve estar desmarcada para garantir que o IronPDF possa acessar e utilizar corretamente seus componentes de renderização e dependências no ambiente Azure.

Posso usar o Azure Functions baseado em Linux para geração de PDFs?

Sim, para o Azure Functions baseado em Linux, use o pacote IronPDF.Linux do NuGet. Este pacote é especificamente otimizado para ambientes Linux, mantendo as mesmas funcionalidades de geração de PDFs.

E se eu precisar de uma taxa de transferência maior para a geração de PDFs?

Para sistemas de alto volume de dados, pode ser necessário fazer um upgrade para um nível superior ao B1. O IronPDF se adapta aos seus recursos do Azure, permitindo que você atenda às crescentes demandas de geração de PDFs selecionando níveis de desempenho mais altos.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Downloads 18,318,263 | Versão: 2026.4 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronPdf
executar um exemplo Veja seu HTML se transformar em um PDF.