IRONSOFTWAREHOME
VÍDEOS

Como proteger arquivos PDF com senhas e permissões em C#

Curtis Chau
Curtis Chau
Updated: 19 de julho de 2026

A migração do Gotemburgo para o IronPDF transforma seu fluxo de trabalho de PDF .NET , passando de uma arquitetura de microsserviços baseada em Docker com chamadas de API HTTP para uma biblioteca C# nativa integrada ao processo. Este guia fornece um caminho de migração abrangente, passo a passo, que elimina a sobrecarga de infraestrutura, a latência de rede e a complexidade do gerenciamento de contêineres para desenvolvedores .NET profissionais.

Por que migrar do Gotemburgo para o IronPDF?

O Problema Arquitetônico de Gotemburgo

Gotenberg é uma arquitetura de microsserviços baseada em Docker para geração de PDFs. Embora seja poderoso e flexível, introduz uma complexidade significativa para aplicações C#:

  1. Sobrecarga de infraestrutura: Requer Docker, orquestração de contêineres (Kubernetes/Docker Compose), descoberta de serviços e balanceamento de carga. Cada implementação se torna mais complexa.

  2. Latência de rede: Cada operação com PDF requer uma chamada HTTP para um serviço separado, adicionando 10 a 100 ms ou mais por solicitação. Essa latência aumenta rapidamente em cenários de alto volume.

  3. Problemas de inicialização a frio: A inicialização do contêiner pode adicionar de 2 a 5 segundos às primeiras solicitações. Cada reinicialização de pod, cada evento de escalonamento e cada implantação aciona inicializações a frio.

  4. Complexidade operacional: você precisa gerenciar a integridade, o escalonamento, o registro e o monitoramento dos contêineres como preocupações separadas da sua aplicação principal.

  5. Dados de formulário multipart: Cada solicitação exige a construção de payloads multipart/form-data — verbosos, propensos a erros e tediosos de manter.

  6. Pontos de Falha: Tempo limite de rede, indisponibilidade do serviço e falhas de contêineres são de sua responsabilidade.

  7. Gerenciamento de versões: as imagens do Gotemburgo são atualizadas separadamente do seu aplicativo; Alterações na API podem interromper integrações inesperadamente.

Comparação entre Gotemburgo e IronPDF

AspectoGotemburgoIronPDF
ImplantaçãoContêiner Docker + orquestraçãoPacote NuGet único
ArquiteturaMicrosserviço (API REST)Biblioteca em processo
Latência por solicitação10-100ms+ (tempo de ida e volta na rede)sobrecarga < 1 ms
Partida a frio2-5 segundos (inicialização do contêiner)1-2 segundos (apenas na primeira renderização)
InfraestruturaDocker, Kubernetes, balanceadores de cargaNenhuma exigência
Modos de falhaFalhas de rede, contêiner e serviçoExceções padrão do .NET
Estilo APIREST multipart/form-dataChamadas de métodos nativos em C#
EscalaHorizontal (mais recipientes)Vertical (em processo)
DepuraçãoRastreamento distribuído necessárioDepurador padrão
Controle de versãoEtiquetas de imagem do contêinerversões do pacote NuGet

Para equipes visando versões atuais do .NET, o IronPDF fornece uma base com zero dependências de infraestrutura que se integra nativamente com padrões .NET modernos.


Avaliação da Complexidade da Migração

Esforço estimado por funcionalidade

RecursoComplexidade da Migração
HTML para PDFMuito baixo
URL para PDFMuito baixo
Tamanho de papel personalizadoBaixo
MargensBaixo
Fusão de PDFsBaixo
Cabeçalhos/RodapésMédio
Atrasos de esperaBaixo
Conversão de PDF/ABaixo

Mudança de paradigma

A mudança fundamental nesta migração de Gotemburgo reside na transição de chamadas à API HTTP com dados de formulário multipart para chamadas a métodos nativos em C#:

Gotenberg: HTTP POST multipart/form-data para contêiner Docker
IronPDF: Chamadas diretas de métodos em objetos C#
Text

Antes de começar

Pré-requisitos

  1. Versão do .NET : O IronPDF é compatível com o .NET Framework 4.6.2+ e o .NET Core 3.1+ / .NET 5/6/7/8/9+.
  2. Chave de licença: Obtenha sua chave de licença do IronPDF em IronPDF
  3. Planejar a remoção da infraestrutura: Documentar os contêineres Gotemburgo para desativação pós-migração.

Identificar todos os usos de Gotenberg

# Find direct HTTP calls to Gotenberg
grep -r "gotenberg\|/forms/chromium\|/forms/libreoffice\|/forms/pdfengines" --include="*.cs" .

# Find GotenbergSharpApiClient usage
grep -r "GotenbergSharpClient\|Gotenberg.Sharp\|ChromiumRequest" --include="*.cs" .

# Find Docker/Kubernetes Gotemburgo configuration
grep -r "gotenberg/gotenberg\|gotenberg:" --include="*.yml" --include="*.yaml" .
SHELL

Alterações no pacote NuGet

# Remove Gotemburgo client (if using)
dotnet remove package Gotenberg.Sharp.API.Client

# Install IronPDF
dotnet add package IronPdf
SHELL

Migração de Início Rápido

Etapa 1: Atualizar a configuração da licença

Antes (Gotemburgo):

Gotenberg não exige licença, mas requer infraestrutura Docker com URLs de contêineres.

private readonly string _gotenbergUrl = "http://localhost:3000";

Após (IronPDF):

// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Etapa 2: Atualizar importações de namespace

// Before (Gotenberg)
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;

Referência completa da API

Mapeamento de endpoints de Gotemburgo para IronPDF

Rota de GotemburgoEquivalente ao IronPDF
POST /forms/chromium/convert/htmlChromePdfRenderer.RenderHtmlAsPdf()
POST /forms/chromium/convert/urlChromePdfRenderer.RenderUrlAsPdf()
POST /forms/pdfengines/mergePdfDocument.Merge()
POST /forms/pdfengines/convertpdf.SaveAs() com configurações
GET /healthN / D

Mapeamento de parâmetros de formulário para opções de renderização

Parâmetro de GotemburgoPropriedade IronPDFNotas de conversão
paperWidth (polegadas)RenderingOptions.PaperSizeUse enum ou tamanho personalizado
paperHeight (polegadas)RenderingOptions.PaperSizeUse enum ou tamanho personalizado
marginTop (polegadas)RenderingOptions.MarginTopMultiplique por 25,4 para obter mm.
marginBottom (polegadas)RenderingOptions.MarginBottomMultiplique por 25,4 para obter mm.
printBackgroundRenderingOptions.PrintHtmlBackgroundsBooleano
landscapeRenderingOptions.PaperOrientationLandscape enum
waitDelay (por exemplo, "3s")RenderingOptions.WaitFor.RenderDelay(ms)Converter string para milissegundos

Exemplos de migração de código

Exemplo 1: HTML básico para PDF

Antes (Gotemburgo):

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;

class GotenbergExample
{
    static async Task Main()
    {
        var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/html";
        
        using var client = new HttpClient();
        using var content = new MultipartFormDataContent();
        
        var html = "<html><body><h1>Hello from Gotenberg</h1></body></html>";
        content.Add(new StringContent(html), "files", "index.html");
        
        var response = await client.PostAsync(gotenbergUrl, content);
        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
        Console.WriteLine("PDF generated successfully");
    }
}

Após (IronPDF):

// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class IronPdfExample
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        var html = "<html><body><h1>Hello from IronPDF</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF generated successfully");
    }
}

A diferença é substancial: Gotemburgo exige a construção de um HttpClient, compilando MultipartFormDataContent, fazendo um HTTP POST assíncrono para um contêiner Docker em execução e lidando com a resposta do array de bytes.IronPDF reduz isso a três linhas com uma chamada de método ChromePdfRenderer—sem sobrecarga de rede, sem dependência de contêiner, sem complexidade assíncrona. Consulte a documentação de conversão de HTML para PDF para obter opções de renderização adicionais.

Exemplo 2: Conversão de URL para PDF

Antes (Gotemburgo):

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;

class GotenbergUrlToPdf
{
    static async Task Main()
    {
        var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/url";
        
        using var client = new HttpClient();
        using var content = new MultipartFormDataContent();
        
        content.Add(new StringContent("https://example.com"), "url");
        
        var response = await client.PostAsync(gotenbergUrl, content);
        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        
        await File.WriteAllBytesAsync("webpage.pdf", pdfBytes);
        Console.WriteLine("PDF from URL generated successfully");
    }
}

Após (IronPDF):

// NuGet: Install-Package IronPdf
using System;
using IronPdf;

class IronPdfUrlToPdf
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("PDF from URL generated successfully");
    }
}

A abordagem Gotemburgo requer um endpoint diferente (/forms/chromium/convert/url), construindo conteúdo multipart com a URL como campo de formulário e lidando com respostas HTTP assíncronas. O método RenderUrlAsPdf() do IronPDF aceita a URL diretamente e retorna um objeto PdfDocument de maneira síncrona. Saiba mais sobre a conversão de URL para PDF .

Exemplo 3: Tamanho e margens de papel personalizados

Antes (Gotemburgo):

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;

class GotenbergCustomSize
{
    static async Task Main()
    {
        var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/html";
        
        using var client = new HttpClient();
        using var content = new MultipartFormDataContent();
        
        var html = "<html><body><h1>Custom Size PDF</h1></body></html>";
        content.Add(new StringContent(html), "files", "index.html");
        content.Add(new StringContent("8.5"), "paperWidth");
        content.Add(new StringContent("11"), "paperHeight");
        content.Add(new StringContent("0.5"), "marginTop");
        content.Add(new StringContent("0.5"), "marginBottom");
        
        var response = await client.PostAsync(gotenbergUrl, content);
        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        
        await File.WriteAllBytesAsync("custom-size.pdf", pdfBytes);
        Console.WriteLine("Custom size PDF generated successfully");
    }
}

Após (IronPDF):

// NuGet: Install-Package IronPdf
using System;
using IronPdf;
using IronPdf.Rendering;

class IronPdfCustomSize
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.MarginTop = 50;
        renderer.RenderingOptions.MarginBottom = 50;
        
        var html = "<html><body><h1>Custom Size PDF</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        
        pdf.SaveAs("custom-size.pdf");
        Console.WriteLine("Custom size PDF generated successfully");
    }
}

Gotenberg requer parâmetros baseados em string ("8.5", "11", "0.5") adicionados aos dados de formulário multipart—sem segurança de tipo, sem IntelliSense, fácil de digitar errado.IronPDF fornece propriedades fortemente tipadas com enums PdfPaperSize e valores de margem numéricos. Observe que as margens do IronPDF estão em milímetros (50 mm ≈ 2 polegadas), enquanto o Gotemburgo usa polegadas.


Notas críticas sobre migração

Conversões de unidades

A conversão mais importante nesta migração de Gotemburgo são as unidades de margem:

// Gotenberg: margins in inches
content.Add(new StringContent("0.5"), "marginTop");    // 0.5 inches
content.Add(new StringContent("1"), "marginBottom");   // 1 inch

// IronPDF: margins in millimeters
renderer.RenderingOptions.MarginTop = 12.7;    // 0.5 inches × 25.4 = 12.7mm
renderer.RenderingOptions.MarginBottom = 25.4; // 1 inch × 25.4 = 25.4mm

Fórmula de conversão: millimeters = inches × 25.4

Síncrono vs. Assíncrono

Gotenberg requer operações assíncronas devido à comunicação HTTP:

// Gotenberg: Forced async due to network calls
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();

// IronPDF: Synchronous in-process execution
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// IronPDF: Async wrapper if needed
var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(html));

Tratamento de erros

// Gotenberg: HTTP error handling
try
{
    var response = await client.PostAsync(gotenbergUrl, content);
    response.EnsureSuccessStatusCode();  // What if 500? 503? Timeout?
}
catch (HttpRequestException ex) { /* Network error */ }
catch (TaskCanceledException ex) { /* Timeout */ }

// IronPDF: Standard .NET exceptions
try
{
    var pdf = renderer.RenderHtmlAsPdf(html);
}
catch (Exception ex)
{
    Console.WriteLine($"PDF generation failed: {ex.Message}");
}

Remoção de infraestrutura

Após a migração, remova o Gotemburgo da sua infraestrutura:

# REMOVE from docker-compose.yml:
# services:
#   gotenberg:
#     image: gotenberg/gotenberg:8
#     ports:
#       - "3000:3000"
#     deploy:
#       resources:
#         limits:
#           memory: 2G
Text

Considerações sobre o desempenho

Comparação de latência

OperaçãoGotemburgo (Quente)Gotemburgo (Início a Frio)IronPDF(Primeira Renderização)IronPDF(Subsequente)
HTML simples150-300ms2 a 5 segundos1-2 segundos50-150ms
HTML complexo500-1500ms3-7 segundos1,5 a 3 segundos200-800ms
Renderização de URL1-5 segundos3 a 10 segundos1-5 segundos500ms-3s

Eliminação de custos de infraestrutura

RecursoGotemburgoIronPDF
Recipientes necessários1-N (escalonamento)0
Memória por contêiner512 MB - 2 GBN / D
Sobrecarga de rede por solicitação10-100 ms0ms
Pontos finais de verificação de saúdeObrigatórioNão é necessário
balanceador de cargaFrequentemente necessárioNão é necessário

Solução de problemas

Problema 1: Padrões HttpClient não são necessários

Problema: Código ainda usando HttpClient e MultipartFormDataContent.

Solução: Substitua totalmente por ChromePdfRenderer:

// Remove all of this:
// using var client = new HttpClient();
// using var content = new MultipartFormDataContent();
// content.Add(new StringContent(html), "files", "index.html");
// var response = await client.PostAsync(url, content);

// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);

Problema 2: Unidades de margem incorretas

Problema: Os PDFs apresentam margens incorretas após a migração.

Solução: Converter polegadas em milímetros:

// Gotemburgo used inches: "0.5"
//IronPDF uses millimeters: 0.5 × 25.4 = 12.7
renderer.RenderingOptions.MarginTop = 12.7;
C#

Problema 3: Referências de URL do contêiner

Problema: Código contém http://gotenberg:3000 ou URLs semelhantes.

Solução: Remova todas as referências de URL do contêiner — o IronPDF é executado no mesmo processo:

// Remove:
// private readonly string _gotenbergUrl = "http://gotenberg:3000";

//IronPDF needs no URL - it's in-process
var renderer = new ChromePdfRenderer();

Lista de verificação para migração

Pré-migração

  • Inventariar todas as chamadas HTTP de Gotemburgo no código-fonte.
  • Documentar a configuração atual do Gotemburgo (tempos limite, margens, tamanhos de papel)
  • Identificar todas as configurações do Docker/Kubernetes no Gotenberg
  • Obtenha a chave de licença do IronPDF
  • Planejar o descomissionamento da infraestrutura

Migração de código

  • Instale o pacote NuGet do IronPDF: dotnet add package IronPdf
  • Remover pacotes de cliente Gotenberg
  • Substitua todas as chamadas HTTP para Gotemburgo por chamadas de método do IronPDF.
  • Converter unidades de margem de polegadas para milímetros
  • Atualizar o tratamento de erros (erros HTTP → exceções .NET )
  • Adicionar inicialização da chave de licença na inicialização do sistema

Migração de infraestrutura

  • Remover Gotemburgo do Docker Compose / Kubernetes
  • Atualizar pipelines de CI/CD (remover pulls de imagens do Gotenberg)
  • Remover verificações de saúde de Gotenberg
  • Remover URL de Gotemburgo da configuração

Testando

  • Teste de conversão de HTML para PDF
  • Teste de conversão de URL para PDF
  • Verificar a margem e a precisão das dimensões
  • Teste de desempenho sob carga
  • Tempo de aquecimento da primeira renderização de teste

Pós-migração

  • Remover implantações de contêineres Gotenberg
  • Arquivo de configuração do Gotenberg
  • Atualizar documentação
  • Monitorar o uso de memória do aplicativo
  • Verifique se não há conexões de rede órfãs

Observe: Gotenberg é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado por Gotenberg. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.
Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.