IRONSOFTWAREHOME
VÍDEOS

Como achatar imagens PDF em C# com IronPDF

Curtis Chau
Curtis Chau
Updated: 19 de julho de 2026

A migração doGnostice PDFOnepara o IronPDF transforma seu fluxo de trabalho de PDF em .NET , passando de uma abordagem baseada em coordenadas e fragmentada por plataforma para uma solução unificada, baseada em HTML/CSS, com suporte completo aos padrões modernos da web. Este guia fornece um caminho de migração abrangente, passo a passo, que elimina as limitações documentadas relacionadas a CSS, JavaScript e estabilidade de memória para desenvolvedores .NET profissionais.

Por que migrar doGnostice PDFOnepara o IronPDF?

Os Desafios do Gnostice PDFOne

Gnostice PDFOne e Document Studio .NET têm limitações bem documentadas que afetam aplicativos de produção. O pacote NuGet legada PDFOne.NET também está agora descontinuado (último lançamento 24.1.60, 1 de julho de 2024), com o fornecedor direcionando novos trabalhos para os pacotes Gnostice.DocumentStudio.*:

  1. Sem suporte a CSS externo: A documentação doGnostice PDFOneafirma explicitamente que não oferece suporte a folhas de estilo CSS externas — um requisito fundamental para a conversão moderna de web para PDF.

  2. Sem execução de JavaScript : Conteúdo dinâmico que requer JavaScript não pode ser renderizado, tornando impossível a conversão precisa de aplicações web modernas.

  3. Sem conversão direta de HTML para PDF: OGnostice PDFOnenão possui conversão direta de HTML para PDF. Você precisa usar o Document Studio para conversão em HTML ou analisar e renderizar manualmente os elementos HTML — o que representa uma sobrecarga de desenvolvimento significativa.

  4. Fragmentação da plataforma: Produtos separados para WinForms, WPF, ASP.NET e Xamarin — cada um com diferentes conjuntos de recursos e APIs. Você pode precisar de várias licenças e bases de código.

  5. Vazamentos de memória e estabilidade: Fóruns de usuários e o Stack Overflow relatam vazamentos de memória persistentes, erro JPEG nº 53 e exceções do StackOverflow ao processar imagens.

  6. Sem Unicode da direita para a esquerda: Árabe, hebraico e outros idiomas da direita para a esquerda não são suportados explicitamente — um fator decisivo para aplicações internacionais.

  7. Suporte limitado para assinaturas digitais: Historicamente, as assinaturas digitais têm estado ausentes ou pouco confiáveis ​​no Gnostice PDFOne.

  8. API baseada em coordenadas: Muitas operações exigem posicionamento manual em X/Y em vez de abordagens de layout modernas, necessitando de cálculos precisos para a colocação de cada elemento.

Comparação deGnostice PDFOnevs IronPDF

AspectoGnostice PDFOneIronPDF
CSS externoNão suportadoApoiado
Execução de JavaScriptNão suportadoMotor totalmente cromado
Línguas da direita para a esquerdaNão suportadoSuporte completo a Unicode
Assinaturas digitaisLimitado/AusenteSuporte completo para X509
PlataformaProdutos fragmentadosBiblioteca única e unificada
Estabilidade da memóriaProblemas relatadosEstável e bem administrado.
HTML para PDFBásico, requer soluções alternativas.Renderização com qualidade Chrome
Curva de AprendizagemAPI complexaAPI simples e intuitiva
CSS moderno (Flexbox, Grid)Não suportadoSuporte completo a CSS3
Manipulação de ImagensProblemas conhecidosConfiável

Para equipes planejando adoção do .NET 10 e C# 14, o IronPDF oferece uma biblioteca unificada que funciona consistentemente em todas as plataformas .NET.


Avaliação da Complexidade da Migração

Esforço estimado por funcionalidade

RecursoComplexidade da Migração
Carregar/Salvar PDFsMuito baixo
Mesclar PDFsMuito baixo
Dividir PDFsBaixo
Extração de textoBaixo
Marcas d'águaBaixo
Cabeçalhos/RodapésBaixo
HTML para PDFBaixo
CriptografiaMédio
Campos do formulárioMédio
Assinaturas digitaisBaixo

Funcionalidades que você ganha

Ao migrar doGnostice PDFOnepara o IronPDF, estas funcionalidades antes impossíveis tornam-se disponíveis:

  • Folhas de estilo CSS externas
  • Execução de JavaScript
  • Suporte a idiomas da direita para a esquerda (árabe, hebraico)
  • CSS Grid e Flexbox
  • Assinaturas digitais confiáveis
  • Melhor gerenciamento de memória
  • Suporte multiplataforma com uma única base de código

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 todo o uso do Gnostice PDFOne

# Find all Gnostice references
grep -r "Gnostice\|PDFOne\|PDFDocument\|PDFPage\|DocExporter" --include="*.cs" .

# Find package references
grep -r "Gnostice\|PDFOne" --include="*.csproj" .
SHELL

Alterações no pacote NuGet

# Remove Gnostice packages (PDFOne.NET is the legacy, deprecated package)
dotnet remove package PDFOne.NET
dotnet remove package Gnostice.DocumentStudio.WinForms
dotnet remove package Gnostice.DocumentStudio.WPF
dotnet remove package Gnostice.DocumentStudio.ASP
dotnet remove package Gnostice.DocumentStudio.ASP.Core
dotnet remove package Gnostice.DocumentStudio.Xamarin

# Install IronPDF
dotnet add package IronPdf
SHELL

Migração de Início Rápido

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

Antes (Gnostice PDFOne):

//Gnostice PDFOnelicense is set via the static PDFOne class
Gnostice.PDFOne.PDFOne.LicenseKey = "YOUR-GNOSTICE-LICENSE";
C#

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" }

Etapa 2: Atualizar importações de namespace

// Before (Gnostice PDFOne)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Document;
using Gnostice.PDFOne.Graphics;

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

Referência completa da API

Mapeamento de Classes Principais

Gnostice PDFOneIronPDFDescrição
PDFDocumentPdfDocumentClasse principal de documentos PDF
PDFPagePdfDocument.Pages[i]Representação da página
PDFFontEstilização CSSEspecificação da fonte
PDFTextElementConteúdo HTMLConteúdo do texto
PDFImageElementtags HTML <img>Conteúdo da imagem
DocExporterChromePdfRendererConversão de HTML/URL para PDF

Operações de Documentos

Gnostice PDFOneIronPDF
new PDFDocument()new PdfDocument()
doc.Load(path)PdfDocument.FromFile(path)
doc.Open()N/A (automático)
doc.Save(path)pdf.SaveAs(path)
doc.Close()pdf.Dispose()
doc.Pages.Countpdf.PageCount
doc.Pages.Add()Renderizar HTML ou mesclar

Operações de Fusão

Gnostice PDFOneIronPDF
doc.Append(otherDoc)PdfDocument.Merge(pdf1, pdf2)
Múltiplas chamadas Append()PdfDocument.Merge(list)

Exemplos de migração de código

Exemplo 1: Conversão de HTML para PDF

Antes (Gnostice PDFOne):

// NuGet: Install-Package PDFOne.NET (deprecated; vendor recommends Gnostice.DocumentStudio.WinForms)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Graphics;
using System;

class Program
{
    static void Main()
    {
        PDFDocument doc = new PDFDocument();
        doc.Open();
        
        PDFPage page = doc.Pages.Add();
        
        // PDFOne doesn't have direct HTML para PDF conversion
        // You need to use Document Studio for HTML conversion
        // Or manually parse and render HTML elements
        
        PDFTextElement textElement = new PDFTextElement();
        textElement.Text = "Simple text conversion instead of HTML";
        textElement.Draw(page, 10, 10);
        
        doc.Save("output.pdf");
        doc.Close();
    }
}
C#

Após (IronPDF):

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

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

A diferença é substancial: oGnostice PDFOnenão consegue converter HTML diretamente para PDF — você precisa criar manualmente os elementos de texto e posicioná-los com coordenadas. O ChromePdfRenderer do IronPDF fornece renderização direta de HTML com suporte completo a CSS3 e JavaScript. Consulte a documentação de conversão de HTML para PDF para obter mais opções de renderização.

Exemplo 2: Mesclar arquivos PDF

Antes (Gnostice PDFOne):

// NuGet: Install-Package PDFOne.NET (deprecated; vendor recommends Gnostice.DocumentStudio.WinForms)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Document;
using System;

class Program
{
    static void Main()
    {
        PDFDocument doc1 = new PDFDocument();
        doc1.Load("document1.pdf");
        
        PDFDocument doc2 = new PDFDocument();
        doc2.Load("document2.pdf");
        
        PDFDocument mergedDoc = new PDFDocument();
        mergedDoc.Open();
        
        mergedDoc.Append(doc1);
        mergedDoc.Append(doc2);
        
        mergedDoc.Save("merged.pdf");
        
        doc1.Close();
        doc2.Close();
        mergedDoc.Close();
    }
}
C#

Após (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
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(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}

A abordagemGnostice PDFOneexige a criação de um novo documento, sua abertura, o carregamento dos documentos de origem separadamente, o acréscimo de cada um deles e o fechamento manual dos três documentos. O método estático Merge do IronPDF lida com isso em três linhas com o gerenciamento adequado de recursos. Saiba mais sobre como mesclar e dividir PDFs .

Exemplo 3: Adicionar marca d'água ao PDF

Antes (Gnostice PDFOne):

// NuGet: Install-Package PDFOne.NET (deprecated; vendor recommends Gnostice.DocumentStudio.WinForms)
using Gnostice.PDFOne;
using Gnostice.PDFOne.Graphics;
using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        PDFDocument doc = new PDFDocument();
        doc.Load("input.pdf");
        
        PDFFont font = new PDFFont(PDFStandardFont.Helvetica, 48);
        
        foreach (PDFPage page in doc.Pages)
        {
            PDFTextElement watermark = new PDFTextElement();
            watermark.Text = "CONFIDENTIAL";
            watermark.Font = font;
            watermark.Color = Color.FromArgb(128, 255, 0, 0);
            watermark.RotationAngle = 45;
            
            watermark.Draw(page, 200, 400);
        }
        
        doc.Save("watermarked.pdf");
        doc.Close();
    }
}
C#

Após (IronPDF):

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

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        
        var watermark = new TextStamper()
        {
            Text = "CONFIDENTIAL",
            FontSize = 48,
            Opacity = 50,
            Rotation = 45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        };
        
        pdf.ApplyStamp(watermark);
        pdf.SaveAs("watermarked.pdf");
    }
}

A abordagem doGnostice PDFOnerequer a criação de objetos PDFFont, a iteração manual pelas páginas, o cálculo de coordenadas (200, 400) e a definição de propriedades em objetos PDFTextElement. O TextStamper do IronPDF fornece configuração declarativa com centralização automática e aplicação de página—não são necessários cálculos de coordenadas. Consulte a documentação sobre marca d'água para obter opções adicionais.


Notas críticas sobre migração

Layout baseado em coordenadas para HTML/CSS

A mudança de paradigma mais significativa nesta migração doGnostice PDFOneé a transição do posicionamento baseado em coordenadas para o layout HTML/CSS:

// Gnostice PDFOne: Manual coordinate positioning
watermark.Draw(page, 200, 400);  // X=200, Y=400

// IronPDF: Declarative alignment
watermark.VerticalAlignment = VerticalAlignment.Middle;
watermark.HorizontalAlignment = HorizontalAlignment.Center;

Objetos de fonte para estilização CSS

// Gnostice PDFOne
PDFFont font = new PDFFont(PDFStandardFont.Helvetica, 48);
watermark.Font = font;

//IronPDF- use CSS in HTML content
var html = "<span style='font-family: Helvetica, Arial, sans-serif; font-size: 48pt;'>Text</span>";

Indexação de páginas

OGnostice PDFOnegeralmente usa páginas indexadas a partir de 1, enquanto o IronPDF usa páginas indexadas a partir de 0 (convenção padrão do .NET ):

// Gnostice PDFOne: May use 1-indexed
var page = doc.Pages[1];  // First page

// IronPDF: 0-indexed
var page = pdf.Pages[0];  // First page

Funcionalidades que agora funcionam

Após a migração doGnostice PDFOnepara o IronPDF, estas funcionalidades anteriormente problemáticas ou impossíveis tornam-se disponíveis:

  • CSS externo: Folhas de estilo que não funcionavam noGnostice PDFOneagora são renderizadas corretamente.
  • Conteúdo JavaScript : O conteúdo dinâmico que estava faltando agora aparece.
  • Idiomas RTL: Árabe, hebraico e outros idiomas da direita para a esquerda funcionam corretamente.
  • CSS Grid e Flexbox: Técnicas modernas de layout são totalmente suportadas.
  • Assinaturas digitais: Assinatura confiável de certificados X509

Solução de problemas

Problema 1: Elemento PDFText não encontrado

Problem: PDFTextElement doesn't exist in IronPDF.

Solução: Utilize conteúdo HTML ou TextStamper:

// For new documents - render HTML
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<p>Your text here</p>");

// For existing documents - use stampers
var stamper = new TextStamper() { Text = "Added Text" };
pdf.ApplyStamp(stamper);

Problema 2: Objetos PDFFont

**Problem:**Gnostice PDFOneuses PDFFont objects;IronPDF usa CSS.

Solução:

// Gnostice PDFOne
PDFFont font = new PDFFont(PDFStandardFont.Helvetica, 12);

//IronPDF- use CSS
var html = "<span style='font-family: Helvetica, Arial, sans-serif; font-size: 12pt;'>Text</span>";

Problema 3: DocExporter não encontrado

Problem: DocExporter class doesn't exist in IronPDF.

Solução: Use ChromePdfRenderer:

// Gnostice PDFOne
DocExporter exporter = new DocExporter();
exporter.Export(doc, "output.pdf", DocumentFormat.PDF);

// IronPDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");

Edição 4: Melhorias na memória

Problema: OGnostice PDFOneapresentou relatos de vazamento de memória.

Solução: O IronPDF oferece gerenciamento de memória estável. Utilize padrões de descarte adequados:

using (var pdf = PdfDocument.FromFile("large.pdf"))
{
    // Process PDF
    pdf.SaveAs("output.pdf");
}  // Automatically disposed

Lista de verificação para migração

Pré-migração

  • Inventariar todo o uso doGnostice PDFOneno código-fonte.
  • Observe os recursos que não estavam funcionando (CSS, JS, RTL) — agora eles funcionarão!
  • Documente problemas de memória para testes comparativos.
  • 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 Gnostice PDFOne
  • Instale o pacote NuGet IronPDF: dotnet add package IronPdf
  • Atualizar importações de namespace
  • Substituir configuração da chave de licença
  • Converter PDFDocument para PdfDocument
  • Converter DocExporter para ChromePdfRenderer
  • Substituir desenho baseado em coordenadas por carimbo HTML
  • Atualizar PDFFont para estilização CSS
  • Converter doc.Append() para PdfDocument.Merge()

Testando

  • Teste de conversão de HTML para PDF
  • Verifique se o CSS externo agora funciona
  • Testar conteúdo dependente de JavaScript
  • Testar idiomas da direita para a esquerda (se necessário)
  • Teste assinaturas digitais (já disponíveis!)
  • Teste de fusão de PDFs
  • Testar marca d'água
  • Comparar o uso de memória

Pós-migração

  • Remover licença do Gnostice PDFOne
  • Atualizar documentação
  • Remover soluções alternativas para as limitações do Gnostice PDFOne
  • Treinar a equipe na API do IronPDF

Observe: Gnostice é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado por Gnostice Information Technologies. 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.