Reputation: 1
I deployed my ASP.NET Core app to Azure App Service (Free Tier) and I'm using IronPdf to convert HTML to PDF in C#. The problem is that PDF generation is incredibly slow—even a simple page takes 20-30 seconds to render, and anything more complex sometimes times out. When I test the exact same code on my local machine, it runs in about 1-2 seconds, so this seems to be an Azure-specific issue.
async Task GeneratePDF(string htmlContent)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
renderer.RenderingOptions.EnableJavaScript = false;
renderer.RenderingOptions.ViewPortWidth = 1280;
renderer.RenderingOptions.FirstPageNumber = 1;
PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(htmlContent);
string outputPath = Path.Combine(Directory.GetCurrentDirectory(), "output.pdf");
pdf.SaveAs(outputPath);
}
My client wants to continue using IronPDF because their PDFs exactly match their HTML designs. So I don't want people promoting other libraries I need help with IronPDF
Upvotes: 0
Views: 54
Reputation: 1197
It is recommended to upgrade from the Free Tier
to the Basic or Standard plan
because,
I tested PDF generation in the Free Tier, and it took about 20 seconds for large files without any timeout errors.
I've added the below lines that increase the render delay and increase timeout to prevent errors.
renderer.RenderingOptions.RenderDelay = 5000;
renderer.RenderingOptions.Timeout = 60000;
As the default timeout is too short, so increasing it to 60 seconds ensures the PDF generation completes without failure.
My Program.cs:
using IronPdf;
var builder = WebApplication.CreateBuilder(args);
IronPdf.License.LicenseKey = "<License-key>";
builder.Services.AddControllers();
builder.Services.AddCors();
builder.Logging.AddConsole();
var app = builder.Build();
app.UseHttpsRedirection();
app.UseCors(policy => policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
app.UseAuthorization();
app.MapControllers();
app.MapGet("/", () => "API is Running! Visit /weatherforecast");
app.MapPost("/generate-pdf", async () =>
{
return await Task.Run(() =>
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.ViewPortWidth = 1280;
renderer.RenderingOptions.ViewPortHeight = 1024;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
renderer.RenderingOptions.RenderDelay = 5000;
renderer.RenderingOptions.Timeout = 60000;
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, PDF!</h1>");
return Results.File(pdf.BinaryData, "application/pdf", "output.pdf");
});
});
app.Run();
PdfController.cs:
using IronPdf.Rendering;
using Microsoft.AspNetCore.Mvc;
namespace IronPdfAzureApp.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class PdfController : ControllerBase
{
[HttpPost("generate")]
public async Task<IActionResult> GeneratePdf([FromBody] PdfRequest request)
{
try
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.RenderDelay = 100;
renderer.RenderingOptions.EnableJavaScript = false;
renderer.RenderingOptions.ViewPortWidth = 1280;
renderer.RenderingOptions.FirstPageNumber = 1;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
PdfDocument pdf = await renderer.RenderHtmlAsPdfAsync(request.HtmlContent);
byte[] pdfBytes = pdf.BinaryData;
return File(pdfBytes, "applicaation/pdf", "output.pdf");
}
catch (System.Exception ex)
{
return BadRequest($"Error generating PDF: {ex.Message}");
}
}
}
public class PdfRequest
{
public string HtmlContent { get; set; }
}
}
Here’s the generated PDF after deploying to Azure App Service without any issues.
Upvotes: 1