Parei de lutar com libgdiplus e criei minha própria API de faturas (com PIX nativo)
Se você já fez deploy de uma aplicação que gera PDF num container Linux, provavelmente conhece esse erro:
System.Drawing.Common is not supported on this platform
Fontes virando quadradinhos. Imagem Alpine que era pra ser leve chegando a 800MB. Horas perdidas configurando libgdiplus que funciona local e quebra no CI/CD.
Me cansei disso. Então construí a SwiftInvoice — uma API stateless que transforma JSON em PDF pronto para impressão. Você faz um POST com os dados e recebe o stream binário do PDF de volta. Sem dependências locais. Sem inferno de fontes.
É isso que ela gera:
Três idiomas, três moedas, geração nativa de QR Code PIX — tudo pelo mesmo endpoint.
Antes vs. Depois
Antes:
dockerfileFROM mcr.microsoft.com/dotnet/aspnet:8.0
RUN apt-get update && apt-get install -y \
libgdiplus libx11-6 fontconfig \
&& ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
Depois:
dockerfileFROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine
# Só isso. A SwiftInvoice cuida do resto.
- Exemplo em Node.js
JavaScript
const axios = require('axios');
const fs = require('fs');
const generateInvoice = async () => {
const options = {
method: 'POST',
url: 'https://swiftinvoice.p.rapidapi.com/GenerateInvoice',
headers: {
'content-type': 'application/json',
'X-RapidAPI-Key': 'YOUR_RAPIDAPI_KEY', // Get it at rapidapi.com
'X-RapidAPI-Host': 'swiftinvoice.p.rapidapi.com'
},
data: {
// Document Info
InvoiceNumber: "2026-001",
Language: "pt-BR", // Supports pt-BR, en-US, es-ES
Currency: "BRL",
IssueDate: new Date().toISOString(),
DueDate: "2026-04-15T00:00:00Z",
Template: "blue", // Design theme
IsDraft: false,
// Sender Info
SenderName: "Your Company Name",
SenderCity: "Rio de Janeiro",
SenderDocument: "00.000.000/0001-00", // CNPJ/CPF
LogoUrl: "https://yourlink.com/logo.png",
// Recipient Info
RecipientName: "Client XYZ",
RecipientAddress: "Main Street, 123",
CustomerEmail: "client@email.com",
// Items & Billing
Items: [
{ Description: "Software Development", Quantity: 1, UnitPrice: 1500.00 },
{ Description: "Cloud Maintenance", Quantity: 1, UnitPrice: 50.00 }
],
TaxRate: 0,
DiscountAmount: 0,
// Payment & PIX
PixKey: "your-pix-key@provider.com", // Native QR Code generation
BankName: "Banco do Brasil",
Agency: "0001",
AccountNumber: "12345-6"
},
responseType: 'arraybuffer'
};
try {
const response = await axios.request(options);
fs.writeFileSync('invoice.pdf', response.data);
console.log('✅ PDF successfully generated: invoice.pdf');
} catch (error) {
console.error('❌ Error details:', error.response ? error.response.data.toString() : error.message);
}
};
generateInvoice();
Atualização: Acabei de lançar um repositório com exemplos completos de código em C#, Node.js, Python, PHP e Go! Confira aqui.
Disponibilizei um plano gratuito no RapidAPI para quem quiser testar em dev ou para projetos de baixo volume.
Link para o Playground e Documentação: https://rapidapi.com/limaandreasantos/api/swiftinvoice
Espero que o script ajude a poupar algumas horas de código de alguém hoje! Se tiverem sugestões de campos novos ou melhorias no layout, comentem aqui.