IRONSOFTWAREHOME
VÍDEOS

Como definir margens personalizadas em PDFs em C#

Curtis Chau
Curtis Chau
Updated: 19 de julho de 2026

A migração do SDK de PDF da Foxit para o IronPDF simplifica seu fluxo de trabalho de geração de PDFs em .NET , substituindo APIs complexas voltadas para empresas por padrões modernos e fáceis de usar para desenvolvedores. Este guia fornece um caminho de migração completo, passo a passo, que remove código desnecessário e facilita as operações com PDFs em toda a sua base de código.

Por que migrar do SDK de PDF da Foxit para o IronPDF?

Os desafios do Foxit PDF

O SDK de PDF da Foxit é uma biblioteca robusta de nível empresarial, mas apresenta uma complexidade significativa que pode atrasar o desenvolvimento:

  1. Sistema de licenciamento complexo: A variedade de produtos, SKUs e tipos de licença (por desenvolvedor, por servidor, OEM, etc.) dificulta a escolha da opção ideal para o seu projeto.

  2. Preços para empresas: Os preços são personalizados para grandes organizações e podem ser proibitivos para equipes menores ou desenvolvedores individuais.

  3. Pacote Nativo Pesado: O pacote público NuGet (Foxit.SDK.Dotnet) é grande (~240 MB), e projetos mais antigos ainda podem conter referências diretas de DLL ou configurações de feeds privados.

  4. API Verbosa: A inicialização da biblioteca com Library.Initialize(), a verificação de códigos de erro e chamadas explícitas Library.Release() adicionam boilerplate a cada operação.

  5. Motor HTML2PDF Separado: A conversão de HTML para PDF requer os binários do motor HTML2PDF, distribuídos separadamente do suporte/vendas do Foxit, em vez de incluídos no pacote NuGet.

  6. Configuração Complexa: As configurações requerem configuração detalhada de objetos (por exemplo, HTML2PDFSettingData) com múltiplas propriedades.

  7. Herança do C++: Os padrões da API refletem as origens do C++, parecendo menos naturais em aplicações C# modernas.

Comparação entre Foxit PDF e IronPDF

AspectoSDK de PDF da FoxitIronPDF
InstalaçãoFoxit.SDK.Dotnet (~240 MB) + motor HTML2PDF separadoPacote NuGet simples
LicenciamentoConduzido por vendas, por desenvolvedor por plataformaTransparente, adequado para todos os tamanhos.
InicializaçãoLibrary.Initialize(sn, key)Defina a chave de licença uma vez.
Tratamento de errosEnumerações de código de erroExceções padrão do .NET
HTML para PDFDownload de motor separadoMotor Chromium integrado
Estilo APIHerança do C++, verbosoPadrões modernos do .NET
Limpeza de recursosManual Release()Descartável/automático
DocumentaçãoPortal de documentos corporativosTutoriais públicos

Análise de custo-benefício

Mudar de Foxit PDF para IronPDF oferece benefícios de desenvolvimento tangíveis: complexidade reduzida por meio de APIs mais simples, desenvolvimento mais rápido com métodos intuitivos, compatibilidade com .NET moderno, incluindo suporte a async/await e LINQ, uma abordagem centrada em HTML que usa habilidades web existentes e conversão de HTML incluída sem download de motor separado.IronPDF roda nas versões atuais do .NET e combina perfeitamente com padrões de C# modernos.


Antes de começar

Pré-requisitos

  1. Ambiente .NET : O IronPDF é compatível com .NET Framework 4.6.2+, .NET Core 3.1+, .NET 5/6/7/8/9+
  2. Acesso ao NuGet : Certifique-se de que você pode instalar pacotes do NuGet.
  3. Chave de licença: Obtenha sua chave de licença do IronPDF para uso em produção em IronPDF.

Faça backup do seu projeto

# Create a backup branch
git checkout -b pre-ironpdf-migration
git add .
git commit -m "Backup before SDK de PDF da Foxit to IronPDF migration"
SHELL

Identificar todos os usos do Foxit PDF

# Find all SDK de PDF da Foxit references
grep -r "foxit\|PDFDoc\|PDFPage\|Library.Initialize\|Library.Release" --include="*.cs" --include="*.csproj" .

# Find Foxit DLL references
find . -name "*.csproj" | xargs grep -l "Foxit\|fsdk"
SHELL

Funcionalidade atual do documento

Antes da migração, catalogar:

  • Quais recursos do Foxit PDF você utiliza (conversão para HTML, anotações, formulários, segurança)?
  • Localização da chave de licença e código de inicialização
  • Configurações e definições personalizadas
  • Padrões de tratamento de erros usando enumerações ErrorCode

Migração de Início Rápido

Passo 1: Atualizar pacotes NuGet

# Remove the Foxit NuGet package
dotnet remove package Foxit.SDK.Dotnet

# Install IronPDF
dotnet add package IronPdf
SHELL

Se você tem referências diretas mais antigas de DLL do Foxit no .csproj (construções mais antigas), remova-as manualmente:

<!-- Remove these manually -->
<Reference Include="fsdk_dotnet">
    <HintPath>..\libs\Foxit\fsdk_dotnet.dll</HintPath>
</Reference>
XML

Além disso, exclua quaisquer pastas de motor HTML2PDF que foram descompactadas separadamente.

Etapa 2: Atualizar Namespaces

// Before (Foxit PDF)
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
using foxit.pdf.annots;
using foxit.addon.conversion;

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

Etapa 3: Inicializar o IronPDF

Uma das melhorias mais significativas nesta migração para o Foxit PDF é a eliminação do padrão complexo de inicialização e limpeza:

// Before (Foxit PDF)
string sn = "YOUR_SERIAL_NUMBER";
string key = "YOUR_LICENSE_KEY";
ErrorCode error_code = Library.Initialize(sn, key);
if (error_code != ErrorCode.e_ErrSuccess)
{
    throw new Exception("Failed to initialize Foxit PDF SDK");
}
// ... your code ...
Library.Release();  // Don't forget this!

// After (IronPDF)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// That's it! No Release() needed

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

// Before (Foxit PDF)
Library.Initialize(sn, key);
HTML2PDFSettingData settings = new HTML2PDFSettingData();
settings.page_width = 612.0f;
settings.page_height = 792.0f;
Convert.FromHTML(htmlContent, @"C:\Foxit\html2pdf_engine", "",
                 settings, "output.pdf", 30);
Library.Release();

// After (IronPDF)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");

Referência completa da API

Mapeamento de Namespace

Espaço de nomes PDF do FoxitEquivalente ao IronPDF
foxitIronPdf
foxit.commonIronPdf
foxit.common.fxcrtN / D
foxit.pdfIronPdf
foxit.pdf.annotsIronPdf.Editing
foxit.addon.conversionIronPdf.Rendering

Mapeamento de Classes Principais

Classe do SDK Foxit PDFEquivalente ao IronPDF
LibraryN / D
PDFDocPdfDocument
PDFPagePdfDocument.Pages[i]
HTML2PDFChromePdfRenderer
TextPagepdf.ExtractTextFromPage(i)
WatermarkTextStamper / ImageStamper
SecuritySecuritySettings
Formpdf.Form
Metadatapdf.MetaData

Métodos PDFDoc

Foxit PDFDocIronPDF Documento PDF
new PDFDoc(path)PdfDocument.FromFile(path)
doc.LoadW(password)PdfDocument.FromFile(path, password)
doc.GetPageCount()pdf.PageCount
doc.GetPage(index)pdf.Pages[index]
doc.SaveAs(path, flags)pdf.SaveAs(path)
doc.Close()pdf.Dispose() ou declaração de using
doc.InsertDocument()PdfDocument.Merge()

Conversão de HTML para PDF

Foxit HTML2PDFEquivalente ao IronPDF
new HTML2PDFSettingData()new ChromePdfRenderer()
settings.page_widthRenderingOptions.PaperSize
settings.page_heightRenderingOptions.SetCustomPaperSize()
Convert.FromHTML(html, engine, ...)renderer.RenderHtmlAsPdf(html)
Convert.FromHTML(url, engine, ...)renderer.RenderUrlAsPdf(url)

Configurações de marca d'água

Marca d'água FoxitEquivalente ao IronPDF
new Watermark(doc, text, font, size, color)new TextStamper()
WatermarkSettings.positionVerticalAlignment + HorizontalAlignment
WatermarkSettings.rotationRotation
WatermarkSettings.opacityOpacity
watermark.InsertToAllPages()pdf.ApplyStamp(stamper)

Exemplos de código

Exemplo 1: Conversão de HTML para PDF

Antes (SDK do Foxit PDF):

// NuGet: Install-Package Foxit.SDK.Dotnet
// HTML-to-PDF requires the separateFoxit HTML2PDFengine (engine_path),
// obtained from Foxit support/sales — not in the NuGet package.
using foxit;
using foxit.common;
using foxit.addon.conversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        Convert.FromHTML(
            "<html><body><h1>Hello World</h1></body></html>",
            @"C:\Foxit\html2pdf_engine",   // engine_path (separate download)
            "",                              // cookies path
            settingData,
            "output.pdf",
            30);                             // timeout (seconds)

        Library.Release();
    }
}
C#

Após (IronPDF):

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

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

A abordagem IronPDF reduz mais de 15 linhas de código de configuração para apenas 4 linhas. Sem inicialização de biblioteca, sem limpeza explícita, sem objetos de configuração complexos. Para obter mais opções de renderização HTML, consulte a documentação de HTML para PDF .

Exemplo 2: Conversão de URL para PDF

Antes (SDK do Foxit PDF):

// NuGet: Install-Package Foxit.SDK.Dotnet
// Convert.FromHTML accepts either a URL or a literal HTML string in the
// first argument; the URL form is what does URL-to-PDF.
using foxit;
using foxit.common;
using foxit.addon.conversion;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        HTML2PDFSettingData settingData = new HTML2PDFSettingData();
        settingData.page_width = 612.0f;
        settingData.page_height = 792.0f;
        settingData.page_mode = HTML2PDFPageMode.e_HTML2PDFPageModeSinglePage;

        Convert.FromHTML(
            "https://www.example.com",
            @"C:\Foxit\html2pdf_engine",   // engine_path (separate download)
            "",                              // cookies path
            settingData,
            "output.pdf",
            30);                             // timeout (seconds)

        Library.Release();
    }
}

Após (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("output.pdf");
    }
}

O mecanismo Chromium integrado do IronPDF lida automaticamente com a execução de JavaScript , a renderização de CSS e o conteúdo dinâmico. Saiba mais sobre a conversão de URL para PDF .

Exemplo 3: Adicionando marcas d'água

Antes (SDK do Foxit PDF):

// NuGet: Install-Package Foxit.SDK.Dotnet
using foxit;
using foxit.common;
using foxit.pdf;
using System;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        using (PDFDoc doc = new PDFDoc("input.pdf"))
        {
            doc.Load("");

            WatermarkSettings settings = new WatermarkSettings();
            settings.flags = (int)Watermark.Flags.e_FlagASPageContents;
            settings.position = Position.e_PosCenter;
            settings.rotation = -45.0f;
            settings.opacity = 50;     // 0-100 in newer SDKs

            WatermarkTextProperties props = new WatermarkTextProperties();
            props.font = new Font(Font.StandardID.e_StdIDHelvetica);
            props.font_size = 48.0f;
            props.color = 0xFF0000;
            props.alignment = Alignment.e_AlignmentCenter;

            Watermark watermark = new Watermark(doc, "Confidential", props, settings);

            // No InsertToAllPages helper — iterate pages explicitly.
            for (int i = 0; i < doc.GetPageCount(); i++)
            {
                using (PDFPage page = doc.GetPage(i))
                {
                    watermark.InsertToPage(page);
                }
            }

            doc.SaveAs("output.pdf", (int)PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
        }

        Library.Release();
    }
}

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");
        pdf.ApplyWatermark(new TextStamper()
        {
            Text = "Confidential",
            FontSize = 48,
            Opacity = 50,
            Rotation = -45,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        });
        pdf.SaveAs("output.pdf");
    }
}

O TextStamper do IronPDF proporciona configuração intuitiva baseada em propriedades em vez de objetos de configuração separados e iteração manual de páginas. Consulte a documentação completa sobre marca d'água para obter opções adicionais.

Exemplo 4: URL para PDF com cabeçalhos e rodapés

Antes (SDK do Foxit PDF):

using foxit;
using foxit.addon.conversion;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        try
        {
            HTML2PDFSettingData settings = new HTML2PDFSettingData();
            settings.page_width = 595.0f;  // A4
            settings.page_height = 842.0f;
            settings.page_margin_top = 100.0f;
            settings.page_margin_bottom = 100.0f;

            // SDK de PDF da Foxit has limited header/footer support
            // Often requires post-processing or additional code

            Convert.FromHTML(
                "https://www.example.com",
                @"C:\Foxit\html2pdf_engine",  // engine_path (separate download)
                "",                            // cookies path
                settings,
                "webpage.pdf",
                30);                           // timeout (seconds)
        }
        finally
        {
            Library.Release();
        }
    }
}
C#

Após (IronPDF):

using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.PrintHtmlBackgrounds = true;
        renderer.RenderingOptions.WaitFor.RenderDelay(3000);  // Wait for JS

        // Built-in header/footer support
        renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:center; font-size:12pt;'>Company Report</div>",
            DrawDividerLine = true
        };

        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
        {
            HtmlFragment = "<div style='text-align:right; font-size:10pt;'>Page {page} of {total-pages}</div>",
            DrawDividerLine = true
        };

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}

O IronPDF oferece suporte nativo a cabeçalhos e rodapés com estilo HTML e marcadores de posição dinâmicos para números de página.

Exemplo 5: Segurança e criptografia de PDF

Antes (SDK do Foxit PDF):

using foxit;
using foxit.pdf;

class Program
{
    static void Main()
    {
        Library.Initialize("sn", "key");

        try
        {
            using (PDFDoc doc = new PDFDoc("input.pdf"))
            {
                doc.LoadW("");

                // Build the encryption data (cipher, key length, permissions)
                using (StdEncryptData encryptData = new StdEncryptData(
                    true,                                    // is_encrypt_metadata
                    (int)(PDFDoc.UserPermissions.e_PermPrint |
                          PDFDoc.UserPermissions.e_PermModify),
                    SecurityHandler.CipherType.e_CipherAES,
                    16))                                     // key length (bytes) -> AES-128
                using (StdSecurityHandler securityHandler = new StdSecurityHandler())
                {
                    securityHandler.Initialize(encryptData, "user_password", "owner_password");
                    doc.SetSecurityHandler(securityHandler);
                }

                doc.SaveAs("encrypted.pdf", (int)PDFDoc.SaveFlags.e_SaveFlagNoOriginal);
            }
        }
        finally
        {
            Library.Release();
        }
    }
}

Após (IronPDF):

using IronPdf;

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

        // Set passwords
        pdf.SecuritySettings.OwnerPassword = "owner_password";
        pdf.SecuritySettings.UserPassword = "user_password";

        // Set permissions
        pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
        pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.EditAll;
        pdf.SecuritySettings.AllowUserCopyPasteContent = true;
        pdf.SecuritySettings.AllowUserAnnotations = true;

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

Considerações sobre o desempenho

Reutilize o ChromePdfRenderer

Para obter o melhor desempenho durante a sua migração de PDF Foxit, reutilize a instância ChromePdfRenderer — ela é thread-safe:

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

Auxiliar de Conversão de Unidades

O SDK Foxit PDF usa pontos; O IronPDF usa milímetros. Utilize esta ferramenta auxiliar durante a migração:

public static class UnitConverter
{
    public static double PointsToMm(double points) => points * 0.352778;
    public static double MmToPoints(double mm) => mm / 0.352778;
    public static double InchesToMm(double inches) => inches * 25.4;
}

// Usage: Convert Foxit's 72 points (1 inch) to IronPDF millimeters
renderer.RenderingOptions.MarginTop = UnitConverter.PointsToMm(72); // ~25.4mm

Descarte adequado de recursos

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

Solução de problemas

Problema 1: Library.Initialize() não encontrado

Problem: Library.Initialize() doesn't exist in IronPDF.

Solução: O IronPDF utiliza um padrão de inicialização mais simples:

// Foxit PDF
Library.Initialize(sn, key);

//IronPDF- just set license key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
C#

Problema 2: Tratamento de Códigos de Erro

Problema: O código verifica ErrorCode.e_ErrSuccess, mas o IronPDF não possui isso.

Solução: Utilize o tratamento de exceções padrão do .NET :

// Foxit PDF
ErrorCode err = doc.LoadW("");
if (err != ErrorCode.e_ErrSuccess) { /* handle error */ }

// IronPDF
try
{
    var pdf = PdfDocument.FromFile("input.pdf");
}
catch (IOException ex)
{
    Console.WriteLine($"Failed to load PDF: {ex.Message}");
}

Problema 3: PDFDoc.Close() não encontrado

Problema: O método doc.Close() não existe no IronPDF.

Solução: Use declarações Dispose() ou using:

// Foxit PDF
doc.Close();

// IronPDF
pdf.Dispose();
// or better: wrap in using statement

Lista de verificação para migração

Pré-migração

  • Inventariar todos os recursos do SDK de PDF da Foxit utilizados.
  • Localização das chaves de licença do documento
  • Anote todas as chamadas Library.Initialize() e Library.Release()
  • Listar configurações personalizadas (tamanhos de página, margens, etc.)
  • Identificar padrões de tratamento de erros usando ErrorCode
  • Fazer backup do projeto para o controle de versão
  • Obtenha a chave de licença do IronPDF

Migração de Pacotes

  • Remover as referências à DLL do SDK de PDF da Foxit do arquivo .csproj
  • Remova quaisquer configurações privadas de feeds NuGet
  • Instale o pacote IronPDF NuGet: dotnet add package IronPdf
  • Atualizar importações de namespace
  • Defina a chave de licença do IronPDF na inicialização.

Migração de código

  • Remova as chamadas Library.Initialize() e Library.Release()
  • Substitua as verificações ErrorCode por try/catch
  • Substitua PDFDoc por PdfDocument
  • Substitua Convert.FromHTML(...) por ChromePdfRenderer
  • Atualize o acesso à página de GetPage(i) para Pages[i]
  • Substitua SaveAs(path, flags) por SaveAs(path)
  • Substitua Close() por Dispose() ou declarações de using
  • Atualize o código de marca d'água para usar TextStamper
  • Converter unidades de pontos para milímetros

Testando

  • Verificar se a saída de HTML para PDF corresponde às expectativas.
  • Testar o carregamento de PDF e a extração de texto
  • Verificar a funcionalidade de mesclagem
  • Verificar a aparência da marca d'água
  • Testar recursos de segurança/criptografia
  • Validar operações de campos de formulário
  • Testes de desempenho

Pós-migração

  • Excluir DLLs do SDK do Foxit PDF
  • Remover arquivos de configuração relacionados ao Foxit
  • Atualizar documentação
  • Limpar código auxiliar não utilizado

Observe: Foxit PDF SDK e Foxit são marcas registradas da Foxit Software Incorporated. Este site não é afiliado, endossado ou patrocinado pela Foxit Software. 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.