Integration Guide
Generate PDFs from HTML, URLs, or Markdown in 5 minutes.
Providers
The PDF Generator supports multiple rendering engines.
Provider 1: Playwright (Recommended)
Step 1: Install Package
dotnet add package PrimusSaaS.PdfGenerator
Step 2: Configure in Program.cs
using Primus.PdfGenerator;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddPrimusPdfGenerator(opts => {
// Bind configuration
builder.Configuration.GetSection("PrimusPdfGenerator").Bind(opts);
// Explicitly set provider if not in appsettings
opts.Provider = PdfProvider.Playwright;
});
var app = builder.Build();
app.MapControllers();
app.Run();
Step 3: Configure appsettings.json
{
"PrimusPdfGenerator": {
"Provider": "Playwright",
"TimeoutSeconds": 30,
"Headless": true,
"DefaultFormat": "A4",
"DefaultMargins": {
"Top": "20mm",
"Bottom": "20mm",
"Left": "20mm",
"Right": "20mm"
}
}
}
Configuration Notes
- Provider:
Playwright(requires Playwright dependencies installed) - TimeoutSeconds: Max time to wait for rendering
Step 4: Create PDF Controller
Create Controllers/ReportController.cs:
using Microsoft.AspNetCore.Mvc;
using Primus.PdfGenerator;
namespace YourApp.Controllers;
[ApiController]
[Route("api/[controller]")]
public class ReportController : ControllerBase
{
private readonly IPdfGenerator _pdf;
public ReportController(IPdfGenerator pdf)
{
_pdf = pdf;
}
[HttpPost("generate")]
public async Task<IActionResult> GenerateReport([FromBody] ReportRequest request)
{
var html = $@"
<html>
<body>
<h1>{request.Title}</h1>
<p>{request.Content}</p>
</body>
</html>";
var options = new PdfOptions { Format = PdfPageFormat.A4 };
var pdf = await _pdf.GenerateFromHtmlAsync(html, options);
return File(pdf, "application/pdf", "report.pdf");
}
[HttpGet("screenshot")]
public async Task<IActionResult> ScreenshotUrl([FromQuery] string url)
{
var pdf = await _pdf.GenerateFromUrlAsync(url, new PdfOptions
{
Format = PdfPageFormat.Letter,
Landscape = true
});
return File(pdf, "application/pdf", "screenshot.pdf");
}
}
public record ReportRequest(string Title, string Content);
Step 5: Test Endpoints
# Generate from HTML
curl -X POST http://localhost:5000/api/report/generate \
-H "Content-Type: application/json" \
-d '{"title": "Test Report", "content": "Hello World"}' \
--output report.pdf
# Capture URL
curl "http://localhost:5000/api/report/screenshot?url=https://example.com" \
--output screenshot.pdf
Provider 2: Puppeteer
Step 1: Install Package
dotnet add package PrimusSaaS.PdfGenerator
Step 2: Configure in Program.cs
builder.Services.AddPrimusPdfGenerator(opts => {
opts.Provider = PdfProvider.Puppeteer;
// ...
});
Step 3: Configure appsettings.json
{
"PrimusPdfGenerator": {
"Provider": "Puppeteer"
}
}
Step 4 & 5
(Reuse Controller and Test commands)
Configuration Reference
PDF Generator Options
| Option | Type | Default | Description |
|---|---|---|---|
Provider | PdfProvider | Playwright | Rendering engine |
Headless | bool | true | Run browser in headless mode |
TimeoutSeconds | int | 30 | Render timeout |
ChromiumPath | string | null | Custom browser path |
Examples
Example 1: Custom Headers/Footers
var options = new PdfOptions
{
DisplayHeaderFooter = true,
HeaderTemplate = "<div style='font-size:10px;'>Confidential</div>",
FooterTemplate = "<div style='font-size:10px;'>Page <span class='pageNumber'></span></div>"
};
Troubleshooting
Issue: Browser missing
Error: Executable doesn't exist
Solution:
- For Playwright:
pwsh bin/Debug/net8.0/playwright.ps1 install - For Puppeteer: Ensure Chrome/Chromium is installed or downloaded.