Executando verificação de segurança...
1

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:
Invoice PIX

Invoice USD

Invoice EUR

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.

Carregando publicação patrocinada...