Word and PowerPoint, not only PDF
The same template produces all three at the same fidelity. Most tools in this space stop at PDF.
A template is an ordinary HTML page โ your CSS, your charting library, your fonts. Paragon binds JSON into it and returns a PDF, a Word document or a PowerPoint deck at exact fidelity, with no Office on the server and no network call while it renders.
The consuming application keeps a folder of exported templates and calls one method. It never loads a template, resolves a path, or learns how the folder is laid out.
builder.Services.AddParagon(options =>
{
options.RootPath = "ParagonTemplates";
options.LicensePath = "paragon.lic";
});
var report = await engine.GenerateAsync(
"xyza123", json, cancellationToken);
await File.WriteAllBytesAsync(
report.FileName, report.Bytes, cancellationToken);
<table>
<tbody>
{{#each lines}}
<tr class="{{#if isOverdue}}overdue{{/if}}">
<td>{{description}}</td>
<td>{{money amount "ar-SA"}}</td>
</tr>
{{/each}}
</tbody>
</table>
The same template produces all three at the same fidelity. Most tools in this space stop at PDF.
RTL layout done properly, with the fonts carried inside the report rather than assumed present on the server.
Long tables break across pages, with report-wide numbering and continuation handling.
Every request a template makes outside its own asset folder is aborted, so generation never leaves the machine.
A template that draws asynchronously says so, and the engine waits for it rather than photographing a blank canvas.
Integrity hashes over templates and assets, provenance stamped into every document, and schema-version checks that fail loudly.
Reports are authored in the designer that comes with the package โ a developer writes the template, previews it against the real engine, and exports a folder. That folder is the whole contract: there is no shared database and nothing to call at runtime.