IRONSOFTWAREHOME
VÍDEOS

Como definir e editar metadados de PDF em C#

Curtis Chau
Curtis Chau
Updated: 19 de julho de 2026

A migração do SDK .NET do GdPicture para o IronPDF oferece aos desenvolvedores .NET uma abordagem focada e simplificada para a geração de PDFs. Este guia fornece um caminho de migração abrangente, passo a passo, que substitui os padrões complexos do SDK de imagens de documentos por APIs modernas e específicas para PDF, projetadas para o desenvolvimento .NET contemporâneo.

Por que migrar do SDK .NET do GdPicture para o IronPDF?

Os desafios do SDK GdPicture .NET

O SDK GdPicture .NET (agora renomeado como Nutrient) é um SDK abrangente para processamento de imagens de documentos, que apresenta diversos desafios para o desenvolvimento focado em PDF:

  1. Exagerado para projetos que utilizam apenas PDFs: o SDK GdPicture .NET é um pacote completo de processamento de imagens de documentos, incluindo OCR, reconhecimento de código de barras, digitalização e processamento de imagens. Se você precisa apenas da funcionalidade de PDF, estará pagando por recursos que nunca usará.

  2. Licenciamento complexo: Vários níveis de produto (GdPicture .NET 14, GdPicture.API, Ultimate, Professional) com combinações confusas de SKUs e requisitos de assinatura anual.

  3. Preços para empresas: Os custos de licenciamento começam em US$ 2.999 apenas para o plugin de PDF, podendo chegar a mais de US$ 10.000 para a edição Ultimate. O licenciamento por desenvolvedor adiciona custos adicionais significativos para equipes em crescimento.

  4. Curva de Aprendizagem Íngreme: A API foi projetada em torno de conceitos de processamento de imagens de documentos, e não em padrões modernos do .NET . Métodos como LicenseManager.RegisterKEY(), verificação de enum GdPictureStatus, e páginas indexadas a partir de 1 parecem ultrapassadas em comparação com as convenções contemporâneas de C#.

  5. Padrão de Código de Status: Cada operação retorna um enum GdPictureStatus que deve ser verificado — nenhum exceção é lançada em erros, tornando o tratamento de erros verboso e repetitivo.

  6. Gerenciamento Manual de Recursos: Requer chamadas explícitas de Dispose() ou Release(). O SDK não segue os padrões de descarte padrão do .NET de forma adequada.

  7. Bloqueio de Versão: O namespace GdPicture14 inclui o número da versão, fazendo com que atualizações de versão maior exijam mudanças de namespace em toda a sua base de código.

  8. Confusão com a Rebranding: A recente mudança de marca para "Nutrient" criou uma fragmentação na documentação entre gdpicture.com e nutrient.io, dificultando o suporte e o aprendizado.

Comparação entre o SDK .NET do GdPicture e o IronPDF

AspectoSDK GdPicture .NETIronPDF
FocoPacote de software para digitalização de documentos (exagerado para PDF)Biblioteca específica para PDF
PreçosPlano empresarial de US$ 2.999 a US$ 10.000+Competitivo, escalável conforme o negócio avança.
Estilo APICódigos de status, gerenciamento manualExceções, IDisposable, .NET moderno
Curva de AprendizagemÍngreme (conceitos do SDK de imagem)Simples (familiarizado com HTML/CSS)
Renderização HTMLMotor básico internoÚltima versão do Chromium com CSS3/JS
Indexação de páginas1-indexadoIndexado a partir de 0 (padrão .NET)
Segurança da roscaSincronização manual necessáriaProjetado para ser seguro contra roscas.
Espaço de nomesEspecífico da versão (GdPicture14)Estável (IronPdf)

O IronPDF está alinhado com padrões e convenções modernas do .NET, tornando-o uma adaptação direta para equipes nas versões atuais do .NET.


Avaliação da Complexidade da Migração

Esforço estimado por funcionalidade

RecursoComplexidade da Migração
HTML para PDFBaixo
URL para PDFBaixo
Mesclar PDFsBaixo
Dividir PDFsBaixo
Marcas d'águaBaixo
Extração de textoBaixo
Proteção por senhaMédio
Campos do formulárioMédio
Assinaturas digitaisMédio-Alto
OCRAlto
Reconhecimento de código de barrasN / D

Matriz de Decisão de Migração

Sua situaçãoRecomendação
operações exclusivas em PDFMigrar — simplificação significativa e redução de custos
Uso intensivo deOCRConsidere o IronOCR como produto complementar.
Necessidades de código de barras/leituraMantenha o SDK .NET do GdPicture para essas funcionalidades e use o IronPDF para PDFs.
Imagem completa do documentoAvalie se você realmente utiliza todos os recursos.

Antes de começar

Pré-requisitos

  1. **.NET Version:**IronPDF supports .NET Framework 4.6.2+ and .NET Core 2.0+ / .NET 5+
  2. Chave de licença: Obtenha sua chave de licença do IronPDF em IronPDF
  3. Backup: Crie uma ramificação para o trabalho de migração.

Identificar todas as utilizações do SDK .NET do GdPicture

# Find all SDK GdPicture .NET references in your codebase
grep -r "GdPicture14\|GdPicturePDF\|GdPictureDocumentConverter\|GdPictureStatus\|LicenseManager\.RegisterKEY" --include="*.cs" .

# Find all GdPicture package references
grep -r "GdPicture" --include="*.csproj" .
SHELL

Alterações no pacote NuGet

# Remove SDK GdPicture .NET packages
dotnet remove package GdPicture.NET.14
dotnet remove package GdPicture.NET.14.API
dotnet remove package GdPicture
dotnet remove package GdPicture.API

# Install IronPDF
dotnet add package IronPdf
SHELL

Migração de Início Rápido

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

Antes (SDK GdPicture .NET ):

// Must be called before any SDK GdPicture .NET operations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");

Após (IronPDF):

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

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }

Etapa 2: Atualizar importações de namespace

// Before (GdPicture.NET SDK)
using GdPicture14;

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

Etapa 3: Padrão de Conversão Básico

A mudança mais significativa na migração do SDK .NET do GdPicture é a eliminação do padrão de verificação de status verboso:

Antes (SDK GdPicture .NET ):

using GdPicture14;

LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");

using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
{
    GdPictureStatus status = converter.LoadFromHTMLString("<h1>Hello World</h1>");

    if (status == GdPictureStatus.OK)
    {
        status = converter.SaveAsPDF("output.pdf");

        if (status != GdPictureStatus.OK)
        {
            Console.WriteLine($"Error: {status}");
        }
    }
    else
    {
        Console.WriteLine($"Load error: {status}");
    }
}

Após (IronPDF):

using IronPdf;

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");

Principais diferenças:

  • Sem verificação de status — exceções em caso de erros
  • Não é necessário descarte explícito para o renderizador. API fluente moderna
  • Renderização baseada no Chromium para melhor suporte a HTML/CSS

Referência completa da API

Mapeamento de Namespace

SDK GdPicture .NETIronPDF
GdPicture14IronPdf
GdPicture14.PDFIronPdf
GdPicture14.ImagingN / D (não necessário)

Mapeamento de Classes Principais

SDK GdPicture .NETIronPDFDescrição
GdPicturePDFPdfDocumentClasse principal de documentos PDF
GdPictureDocumentConverterChromePdfRendererConversão de HTML/URL para PDF
LicenseManagerIronPdf.LicenseGestão de licenças
GdPictureStatusExceçõesTratamento de erros

Métodos de carregamento de documentos

SDK GdPicture .NETIronPDF
pdf.LoadFromFile(path, loadInMemory)PdfDocument.FromFile(path)
pdf.LoadFromFile(path, password, loadInMemory)PdfDocument.FromFile(path, password)
converter.LoadFromHTMLString(html)renderer.RenderHtmlAsPdf(html)
converter.LoadFromURL(url)renderer.RenderUrlAsPdf(url)

Operações de página

SDK GdPicture .NETIronPDF
pdf.GetPageCount()pdf.PageCount
pdf.SelectPage(pageNo)pdf.Pages[index]
pdf.GetPageWidth()pdf.Pages[i].Width
pdf.GetPageHeight()pdf.Pages[i].Height

Operações de Fusão e Divisão

SDK GdPicture .NETIronPDF
pdf1.MergePages(pdf2)PdfDocument.Merge(pdf1, pdf2)
pdf.ExtractPages(start, end)pdf.CopyPages(indices)

Operações de marca d'água

SDK GdPicture .NETIronPDF
Laço pdf.DrawText(...)pdf.ApplyWatermark(html)
pdf.SetTextColor(color)Estilização CSS
pdf.SetTextSize(size)Estilização CSS

Exemplos de migração de código

Exemplo 1: Conversão de HTML para PDF

Antes (SDK GdPicture .NET ):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;

class Program
{
    static void Main()
    {
        using (GdPictureDocumentConverter converter = new GdPictureDocumentConverter())
        {
            string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
            GdPictureStatus status = converter.LoadFromHTMLString(htmlContent);
            
            if (status == GdPictureStatus.OK)
            {
                converter.SaveAsPDF("output.pdf");
            }
        }
    }
}

Após (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
    }
}

O ChromePdfRenderer do IronPDF usa um motor moderno do Chromium para renderização precisa de HTML/CSS, eliminando a necessidade de verificação do código de status. Para obter mais opções de renderização HTML, consulte a documentação de HTML para PDF .

Exemplo 2: Mesclar vários PDFs

Antes (SDK GdPicture .NET ):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;

class Program
{
    static void Main()
    {
        using (GdPicturePDF pdf1 = new GdPicturePDF())
        using (GdPicturePDF pdf2 = new GdPicturePDF())
        {
            pdf1.LoadFromFile("document1.pdf", false);
            pdf2.LoadFromFile("document2.pdf", false);
            
            pdf1.MergePages(pdf2);
            pdf1.SaveToFile("merged.pdf");
        }
    }
}

Após (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        
        var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
        merged.SaveAs("merged.pdf");
    }
}

O método estático Merge do IronPDF aceita uma lista de documentos, facilitando a combinação de múltiplos PDFs em uma única operação. Saiba mais sobre como mesclar e dividir PDFs .

Exemplo 3: Adicionar marca d'água a todas as páginas

Antes (SDK GdPicture .NET ):

// NuGet: Install-Package GdPicture.NET
using GdPicture14;
using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        using (GdPicturePDF pdf = new GdPicturePDF())
        {
            pdf.LoadFromFile("input.pdf", false);
            
            for (int i = 1; i <= pdf.GetPageCount(); i++)
            {
                pdf.SelectPage(i);
                pdf.SetTextColor(Color.Red);
                pdf.SetTextSize(48);
                pdf.DrawText("CONFIDENTIAL", 200, 400);
            }
            
            pdf.SaveToFile("watermarked.pdf");
        }
    }
}

Após (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        
        pdf.ApplyWatermark("<h1 style='color:red;'>CONFIDENTIAL</h1>", 50, VerticalAlignment.Middle, HorizontalAlignment.Center);
        
        pdf.SaveAs("watermarked.pdf");
    }
}

A migração do SDK GdPicture .NET , da renderização de texto baseada em coordenadas para a marcação d'água baseada em HTML, simplifica significativamente o código. O método ApplyWatermark do IronPDF utiliza estilo HTML/CSS, eliminando a necessidade de iteração manual de páginas e cálculos de coordenadas. Consulte a documentação completa sobre marca d'água para obter opções adicionais.

Exemplo 4: Proteção e segurança por senha

Antes (SDK GdPicture .NET ):

using GdPicture14;

class Program
{
    static void Main()
    {
        LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");

        using (GdPicturePDF pdf = new GdPicturePDF())
        {
            GdPictureStatus status = pdf.LoadFromFile("document.pdf", false);

            if (status != GdPictureStatus.OK) return;

            // Save with encryption - many boolean parameters
            status = pdf.SaveToFile(
                "protected.pdf",
                PdfEncryption.PdfEncryption256BitAES,
                "user123",      // User password
                "owner456",     // Owner password
                true,           // Can print
                false,          // Cannot copy
                false,          // Cannot modify
                false,          // Cannot add notes
                true,           // Can fill forms
                false,          // Cannot extract
                false,          // Cannot assemble
                true            // Can print high quality
            );
        }
    }
}

Após (IronPDF):

using IronPdf;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("document.pdf");

        // Configure security settings with clear property names
        pdf.SecuritySettings.OwnerPassword = "owner456";
        pdf.SecuritySettings.UserPassword = "user123";

        // Set permissions
        pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;
        pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
        pdf.SecuritySettings.AllowUserAnnotations = false;
        pdf.SecuritySettings.AllowUserFormData = true;

        pdf.SaveAs("protected.pdf");
    }
}

A propriedade SecuritySettings do IronPDF fornece propriedades nomeadas e autodescritivas em vez de parâmetros booleanos posicionais.


Notas críticas sobre migração

Conversão de indexação de páginas

Uma das mudanças mais importantes nesta migração do SDK .NET do GdPicture é a diferença na indexação de páginas:

// GdPicture.NET SDK: 1-indexado pages
for (int i = 1; i <= pdf.GetPageCount(); i++)
{
    pdf.SelectPage(i);
    // process page
}

// IronPDF: 0-indexed pages (standard .NET)
for (int i = 0; i < pdf.PageCount; i++)
{
    var page = pdf.Pages[i];
    // process page
}

Códigos de status para exceções

Substitua a verificação de status detalhada por um bloco try-catch padrão:

// GdPicture.NET SDK
GdPictureStatus status = converter.LoadFromHTMLString(html);
if (status != GdPictureStatus.OK)
{
    Console.WriteLine($"Error: {status}");
    return;
}

// IronPDF
try
{
    var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}

Conversão de unidades

O SDK GdPicture .NET usa polegadas para as margens; O IronPDF usa milímetros:

// GdPicture.NET SDK: 0.5 inches margin
converter.HtmlSetMargins(0.5f, 0.5f, 0.5f, 0.5f);

// IronPDF: 0.5 inches = 12.7 mm
renderer.RenderingOptions.MarginTop = 12.7;
renderer.RenderingOptions.MarginBottom = 12.7;
renderer.RenderingOptions.MarginLeft = 12.7;
renderer.RenderingOptions.MarginRight = 12.7;

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

Segurança da rosca

O SDK GdPicture .NET requer sincronização manual para operações simultâneas. O ChromePdfRenderer do IronPDF é seguro para threads por design, simplificando a geração de PDFs em multithreading.


Considerações sobre o desempenho

Reutilize o ChromePdfRenderer

Para um desempenho ideal, reutilize a instância do renderizador:

// GOOD - Reuse renderer (thread-safe)
public class PdfService
{
    private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

    public byte[] Generate(string html) => _renderer.RenderHtmlAsPdf(html).BinaryData;
}

// BAD - Creates new instance each time
public byte[] GenerateBad(string html)
{
    var renderer = new ChromePdfRenderer();  // Wasteful
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

Descarte adequado de recursos

// Use using statements for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf is disposed automatically

Lista de verificação para migração

Pré-migração

  • Inventariar todo o uso do SDK .NET do GdPicture na base de código.
  • Identificar quais recursos são realmente usados ​​(PDF vsOCRvs código de barras)
  • Determine se são necessárias funcionalidades de OCR/código de barras (considere IronOCR/IronBarcode)
  • Analise o licenciamento atual e compare com os preços do IronPDF.
  • Obtenha a chave de licença do IronPDF
  • Criar branch de migração no controle de versão

Migração de código

  • Remova os pacotes NuGet do SDK GdPicture.NET: dotnet remove package GdPicture.NET
  • Instale o pacote NuGet do IronPDF: dotnet add package IronPdf
  • Atualize as importações de namespace (GdPicture14IronPdf)
  • Substitua LicenseManager.RegisterKEY() por IronPdf.License.LicenseKey
  • Converter verificações de código de status em blocos try-catch
  • Atualizar indexação da página (indexada em 1 → indexada em 0)
  • Substitua GdPicturePDF por PdfDocument
  • Substitua GdPictureDocumentConverter por ChromePdfRenderer
  • Converter texto baseado em coordenadas em carimbo HTML
  • Atualizar conversões de unidades (polegadas → milímetros)

Testando

  • Realizar testes unitários em todos os caminhos de geração de PDFs.
  • Verificar se a qualidade da renderização HTML corresponde ou excede os padrões.
  • Testar todos os cenários de segurança/criptografia
  • Verificar a funcionalidade de preenchimento de formulários
  • Testar operações de mesclagem/divisão
  • Validar a aparência da marca d'água
  • Caminhos críticos de benchmark de desempenho

Pós-migração

  • Remover arquivos/chaves de licença do SDK .NET do GdPicture
  • Atualizar documentação
  • Treinar a equipe nos padrões da API IronPDF
  • Monitorar a produção para identificar quaisquer problemas.

Observe: GdPicture.NET e Nutrient são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado por Nutrient, ORPALIS, ou PSPDFKit. 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.