CSharp

Export Pdf

Install PuppeteerSharp

dotnet add package PuppeteerSharp

Init Browser

Create PuppeteerHostedService
public class PuppeteerHostedService : IHostedService{
    public IBrowser? Browser{get; private set;}
    public async Task StartAsync(CancellationToken cancellationToken){
        await new BrowserFetcher().DownloadAsync();
        Browser = await Puppeteer.LaunchAsync(new LaunchOptions{
            Headless = true
        });
    }
    public async Task StopAsync(CancellationToken cancellationToken){
        if(Browser != null){
            await Browser.CloseAsync();  
        } 
    }
}
Register PuppeteerHostedService
builder.Services.AddSingleton<PuppeteerHostedService>();
builder.Services.AddHostedService(sp => sp.GetRequiredService<PuppeteerHostedService>());

Export Pdf

public async Task
ExportPdf(string url){
    PuppeteerHostedService service = HttpContext.RequestServices.GetRequiredService<PuppeteerHostedService>();
    if(service.Browser != null){
        IBrowser browser = service.Browser;
        IPage page = await browser.NewPageAsync();
        await page.GoToAsync(url, new NavigationOptions{
            WaitUntil = new[] { WaitUntilNavigation.DOMContentLoaded },
            Timeout = 60000
        });
        byte[] bytes = await page.PdfDataAsync(new PdfOptions{
            Format = PaperFormat.A4,
            PrintBackground = true, 
            MarginOptions = new MarginOptions{
                    Left = "1cm",
                    Right = "1cm",
                    Top = "1cm",
                    Bottom = "1cm",
            }
        });
        await page.CloseAsync();
        return File(bytes, "application/pdf", "report.pdf");
    }
    return NotFound();
}