Rochas.PDFGenerator 1.1.2

dotnet add package Rochas.PDFGenerator --version 1.1.2
                    
NuGet\Install-Package Rochas.PDFGenerator -Version 1.1.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Rochas.PDFGenerator" Version="1.1.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Rochas.PDFGenerator" Version="1.1.2" />
                    
Directory.Packages.props
<PackageReference Include="Rochas.PDFGenerator" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Rochas.PDFGenerator --version 1.1.2
                    
#r "nuget: Rochas.PDFGenerator, 1.1.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Rochas.PDFGenerator@1.1.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Rochas.PDFGenerator&version=1.1.2
                    
Install as a Cake Addin
#tool nuget:?package=Rochas.PDFGenerator&version=1.1.2
                    
Install as a Cake Tool

Rochas.PDFGenerator

NuGet

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.2 125 11/29/2025
1.0.3 270 9/11/2023