Como usar C# para converter HTML em PDF com o IronPDF no Azure Functions
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.
-
Instale IronPDF com o Gerenciador de Pacotes NuGet
PM > Install-Package IronPdf -
Copie e execute este trecho de código.
var pdf = new IronPdf.ChromePdfRenderer() .RenderHtmlAsPdf("<h1>Hello Azure!</h1>") .SaveAs("output-azure.pdf"); -
Implante para testar em seu ambiente de produção.
Comece a usar IronPDF em seu projeto hoje com uma avaliação gratuita
Fluxo de trabalho mínimo (5 etapas)
- Instale a biblioteca C# para gerar PDFs no Azure.
- Escolha o nível de hospedagem Azure Basic B1 ou superior.
- Desmarque a opção `Run from package file` ao publicar.
- Siga as instruções de configuração recomendadas.
- Use o exemplo de código para criar um gerador de PDF usando o Azure.
Tutorial de Como Fazer
Como configuro meu projeto?
Qual pacote do IronPDF devo instalar?
O primeiro passo é instalar o IronPDF usando o NuGet:
- Em Funções do Azure baseadas no Windows, use o pacote
IronPdf- Pacote NuGet IronPdf para Windows - Em Funções do Azure baseadas em Linux, use o pacote
IronPdf.Linux- Pacote NuGet IronPdf para Linux
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.
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.
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.
- No Linux, defina
Installation.LinuxAndDockerDependenciesAutoConfig=true;para garantir quelibgdiplusesteja instalado na máquina. - Adicione o seguinte ao arquivo .csproj do seu projeto .NET 6:
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles><GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>XML -
Crie um arquivo em seu projeto chamado
runtimeconfig.template.jsone preencha-o com o seguinte:{ "configProperties": { "System.Drawing.EnableUnixSupport": true } } - 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
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
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
- Sempre utilize planos de hospedagem adequados -
B1ou superior para um desempenho confiável. - Configure o registro de logs corretamente - Use o Azure Application Insights para monitoramento de produção.
- Lidar com exceções de forma adequada - Implementar lógica de repetição para falhas transitórias.
- Otimize o conteúdo HTML - Minimize recursos externos e use imagens codificadas em base64 sempre que possível.
- Teste minuciosamente - Valide a geração de PDFs localmente antes da implantação no Azure.
- 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.

