Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de BitMiracle Docotic PDF vers IronPDF en C#

Migrer de BitMiracle Docotic PDFversIronPDF: Guide de migration complet en C

BitMiracle Docotic PDF est une bibliothèque PDF .NET réputée pour son architecture de code géré à 100 % et ses capacités étendues de manipulation programmatique des PDF. Toutefois, la structure modulaire de ces outils, qui nécessite des modules distincts pour la conversion HTML-PDF, la mise en page et d'autres fonctionnalités, complique la gestion du projet et l'octroi des licences. Ce guide complet fournit un chemin de migration étape par étape de BitMiracle Docotic PDFversIronPDF- une bibliothèque PDF .NET unifiée avec un rendu HTML intégré basé sur Chromium et toutes les fonctionnalités incluses dans un seul package NuGet.

Pourquoi migrer de BitMiracle Docotic PDFvers IronPDF?

Bien que BitMiracle Docotic PDFoffre de solides fonctionnalités de manipulation de PDF, plusieurs facteurs poussent les équipes de développement à rechercher des alternatives avec une architecture plus rationalisée.

Comparaison de l'architecture des paquets

BitMiracle Docotic PDF utilise une approche modulaire qui nécessite plusieurs packages pour une fonctionnalité complète :

Aspect BitMiracle Docotic PDF IronPDF
HTML-à-PDF Nécessite un module complémentaire séparé (HtmlToPdf) Fonctionnalité principale intégrée
Structure du paquet Core + plusieurs add-ons Paquet NuGet unique
Modèle de licence Licence d'utilisation à l'unité Toutes les fonctionnalités sont incluses
Complexité de l'API Espaces de noms séparés par module complémentaire API unifiée
HTML Engine Chromium (via un module complémentaire) Chromium (intégré)
<Taille de la communauté Plus petit Plus grand, plus de ressources
Documentation Référence technique Tutoriels détaillés

Parité des fonctionnalités

Les deux bibliothèques prennent en charge des fonctionnalités PDF complètes :

Fonction BitMiracle Docotic PDF IronPDF
Créer un PDF à partir de zéro
HTML vers PDF ✅(module complémentaire requis) ✅(intégré)
URL vers PDF ✅(module complémentaire requis) ✅(intégré)
Manipulation PDF
Extraction de texte
Fusionner/Séparer
Signatures numériques
Chiffrement
Remplissage de formulaires
Conformité PDF/A

Différences clés dans l'approche

BitMiracle Docotic PDF utilise le dessin sur toile avec positionnement par coordonnées (canvas.DrawString(x, y, text)), tandis qu'IronPDF s'appuie sur HTML/CSS pour la mise en page et le positionnement. Il s'agit d'un changement de paradigme qui simplifie la création de contenu pour les développeurs familiarisés avec les technologies web.

Préparation de la migration

Prérequis

Assurez-vous que votre environnement répond à ces exigences :

  • .NET Framework 4.6.2+ ou .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ ou VS Code avec l'extension C#
  • Accès au gestionnaire de paquets NuGet
  • Clé de licenceIronPDF(essai gratuit disponible sur ironpdf.com)

Audit de l'utilisation de BitMiracle Docotic PDF

Exécutez ces commandes dans le répertoire de votre solution pour identifier toutes les références à Docotic.Pdf :

# Find all Docotic.Pdf usages in your codebase
grep -r "using BitMiracle.Docotic" --include="*.cs" .
grep -r "PdfDocument\|PdfPage\|PdfCanvas" --include="*.cs" .

# Find NuGet package references
grep -r "Docotic.Pdf" --include="*.csproj" .
# Find all Docotic.Pdf usages in your codebase
grep -r "using BitMiracle.Docotic" --include="*.cs" .
grep -r "PdfDocument\|PdfPage\|PdfCanvas" --include="*.cs" .

# Find NuGet package references
grep -r "Docotic.Pdf" --include="*.csproj" .
SHELL

Modifications importantes à prévoir

Changement BitMiracle Docotic PDF IronPDF Impact
Rendu HTML Nécessite le module complémentaire HtmlToPdf Intégré Supprimer le paquet de modules complémentaires
Indexation des pages basé sur 0 (Pages[0]) basé sur 0 (Pages[0]) Aucune modification n'est nécessaire
Système de coordination Origine en bas à gauche Flux HTML/CSS Utiliser CSS pour le positionnement
Dessin sur toile PdfCanvas.DrawText() Balisage HTML Changement de paradigme
Extraction de texte page.GetText() pdf.ExtractAllText() Changement de nom de la méthode
Chargement de documents new PdfDocument(path) PdfDocument.FromFile(path) Constructeur → méthode statique
Économie document.Save(path) pdf.SaveAs(path) Changement de nom de la méthode
Disposition motif IDisposable Non requis Gestion simplifiée des ressources

Processus de migration étape par étape

Étape 1 : Mise à jour des paquets NuGet

Supprimez les paquets BitMiracle Docotic PDFet installezIronPDF:

# Remove Docotic.Pdf packages
dotnet remove package BitMiracle.Docotic.Pdf
dotnet remove package BitMiracle.Docotic.Pdf.HtmlToPdf
dotnet remove package BitMiracle.Docotic.Pdf.Layout

# Install IronPDF
dotnet add package IronPdf
# Remove Docotic.Pdf packages
dotnet remove package BitMiracle.Docotic.Pdf
dotnet remove package BitMiracle.Docotic.Pdf.HtmlToPdf
dotnet remove package BitMiracle.Docotic.Pdf.Layout

# Install IronPDF
dotnet add package IronPdf
SHELL

Étape 2 : Mise à jour des références aux espaces de noms

Remplacer les espaces de noms PDF de BitMiracle Docotic parIronPDF:

// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
using BitMiracle.Docotic.Pdf.HtmlToPdf;

// Add this
using IronPdf;
// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
using BitMiracle.Docotic.Pdf.HtmlToPdf;

// Add this
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Étape 3 : configuration de la licence

// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Référence complète de migration des API

Opérations documentaires

Tâches BitMiracle Docotic PDF IronPDF
Créer un document vide new PdfDocument() new PdfDocument()
Charger à partir d'un fichier new PdfDocument(path) PdfDocument.FromFile(path)
Charger à partir du flux PdfDocument.Load(stream) PdfDocument.FromStream(stream)
Chargement à partir d'octets PdfDocument.Load(bytes) PdfDocument.FromBinaryData(bytes)
Enregistrer dans un fichier document.Save(path) pdf.SaveAs(path)
Obtenir le nombre de pages document.PageCount pdf.PageCount
Fermer/Disposer document.Dispose() Non requis

Conversion HTML en PDF

Tâches BitMiracle Docotic PDF(module complémentaire HtmlToPdf) IronPDF
Chaîne HTML vers PDF HtmlConverter.Create(html).ToPdf() renderer.RenderHtmlAsPdf(html)
Fichier HTML vers PDF HtmlConverter.Create(new Uri(filePath)).ToPdf() renderer.RenderHtmlFileAsPdf(path)
URL vers PDF HtmlConverter.Create(new Uri(url)).ToPdf() renderer.RenderUrlAsPdf(url)
Définir la taille de la page options.PageSize = PageSize.A4 renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
Définir les marges options.PageMargins = new Margins(20) renderer.RenderingOptions.MarginTop = 20

Opérations de fusion et de division

Tâches BitMiracle Docotic PDF IronPDF
Fusionner des documents doc1.Append(doc2) PdfDocument.Merge(pdf1, pdf2)
Document fractionné document.CopyPage(index) to new doc pdf.CopyPages(start, end)

Exemples de migration de code

Conversion HTML en PDF

L'opération la plus courante démontre la simplification significative qu'IronPdf apporte.

Mise en œuvre de BitMiracle Docotic PDF:

// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf = new PdfDocument())
        {
            string html = "<html><body><h1>Hello World</h1><p>This is HTML vers PDFconversion.</p></body></html>";

            pdf.CreatePage(html);
            pdf.Save("output.pdf");
        }

        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf = new PdfDocument())
        {
            string html = "<html><body><h1>Hello World</h1><p>This is HTML vers PDFconversion.</p></body></html>";

            pdf.CreatePage(html);
            pdf.Save("output.pdf");
        }

        Console.WriteLine("PDF created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Mise en œuvre d'IronPDF:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is HTML vers PDFconversion.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is HTML vers PDFconversion.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");

        Console.WriteLine("PDF created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF élimine l'exigence de l'énoncé utilisant et fournit une classe ChromePdfRenderer dédiée qui indique clairement sa capacité de rendu basée sur Chromium. Pour plus d'options de conversion HTML, consultez la documentation HTML au format PDF.

Fusionner plusieurs fichiers PDF

Mise en œuvre de BitMiracle Docotic PDF:

// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf1 = new PdfDocument("document1.pdf"))
        using (var pdf2 = new PdfDocument("document2.pdf"))
        {
            pdf1.Append(pdf2);
            pdf1.Save("merged.pdf");
        }

        Console.WriteLine("PDFs merged successfully");
    }
}
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf1 = new PdfDocument("document1.pdf"))
        using (var pdf2 = new PdfDocument("document2.pdf"))
        {
            pdf1.Append(pdf2);
            pdf1.Save("merged.pdf");
        }

        Console.WriteLine("PDFs merged successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Mise en œuvre d'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(new List<PdfDocument> { pdf1, pdf2 });
        merged.SaveAs("merged.pdf");

        Console.WriteLine("PDFs merged successfully");
    }
}
// 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(new List<PdfDocument> { pdf1, pdf2 });
        merged.SaveAs("merged.pdf");

        Console.WriteLine("PDFs merged successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

La méthode statique Merge d'IronPDF accepte directement plusieurs documents, fournissant une API plus propre que le modèle itératif Append. Pour plus d'options, consultez la documentation sur la fusion des PDF.

Extraction de texte

Mise en œuvre de BitMiracle Docotic PDF:

// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf = new PdfDocument("document.pdf"))
        {
            string allText = "";

            foreach (var page in pdf.Pages)
            {
                allText += page.GetText();
            }

            Console.WriteLine("Extracted text:");
            Console.WriteLine(allText);
        }
    }
}
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf = new PdfDocument("document.pdf"))
        {
            string allText = "";

            foreach (var page in pdf.Pages)
            {
                allText += page.GetText();
            }

            Console.WriteLine("Extracted text:");
            Console.WriteLine(allText);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Mise en œuvre d'IronPDF:

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

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

        Console.WriteLine("Extracted text:");
        Console.WriteLine(allText);
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

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

        Console.WriteLine("Extracted text:");
        Console.WriteLine(allText);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF réduit l'extraction de texte d'une boucle de plusieurs lignes à un seul appel de méthode. Pour plus d'options d'extraction, consultez la documentation sur l'extraction de texte.

Protection et chiffrement des mots de passe

Mise en œuvre d'IronPDF:

using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");

// Set security
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

pdf.SaveAs("protected.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");

// Set security
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

pdf.SaveAs("protected.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Pour des options de sécurité complètes, voir la documentation sur le chiffrement.

En-têtes et pieds de page

Mise en œuvre d'IronPDF:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:12px;'>
            Company Header - Confidential
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
pdf.SaveAs("with_headers.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:12px;'>
            Company Header - Confidential
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
pdf.SaveAs("with_headers.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF prend en charge les jetons placeholder tels que {page} et {total-pages} pour la numérotation dynamique des pages. Pour plus d'options, consultez la documentation sur les en-têtes et les pieds de page.

Notes de migration essentielles

Canvas to HTML Paradigm Shift (Changement de paradigme)

L'approche de dessin basée sur le canevas de BitMiracle Docotic PDFdoit être convertie en HTML avec un positionnement CSS :

BitMiracle Docotic PDF Pattern:

var canvas = pdfPage.Canvas;
canvas.DrawString(50, 50, "Hello, World!");
var canvas = pdfPage.Canvas;
canvas.DrawString(50, 50, "Hello, World!");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Modèle IronPDF:

var html = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
var html = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Indexation de la même page

Les deux bibliothèques utilisent l'indexation basée sur 0 (Pages[0] est la première page) - aucun changement n'est nécessaire pour le code d'accès aux pages.

L'élimination n'est pas nécessaire

IronPDF ne nécessite pas d'instructions using pour la gestion de la mémoire, ce qui simplifie la structure du code :

// BitMiracle Docotic PDF- disposal required
using (var pdf = new PdfDocument("input.pdf"))
{
    // operations
}

//IronPDF- disposal optional
var pdf = PdfDocument.FromFile("input.pdf");
// operations - no using statement needed
// BitMiracle Docotic PDF- disposal required
using (var pdf = new PdfDocument("input.pdf"))
{
    // operations
}

//IronPDF- disposal optional
var pdf = PdfDocument.FromFile("input.pdf");
// operations - no using statement needed
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Support asynchrone

Le module complémentaire HtmlToPdf de BitMiracle Docotic PDFnécessite des modèles asynchrones partout.IronPDFprend en charge les méthodes synchrones et asynchrones :

// Synchronous
var pdf = renderer.RenderHtmlAsPdf(html);

// Asynchronous
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Synchronous
var pdf = renderer.RenderHtmlAsPdf(html);

// Asynchronous
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Intégration d'ASP.NET Core

Modèle IronPDF:

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.Stream, "application/pdf", "report.pdf");
    }
}
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.Stream, "application/pdf", "report.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Liste de contrôle post-migration

Après avoir effectué la migration du code, vérifiez les points suivants :

  • [Exécuter tous les tests unitaires pour vérifier que la génération de PDF fonctionne correctement
  • [Comparer la qualité de sortie des PDF (le moteur Chromium d'IronPDF peut rendre des résultats légèrement différents - généralement meilleurs)
  • [Vérifier la précision de l'extraction de texte
  • [Tester la fonctionnalité de remplissage de formulaires
  • [Valider les signatures numériques le cas échéant
  • [Test de performance des opérations par lots
  • [Test dans tous les environnements cibles
  • [Mise à jour des pipelines CI/CD
  • [Supprimer les fichiers de licence Docotic.Pdf

Protéger l'avenir de votre infrastructure PDF

Avec .NET 10 à l'horizon et C# 14 introduisant de nouvelles fonctionnalités de langage, le choix d'une bibliothèque PDF à l'architecture unifiée simplifie la gestion des dépendances et garantit une disponibilité constante des fonctionnalités. L'approche à paquet unique d'IronPDF signifie que vous n'aurez pas besoin de suivre la compatibilité de plusieurs versions complémentaires lorsque les projets s'étendront jusqu'en 2025 et 2026.

Ressources supplémentaires


La migration de BitMiracle Docotic PDFversIronPDFélimine la complexité de la gestion de plusieurs packages complémentaires tout en offrant les mêmes capacités de rendu HTML basées sur Chromium. Le passage du dessin basé sur le canevas au positionnement HTML/CSS tire parti des compétences en développement web que la plupart des développeurs .NET possèdent déjà, ce qui se traduit par un code de génération de PDF plus facile à maintenir.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite