Ir para o conteúdo do rodapé
GUIAS DE MIGRAçãO

Como migrar do SDK GdPicture.NET para o IronPDF em C#

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 enumeração GdPictureStatus e páginas indexadas a partir de 1 parecem antiquados em comparação com as convenções contemporâneas do C#.

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

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

  7. Dependência de versão: O namespace GdPicture14 inclui o número da versão, fazendo com que as atualizações de versão principal exijam alterações 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

Aspecto SDK GdPicture .NET IronPDF
Foco Pacote de software para digitalização de documentos (exagerado para PDF) Biblioteca específica para PDF
Preços Plano empresarial de US$ 2.999 a US$ 10.000+ Competitivo, escalável conforme o negócio avança.
Estilo API Códigos de status, gerenciamento manual Exceções, IDisposable, .NET moderno
Curva de Aprendizagem Íngreme (conceitos do SDK de imagem) Simples (familiarizado com HTML/CSS)
Renderização HTML Motor básico interno Última versão do Chromium com CSS3/JS
Indexação de páginas 1-indexado Indexado a partir de 0 (padrão .NET)
Segurança da rosca Sincronização manual necessária Projetado para ser seguro contra roscas.
Espaço de nomes Versão específica (GdPicture14) Estável (IronPdf)

Para equipes que planejam a adoção do .NET 10 e do C# 14 até 2025 e 2026, o IronPDF oferece uma base preparada para o futuro, alinhada aos padrões e convenções modernos do .NET .


Avaliação da Complexidade da Migração

Esforço estimado por funcionalidade

Recurso Complexidade da Migração
HTML para PDF Baixo
URL para PDF Baixo
Mesclar PDFs Baixo
Dividir PDFs Baixo
Marcas d'água Baixo
Extração de texto Baixo
Proteção por senha Médio
Campos do formulário Médio
Assinaturas digitais Médio-Alto
OCR Alto
Reconhecimento de código de barras N / D

Matriz de Decisão de Migração

Sua situação Recomendação
operações exclusivas em PDF Migrar — simplificação significativa e redução de custos
Uso intensivo de OCR Considere o IronOCR como produto complementar.
Necessidades de código de barras/leitura Mantenha o SDK .NET do GdPicture para essas funcionalidades e use o IronPDF para PDFs.
Imagem completa do documento Avalie se você realmente utiliza todos os recursos.

Antes de começar

Pré-requisitos

  1. Versão do .NET : O IronPDF é compatível com o .NET Framework 4.6.2+ e .NET Core 2.0+ / .NET 5/6/7/8/9+
  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" .
# 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
# 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");
// Must be called before any SDK GdPicture .NET operations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY");
' Must be called before any SDK GdPicture .NET operations
LicenseManager.RegisterKEY("YOUR-GDPICTURE-LICENSE-KEY")
$vbLabelText   $csharpLabel

Após (IronPDF):

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

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";

// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"

' Or in appsettings.json:
' { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
$vbLabelText   $csharpLabel

Etapa 2: Atualizar importações de namespace

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

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
// Before (GdPicture.NET SDK)
using GdPicture14;

// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
Imports IronPdf
Imports IronPdf.Editing
$vbLabelText   $csharpLabel

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("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}");
    }
}
using GdPicture14;

LicenseManager.RegisterKEY("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}");
    }
}
Imports GdPicture14

LicenseManager.RegisterKEY("LICENSE-KEY")

Using converter As New GdPictureDocumentConverter()
    Dim status As GdPictureStatus = converter.LoadFromHTMLString("<h1>Hello World</h1>")

    If status = GdPictureStatus.OK Then
        status = converter.SaveAsPDF("output.pdf")

        If status <> GdPictureStatus.OK Then
            Console.WriteLine($"Error: {status}")
        End If
    Else
        Console.WriteLine($"Load error: {status}")
    End If
End Using
$vbLabelText   $csharpLabel

Após (IronPDF):

using IronPdf;

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

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

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

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

IronPdf.License.LicenseKey = "LICENSE-KEY"

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

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 .NET IronPDF
GdPicture14 IronPdf
GdPicture14.PDF IronPdf
GdPicture14.Imaging N / D (não necessário)

Mapeamento de Classes Principais

SDK GdPicture .NET IronPDF Descrição
GdPicturePDF PdfDocument Classe principal de documentos PDF
GdPictureDocumentConverter ChromePdfRenderer Conversão de HTML/URL para PDF
LicenseManager IronPdf.License Gestão de licenças
GdPictureStatus Exceções Tratamento de erros

Métodos de carregamento de documentos

SDK GdPicture .NET IronPDF
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 .NET IronPDF
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 .NET IronPDF
pdf1.MergePages(pdf2) PdfDocument.Merge(pdf1, pdf2)
pdf.ExtractPages(start, end) pdf.CopyPages(indices)

Operações de marca d'água

SDK GdPicture .NET IronPDF
pdf.DrawText(...) loop 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");
            }
        }
    }
}
// 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");
            }
        }
    }
}
Imports GdPicture14
Imports System

Class Program
    Shared Sub Main()
        Using converter As New GdPictureDocumentConverter()
            Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
            Dim status As GdPictureStatus = converter.LoadFromHTMLString(htmlContent)

            If status = GdPictureStatus.OK Then
                converter.SaveAsPDF("output.pdf")
            End If
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

O ChromePdfRenderer do IronPDF usa um mecanismo Chromium moderno para renderização precisa de HTML/CSS, eliminando a necessidade de verificação de 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");
        }
    }
}
// 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");
        }
    }
}
Imports GdPicture14
Imports System

Class Program
    Shared Sub Main()
        Using pdf1 As New GdPicturePDF(), pdf2 As New GdPicturePDF()
            pdf1.LoadFromFile("document1.pdf", False)
            pdf2.LoadFromFile("document2.pdf", False)

            pdf1.MergePages(pdf2)
            pdf1.SaveToFile("merged.pdf")
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports System.Collections.Generic

Class Program
    Shared Sub Main()
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")

        Dim merged = PdfDocument.Merge(New List(Of PdfDocument) From {pdf1, pdf2})
        merged.SaveAs("merged.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

O método estático Merge do IronPDF aceita uma lista de documentos, facilitando a combinação de vários 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");
        }
    }
}
// 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");
        }
    }
}
Imports GdPicture14
Imports System
Imports System.Drawing

Module Program
    Sub Main()
        Using pdf As New GdPicturePDF()
            pdf.LoadFromFile("input.pdf", False)

            For i As Integer = 1 To pdf.GetPageCount()
                pdf.SelectPage(i)
                pdf.SetTextColor(Color.Red)
                pdf.SetTextSize(48)
                pdf.DrawText("CONFIDENTIAL", 200, 400)
            Next

            pdf.SaveToFile("watermarked.pdf")
        End Using
    End Sub
End Module
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports IronPdf.Editing

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("input.pdf")

        pdf.ApplyWatermark("<h1 style='color:red;'>CONFIDENTIAL</h1>", 50, VerticalAlignment.Middle, HorizontalAlignment.Center)

        pdf.SaveAs("watermarked.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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 usa estilos 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("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
            );
        }
    }
}
using GdPicture14;

class Program
{
    static void Main()
    {
        LicenseManager.RegisterKEY("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
            );
        }
    }
}
Imports GdPicture14

Class Program
    Shared Sub Main()
        LicenseManager.RegisterKEY("LICENSE-KEY")

        Using pdf As New GdPicturePDF()
            Dim status As GdPictureStatus = pdf.LoadFromFile("document.pdf", False)

            If status <> GdPictureStatus.OK Then 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
            )
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
    }
}
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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim 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")
    End Sub
End Class
$vbLabelText   $csharpLabel

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
}
// 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
}
' GdPicture.NET SDK: 1-indexed pages
For i As Integer = 1 To pdf.GetPageCount()
    pdf.SelectPage(i)
    ' process page
Next

' IronPDF: 0-indexed pages (standard .NET)
For i As Integer = 0 To pdf.PageCount - 1
    Dim page = pdf.Pages(i)
    ' process page
Next
$vbLabelText   $csharpLabel

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}");
}
// 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}");
}
' GdPicture.NET SDK
Dim status As GdPictureStatus = converter.LoadFromHTMLString(html)
If status <> GdPictureStatus.OK Then
    Console.WriteLine($"Error: {status}")
    Return
End If

' IronPDF
Try
    Dim pdf = renderer.RenderHtmlAsPdf(html)
    pdf.SaveAs("output.pdf")
Catch ex As Exception
    Console.WriteLine($"Error: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

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;
// 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;
' 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
$vbLabelText   $csharpLabel

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 é thread-safe por design, simplificando a geração de PDFs multithread.


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;
}
// 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;
}
Imports System

Public Class PdfService
    Private Shared ReadOnly _renderer As New ChromePdfRenderer()

    Public Function Generate(html As String) As Byte()
        Return _renderer.RenderHtmlAsPdf(html).BinaryData
    End Function

    ' BAD - Creates new instance each time
    Public Function GenerateBad(html As String) As Byte()
        Dim renderer As New ChromePdfRenderer() ' Wasteful
        Return renderer.RenderHtmlAsPdf(html).BinaryData
    End Function
End Class
$vbLabelText   $csharpLabel

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
// Use using statements for automatic cleanup
using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    string text = pdf.ExtractAllText();
}  // pdf is disposed automatically
Imports PdfDocument

' Use Using blocks for automatic cleanup
Using pdf = PdfDocument.FromFile("large.pdf")
    Dim text As String = pdf.ExtractAllText()
End Using ' pdf is disposed automatically
$vbLabelText   $csharpLabel

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 vs OCR vs 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

  • Remover pacotes NuGet do SDK .NET do GdPicture: dotnet remove package GdPicture.NET
  • Instale o pacote NuGet IronPDF : dotnet add package IronPdf
  • Atualizar 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.

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 ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim