Rochas.PDFGenerator
1.1.2
dotnet add package Rochas.PDFGenerator --version 1.1.2
NuGet\Install-Package Rochas.PDFGenerator -Version 1.1.2
<PackageReference Include="Rochas.PDFGenerator" Version="1.1.2" />
<PackageVersion Include="Rochas.PDFGenerator" Version="1.1.2" />
<PackageReference Include="Rochas.PDFGenerator" />
paket add Rochas.PDFGenerator --version 1.1.2
#r "nuget: Rochas.PDFGenerator, 1.1.2"
#:package Rochas.PDFGenerator@1.1.2
#addin nuget:?package=Rochas.PDFGenerator&version=1.1.2
#tool nuget:?package=Rochas.PDFGenerator&version=1.1.2
Rochas.PDFGenerator
Biblioteca .NET para geração de PDFs a partir de templates, modelos (T) ou DataTables, com suporte completo a cabeçalhos com logotipo, paginação no rodapé, estilos e cores de fontes, marca-d’água e placeholders altamente customizáveis.
Baseada em QuestPDF e compatível com .NET Standard 2.1+.
📦 Instalação
Via CLI do .NET:
dotnet add package Rochas.PDFGenerator
Ou via Package Manager Console:
Install-Package Rochas.PDFGenerator
Namespace principal:
using Rochas.PDFGenerator;
🚀 Visão Geral
A classe principal é:
PDFComposer
Ela oferece 3 modos de geração de PDF:
Template + Placeholders — substituição de chaves ({{Nome}}, {{Data}}) com estilos individuais.
Model Genérico (T) — o objeto é mapeado automaticamente para placeholders correspondentes aos nomes das propriedades e estilo padrão.
DataTable — gera PDF tabular com cabeçalhos/linhas automaticamente dentro do estilo padrão informado.
Todos os modos podem usar cabeçalho, rodapé com paginação, fontes personalizadas, logo, marca-d’água, margens customizadas, estilos individuais, etc.
⚙️ Configuração da Página
A classe PdfPageConfiguration centraliza as configurações:
var pageConfig = new PdfPageConfiguration {
MarginLeft = 40,
MarginRight = 40,
MarginTop = 50,
MarginBottom = 50,
FontFamily = PdfFontFamily.Montserrat,
// Opcional: fonte TTF customizada
CustomFontBytes = File.ReadAllBytes("origem/sua-fonte.ttf"),
HeaderComposition = new PdfHeaderComposition {
LogoBytes = File.ReadAllBytes("images/logo.png"),
LogoAlign = PdfLogoAlignment.Left,
Title = "Relatório XYZ"
},
WatermarkBytes = File.ReadAllBytes("images/watermark.png"),
WatermarkOpacity = 30,
FooterPagination = true
};
🎨 Estilos dos Placeholders
Cada placeholder no corpo pode ter estilo próprio via PdfPlaceHolderStyle:
new PdfPlaceHolderStyle {
Bold = true,
Italic = true,
Underline = true,
FontSizePx = 16,
TextColor = Color.DarkBlue
}
As chaves são representadas por:
PdfBodyPlaceHolder { Key = "{{Nome}}", Style = ... }
📄 Modo 1 — Template + Placeholders (uso mais flexível)
Template (string):
Cliente: {{NomeCliente}}
Data do Relatório: {{Data}}
var placeholders = new Dictionary<PdfBodyPlaceHolder, string>() {
{ new PdfBodyPlaceHolder { Key = "{{NomeCliente}}", Style = new PdfPlaceHolderStyle { Bold = true, FontSizePx = 16 } }, "ACME Ltda" },
{ new PdfBodyPlaceHolder { Key = "{{Data}}", Style = new PdfPlaceHolderStyle { Italic = true } }, DateTime.Now.ToString("dd/MM/yyyy") }
};
byte[] pdf = composer.GeneratePdf(templateString, placeholders, pageConfig);
📦 Modo 2 — Model Genérico (T)
Exemplo de classe:
public class Cliente {
public string Nome { get; set; }
public string Documento { get; set; }
}
Template:
Cliente: {{Nome}}
Documento: {{Documento}}
Uso:
var cliente = new Cliente {
Nome = "ACME Ltda.",
Documento = "00.000.000/0001-00"
};
byte[] pdf = composer.GeneratePdf(templateString, cliente, pageConfig);
📊 Modo 3 — DataTable
DataTable table = new DataTable();
table.Columns.Add("Produto");
table.Columns.Add("Quantidade");
table.Rows.Add("Caderno", 10);
table.Rows.Add("Lápis", 20);
byte[] pdf = composer.GeneratePdf(table, pageConfig);
🧪 Exemplo Completo
var composer = new PDFComposer(
author: "Sistema XYZ",
title: "Relatório de Clientes",
subject: "Clientes Ativos",
creationDate: DateTime.Now
);
var pageConfig = new PdfPageConfiguration {
FontFamily = PdfFontFamily.Montserrat,
CustomFontBytes = File.ReadAllBytes("fonts/Montserrat-Regular.ttf"),
HeaderComposition = new PdfHeaderComposition {
LogoBytes = File.ReadAllBytes("logo.png"),
LogoAlign = PdfLogoAlignment.Left,
Title = "Relatório de Clientes"
},
WatermarkBytes = File.ReadAllBytes("watermark.png"),
WatermarkOpacity = 20,
FooterPagination = true
};
var template = "Cliente: {{Nome}}\nDocumento: {{Documento}}";
var cliente = new Cliente { Nome = "ACME Ltda.", Documento = "00.000.000/0001-00" };
byte[] pdf = composer.GeneratePdf(template, cliente, pageConfig);
File.WriteAllBytes("Clientes.pdf", pdf);
🛠 Integração via ASP.NET Core
Exemplo de retorno em API:
return File(pdfBytes, "application/pdf", "relatorio.pdf");
📄 Licença
GPL v2 — livre para uso comercial e pessoal.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- QuestPDF (>= 2025.7.4)
- Rochas.ImageGenerator (>= 1.1.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.