Passer au contenu du pied de page
VIDéOS

Comment utiliser WaitFor pour retarder le rendu PDF C#

La migration d'un wrapper .NET de PDFium vers IronPDF déplace votre flux de travail PDF .NET d'un moteur axé sur le rendu avec des dépendances binaires natives à une solution PDF complète qui gère la création, la manipulation, et le rendu sans complexité spécifique à la plateforme. Ce guide fournit un chemin de migration étape par étape qui élimine la gestion des dépendances natives tout en ajoutant des capacités que PDFium lui-même ne fournit pas.

Pourquoi migrer d'un wrapper PDFium vers IronPDF

Comprendre les wrappers .NET de PDFium

PDFium est le moteur de rendu et de parsing PDF C++ sous BSD-3-Clause de Google — le même moteur qui alimente le visualiseur PDF intégré à Chrome. Il n'existe pas de lien .NET officiel fourni par Google ; au lieu de cela, l'écosystème .NET consomme PDFium via des wrappers communautaires. Les quatre packages NuGet les plus souvent cités sont PdfiumViewer (pvginkel; Licence Apache 2.0; archivé en août 2019, dernière version 2.13.0 en novembre 2017, .NET Framework 2.0+), PdfiumViewer.Updated (un fork maintenu porté vers .NET Core / .NET 6), PDFiumCore (Dtronix; .NET Standard 2.1 P/Invoke bindings), and Pdfium.Net.SDK (Patagames; commercial, SDK à licence perpétuelle).

Leurs API diffèrent, mais elles partagent un trait commun : PDFium lui-même est un moteur de rendu et de parsing, pas un moteur HTML-vers-PDF ou de création de documents. PDFium n'a pas de parser HTML, donc aucun wrapper ne peut convertir HTML en PDF par lui-même. Ce guide utilise PdfiumViewer comme le wrapper représentatif pour les extraits "avant" parce que son API est la plus souvent citée; l'approche de migration est la même pour les quatre.

Limitations critiques des wrappers PDFium

  1. Priorité au rendu : PDFium n'a pas de parser HTML, donc aucun wrapper ne peut créer de PDF à partir de HTML, d'URLs ou d'images arbitraires.

  2. Manipulation limitée dans les wrappers open-source : PdfiumViewer/PDFiumCore exposent la visualisation et l'extraction de texte par page ; la fusion / division / modification de formulaire est partielle dans Patagames Pdfium.Net.SDK et en grande partie absente dans les wrappers gratuits.

  3. Dépendances binaires natives : Nécessite des binaires PDFium spécifiques à la plateforme (pdfium.dll / .so / .dylib) pour chaque RID.

  4. Complexité du déploiement : Doit empaqueter et gérer les binaires natifs par plateforme avec les dossiers x86, x64, et runtimes.

  5. Extraction de texte de base : PdfiumViewerexpose le texte brut par page via GetPdfText(int); les métadonnées de mise en page / format ne sont pas exposées.

  6. Pas de HTML vers PDF : PDFium n'a pas de parser HTML ; le contenu web ne peut pas être converti directement.

  7. Pas d'en-têtes/pieds de page intégrés : Pas d'API de superposition de page de haut niveau.

  8. Pas de filigranes intégrés : Pas de primitive de tamponnage.

  9. Formulaires : Lecture seule ou absente dans les wrappers gratuits ; disponible dans Patagames Pdfium.Net.SDK.

  10. Sécurité : Cryptage / permissions non exposés par les wrappers gratuits ; disponible dans Patagames Pdfium.Net.SDK.

Comparaison entre les wrappers PDFium et IronPDF

Aspect Wrappers .NET pour PDFium IronPDF
Accent principal Rendu/visualisation Solution PDF complète
Fidélité du rendu Rendu haute fidélité Niveau élevé, en particulier pour HTML/CSS/JS
Création de PDF à partir de HTML None Oui (HTML, URL, images)
Manipulation de PDF Wrappers gratuits : aucun ; Patagames : partiel Oui (fusionner, diviser, éditer)
HTML à PDF None Oui (moteur Chromium)
Marqueurs d'eau Non intégré Oui
En-têtes/Pieds de page Non intégré Oui
Remplissage de formulaires Wrappers gratuits : aucun ; Patagames : oui Oui
Sécurité Wrappers gratuits : aucun ; Patagames : oui Oui
Dépendances natives Les exigences sont les suivantes Inclus / géré par NuGet
Cross-Platform Gestion manuelle des binaires natifs Automatique
Facilité de déploiement Compliqué par les dépendances natives Plus facile ; moins de complications liées aux dépendances

Pour les équipes ciblant .NET moderne,IronPDF offre une base entièrement gérée qui élimine la gestion des binaires natifs tout en ajoutant des capacités complètes de création et de manipulation de PDF.


Avant de commencer

Prérequis

  1. Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Accès à NuGet : possibilité d'installer des packages NuGet
  3. Licence IronPDF : Obtenez votre clé de licence sur IronPDF

Modifications du paquet NuGet

# Remove whichever PDFium wrapper you used:
#   PdfiumViewer           (Apache 2.0 - archived 2019, .NET Framework only)
#   PdfiumViewer.Updated    (community fork, .NET Core / .NET 6)
#   PDFiumCore              (Dtronix - .NET Standard 2.1 P/Invoke bindings)
#   Pdfium.Net.SDK          (Patagames - commercial, perpetual license)
dotnet remove package PdfiumViewer
dotnet remove package PdfiumViewer.Updated
dotnet remove package PDFiumCore
dotnet remove package Pdfium.Net.SDK

# Install IronPDF
dotnet add package IronPdf
# Remove whichever PDFium wrapper you used:
#   PdfiumViewer           (Apache 2.0 - archived 2019, .NET Framework only)
#   PdfiumViewer.Updated    (community fork, .NET Core / .NET 6)
#   PDFiumCore              (Dtronix - .NET Standard 2.1 P/Invoke bindings)
#   Pdfium.Net.SDK          (Patagames - commercial, perpetual license)
dotnet remove package PdfiumViewer
dotnet remove package PdfiumViewer.Updated
dotnet remove package PDFiumCore
dotnet remove package Pdfium.Net.SDK

# Install IronPDF
dotnet add package IronPdf
SHELL

Configuration de la licence

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Identifier l'utilisation du wrapper PDFium

# Find PDFium wrapper usage
grep -rE "PdfiumViewer|PDFiumCore|Patagames\.Pdf|PdfDocument\.Load|\.Render\(" --include="*.cs" .

# Find native binary references
grep -rE "pdfium\.dll|libpdfium\.(so|dylib)" --include="*.csproj" --include="*.config" .

# Find platform-specific code
grep -rE "#if.*64|WIN32|WIN64|LINUX|OSX" --include="*.cs" .
# Find PDFium wrapper usage
grep -rE "PdfiumViewer|PDFiumCore|Patagames\.Pdf|PdfDocument\.Load|\.Render\(" --include="*.cs" .

# Find native binary references
grep -rE "pdfium\.dll|libpdfium\.(so|dylib)" --include="*.csproj" --include="*.config" .

# Find platform-specific code
grep -rE "#if.*64|WIN32|WIN64|LINUX|OSX" --include="*.cs" .
SHELL

Référence API complète

Modifications de l'espace de nommage

// PDFium wrappers (use the one you installed)
using PdfiumViewer;             // PdfiumViewer/PdfiumViewer.Updated
using PDFiumCore;               // Dtronix PDFiumCore (P/Invoke bindings)
using Patagames.Pdf;            // Patagames Pdfium.Net.SDK
using Patagames.Pdf.Net;        // Patagames Pdfium.Net.SDK

// IronPDF
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;
// PDFium wrappers (use the one you installed)
using PdfiumViewer;             // PdfiumViewer/PdfiumViewer.Updated
using PDFiumCore;               // Dtronix PDFiumCore (P/Invoke bindings)
using Patagames.Pdf;            // Patagames Pdfium.Net.SDK
using Patagames.Pdf.Net;        // Patagames Pdfium.Net.SDK

// IronPDF
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;
Imports PdfiumViewer ' PdfiumViewer/PdfiumViewer.Updated
Imports PDFiumCore ' Dtronix PDFiumCore (P/Invoke bindings)
Imports Patagames.Pdf ' Patagames Pdfium.Net.SDK
Imports Patagames.Pdf.Net ' Patagames Pdfium.Net.SDK

' IronPDF
Imports IronPdf
Imports IronPdf.Rendering
Imports IronPdf.Editing
$vbLabelText   $csharpLabel

Mappages de classes de base

PdfiumViewer IronPDF Notes
PdfiumViewer.PdfDocument IronPdf.PdfDocument Même nom simple dans différents espaces de noms
PdfRenderer (contrôle WinForms) (non applicable) PdfiumViewerenvoie également des contrôles d'interface utilisateur ;IronPDF est sans interface
(non disponible) ChromePdfRenderer HTML / URL → PDF
(non disponible) HtmlHeaderFooter En-têtes/pieds de page

Mappages de chargement de documents

PdfiumViewer IronPDF Notes
PdfDocument.Load(path) PdfDocument.FromFile(path) Charger à partir d'un fichier
PdfDocument.Load(stream) PdfDocument.FromStream(stream) Charger à partir du flux
(envelopper les octets dans MemoryStream) PdfDocument.FromBinaryData(bytes) Chargement à partir d'octets

Mappages de propriétés de documents

PdfiumViewer IronPDF Notes
document.PageCount document.PageCount Idem
document.PageSizes (IList<SizeF>) document.Pages[index].Width / Height PdfiumViewer expose des tailles; pages are not first-class objects
document.PageSizes[i].Width document.Pages[i].Width Largeur par page en points

Mappages d'extraction de texte

PdfiumViewer IronPDF Notes
document.GetPdfText(pageIndex) document.Pages[index].Text Par page
(boucle manuelle)_ document.ExtractAllText() Toutes les pages

Enregistrement des documents Mappings

PdfiumViewer IronPDF Notes
document.Save(stream) document.SaveAs(path) PdfiumViewer prend un Stream;IronPDF prend un chemin
(non disponible) document.Stream Accéder au flux brut
(non disponible) document.BinaryData Obtenir des octets

Mappages de rendu de page

PdfiumViewer IronPDF Notes
document.Render(page, width, height, dpiX, dpiY, flags) pdf.RasterizeToImageFiles(path, DPI) Rastériser
Boucle manuelle sur document.Render(i, ...) pdf.RasterizeToImageFiles("page_*.png") Rendu en batch sur toutes les pages
Maths de l'échelle manuelle DPI = 72 * scale Conversion échelle-DPI

Nouvelles fonctionnalités non disponibles dans les wrappers PDFium

Fonctionnalité d'IronPDF Description du projet
ChromePdfRenderer.RenderHtmlAsPdf() Créer à partir de HTML
ChromePdfRenderer.RenderUrlAsPdf() Créer à partir d'une URL
ChromePdfRenderer.RenderHtmlFileAsPdf() Créer à partir d'un fichier HTML
PdfDocument.Merge() Combiner des PDF
pdf.CopyPages() Extraire des pages
pdf.RemovePages() Supprimer des pages
pdf.InsertPdf() Insérer le PDF à la position
pdf.ApplyWatermark() Ajouter des filigranes
pdf.AddHtmlHeaders() Ajouter des en-têtes
pdf.AddHtmlFooters() Ajouter des pieds de page
pdf.SecuritySettings Protection par mot de passe
pdf.SignWithDigitalSignature() Signatures numériques
pdf.Form Remplissage de formulaires

Exemples de migration de code

Exemple 1 : Extraction de texte à partir d'un PDF

Avant (PdfiumViewer):

// NuGet: Install-Package PdfiumViewer (Licence Apache 2.0; archived Aug 2019, .NET Framework 2.0+)
//        or Install-Package PdfiumViewer.Updated  (maintained fork, .NET Core / .NET 6)
//        or Install-Package PDFiumCore             (Dtronix, .NET Standard 2.1 P/Invoke)
//        or Install-Package Pdfium.Net.SDK         (Patagames, commercial perpetual license)
using PdfiumViewer;
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string pdfPath = "document.pdf";

        using (var document = PdfDocument.Load(pdfPath))
        {
            StringBuilder text = new StringBuilder();

            for (int i = 0; i < document.PageCount; i++)
            {
                // PdfiumViewer's text extraction is per-page raw text via GetPdfText(int).
                // No layout / format metadata is exposed.
                string pageText = document.GetPdfText(i);
                text.AppendLine(pageText);
            }

            Console.WriteLine(text.ToString());
        }
    }
}
// NuGet: Install-Package PdfiumViewer (Licence Apache 2.0; archived Aug 2019, .NET Framework 2.0+)
//        or Install-Package PdfiumViewer.Updated  (maintained fork, .NET Core / .NET 6)
//        or Install-Package PDFiumCore             (Dtronix, .NET Standard 2.1 P/Invoke)
//        or Install-Package Pdfium.Net.SDK         (Patagames, commercial perpetual license)
using PdfiumViewer;
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string pdfPath = "document.pdf";

        using (var document = PdfDocument.Load(pdfPath))
        {
            StringBuilder text = new StringBuilder();

            for (int i = 0; i < document.PageCount; i++)
            {
                // PdfiumViewer's text extraction is per-page raw text via GetPdfText(int).
                // No layout / format metadata is exposed.
                string pageText = document.GetPdfText(i);
                text.AppendLine(pageText);
            }

            Console.WriteLine(text.ToString());
        }
    }
}
Imports PdfiumViewer
Imports System
Imports System.IO
Imports System.Text

Module Program
    Sub Main()
        Dim pdfPath As String = "document.pdf"

        Using document = PdfDocument.Load(pdfPath)
            Dim text As New StringBuilder()

            For i As Integer = 0 To document.PageCount - 1
                ' PdfiumViewer's text extraction is per-page raw text via GetPdfText(int).
                ' No layout / format metadata is exposed.
                Dim pageText As String = document.GetPdfText(i)
                text.AppendLine(pageText)
            Next

            Console.WriteLine(text.ToString())
        End Using
    End Sub
End Module
$vbLabelText   $csharpLabel

Après (IronPDF):

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        string pdfPath = "document.pdf";

        var pdf = PdfDocument.FromFile(pdfPath);
        string text = pdf.ExtractAllText();

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        string pdfPath = "document.pdf";

        var pdf = PdfDocument.FromFile(pdfPath);
        string text = pdf.ExtractAllText();

        Console.WriteLine(text);
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

        Dim pdfPath As String = "document.pdf"

        Dim pdf = PdfDocument.FromFile(pdfPath)
        Dim text As String = pdf.ExtractAllText()

        Console.WriteLine(text)
    End Sub
End Class
$vbLabelText   $csharpLabel

La différence est ici significative. PdfiumViewernécessite une boucle manuelle à travers chaque page avec GetPdfText(int), construisant un StringBuilder et gérant l'instruction using pour une élimination appropriée—et le texte retourné est brut par page, sans métadonnées de mise en page/format.

IronPDF simplifie cela à quelques lignes : charger avec PdfDocument.FromFile(), extraire avec ExtractAllText(), et sortir. La méthode ExtractAllText() gère automatiquement toutes les pages. Si vous avez besoin d'une extraction par page, vous pouvez utiliser pdf.Pages[index].Text. Consultez la documentation sur l'extraction de texte pour connaître les options supplémentaires.

Exemple 2 : fusion de fichiers PDF

Avant (PdfiumViewer):

// NuGet: Install-Package PdfiumViewer (representative open-source PDFium wrapper)
// PdfiumViewerand PDFiumCore do not expose PDF merge APIs - PDFium itself
// is a rendering / parsing engine, not a document-authoring engine.
// (Patagames Pdfium.Net.SDK exposes some document-edit operations but is commercial.)
using PdfiumViewer;
using System;
using System.IO;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<string> pdfFiles = new List<string>
        {
            "document1.pdf",
            "document2.pdf",
            "document3.pdf"
        };

        // To merge PDFs from a PDFium wrapper you must reach for another library
        // (PdfSharp, iText, IronPDF) or, with Patagames Pdfium.Net.SDK, use its
        // document-edit APIs.

        Console.WriteLine("PDF merging is not supported by PdfiumViewer/PDFiumCore.");
    }
}
// NuGet: Install-Package PdfiumViewer (representative open-source PDFium wrapper)
// PdfiumViewerand PDFiumCore do not expose PDF merge APIs - PDFium itself
// is a rendering / parsing engine, not a document-authoring engine.
// (Patagames Pdfium.Net.SDK exposes some document-edit operations but is commercial.)
using PdfiumViewer;
using System;
using System.IO;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<string> pdfFiles = new List<string>
        {
            "document1.pdf",
            "document2.pdf",
            "document3.pdf"
        };

        // To merge PDFs from a PDFium wrapper you must reach for another library
        // (PdfSharp, iText, IronPDF) or, with Patagames Pdfium.Net.SDK, use its
        // document-edit APIs.

        Console.WriteLine("PDF merging is not supported by PdfiumViewer/PDFiumCore.");
    }
}
Imports PdfiumViewer
Imports System
Imports System.IO
Imports System.Collections.Generic

Module Program
    Sub Main()
        Dim pdfFiles As New List(Of String) From {
            "document1.pdf",
            "document2.pdf",
            "document3.pdf"
        }

        ' To merge PDFs from a PDFium wrapper you must reach for another library
        ' (PdfSharp, iText, IronPDF) or, with Patagames Pdfium.Net.SDK, use its
        ' document-edit APIs.

        Console.WriteLine("PDF merging is not supported by PdfiumViewer/PDFiumCore.")
    End Sub
End Module
$vbLabelText   $csharpLabel

Après (IronPDF):

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        List<string> pdfFiles = new List<string>
        {
            "document1.pdf",
            "document2.pdf",
            "document3.pdf"
        };

        // PdfDocument.Merge accepts an IEnumerable<PdfDocument>, so load each file first.
        var docs = pdfFiles.Select(path => PdfDocument.FromFile(path)).ToList();
        var merged = PdfDocument.Merge(docs);
        merged.SaveAs("merged.pdf");

        Console.WriteLine("PDFs merged successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        List<string> pdfFiles = new List<string>
        {
            "document1.pdf",
            "document2.pdf",
            "document3.pdf"
        };

        // PdfDocument.Merge accepts an IEnumerable<PdfDocument>, so load each file first.
        var docs = pdfFiles.Select(path => PdfDocument.FromFile(path)).ToList();
        var merged = PdfDocument.Merge(docs);
        merged.SaveAs("merged.pdf");

        Console.WriteLine("PDFs merged successfully");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Linq

Module Program
    Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

        Dim pdfFiles As New List(Of String) From {
            "document1.pdf",
            "document2.pdf",
            "document3.pdf"
        }

        ' PdfDocument.Merge accepts an IEnumerable(Of PdfDocument), so load each file first.
        Dim docs = pdfFiles.Select(Function(path) PdfDocument.FromFile(path)).ToList()
        Dim merged = PdfDocument.Merge(docs)
        merged.SaveAs("merged.pdf")

        Console.WriteLine("PDFs merged successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

Cet exemple met en évidence un écart de capacité. Les wrappers PDFium gratuits (PdfiumViewer, PDFiumCore) n'exposent pas d'APIs de fusion; Patagames Pdfium.Net.SDK expose certaines opérations d'édition de documents mais est commercial.

IronPDF propose une fusion native avec la méthode statique PdfDocument.Merge(), qui prend un IEnumerable<PdfDocument>—chargez chaque fichier d'entrée avec PdfDocument.FromFile() d'abord, puis fusionnez les documents résultants. Le résultat est un nouveau PdfDocument que vous enregistrez avec SaveAs(). En savoir plus sur la fusion et la division de PDF.

Exemple 3 : Conversion HTML vers PDF

Avant (PdfiumViewer):

// NuGet: Install-Package PdfiumViewer (representative PDFium wrapper)
// PDFium is a PDF rendering / parsing engine. It has NO HTML parser, so no
// PDFium .NET wrapper (PdfiumViewer, PdfiumViewer.Updated, PDFiumCore,
// Pdfium.Net.SDK) can convert HTML to PDF on its own.
using PdfiumViewer;
using System;
using System.IO;
using System.Drawing.Printing;

class Program
{
    static void Main()
    {
        // PDFium has no native HTML-to-PDF capability.
        // Produce the PDF with another engine (wkhtmltopdf, headless Chromium,
        // IronPDF, etc.) and then load it with PdfDocument.Load(...) for rendering.
        string htmlContent = "<h1>Hello World</h1>";

        Console.WriteLine("HTML to PDF conversion is not supported by PDFium.");
    }
}
// NuGet: Install-Package PdfiumViewer (representative PDFium wrapper)
// PDFium is a PDF rendering / parsing engine. It has NO HTML parser, so no
// PDFium .NET wrapper (PdfiumViewer, PdfiumViewer.Updated, PDFiumCore,
// Pdfium.Net.SDK) can convert HTML to PDF on its own.
using PdfiumViewer;
using System;
using System.IO;
using System.Drawing.Printing;

class Program
{
    static void Main()
    {
        // PDFium has no native HTML-to-PDF capability.
        // Produce the PDF with another engine (wkhtmltopdf, headless Chromium,
        // IronPDF, etc.) and then load it with PdfDocument.Load(...) for rendering.
        string htmlContent = "<h1>Hello World</h1>";

        Console.WriteLine("HTML to PDF conversion is not supported by PDFium.");
    }
}
Imports PdfiumViewer
Imports System
Imports System.IO
Imports System.Drawing.Printing

Class Program
    Shared Sub Main()
        ' PDFium has no native HTML-to-PDF capability.
        ' Produce the PDF with another engine (wkhtmltopdf, headless Chromium,
        ' IronPDF, etc.) and then load it with PdfDocument.Load(...) for rendering.
        Dim htmlContent As String = "<h1>Hello World</h1>"

        Console.WriteLine("HTML to PDF conversion is not supported by PDFium.")
    End Sub
End Class
$vbLabelText   $csharpLabel

Après (IronPDF):

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        var renderer = new ChromePdfRenderer();
        string htmlContent = "<h1>Hello World</h1>";

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

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        var renderer = new ChromePdfRenderer();
        string htmlContent = "<h1>Hello World</h1>";

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

        Console.WriteLine("PDF created successfully");
    }
}
Imports IronPdf
Imports System

Module Program
    Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

        Dim renderer As New ChromePdfRenderer()
        Dim htmlContent As String = "<h1>Hello World</h1>"

        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")

        Console.WriteLine("PDF created successfully")
    End Sub
End Module
$vbLabelText   $csharpLabel

Cet exemple illustre la différence de capacité la plus importante. PDFium n'a pas de parseur HTML, donc aucun wrapper .NET autour ne peut convertir HTML en PDF seul.

IronPDF propose une conversion native de HTML en PDF via ChromePdfRenderer, qui utilise un moteur Chromium en interne pour un rendu précis du HTML, CSS, et JavaScript. La méthode RenderHtmlAsPdf() convertit directement les chaînes HTML en documents PDF.IronPDF peut également rendre des URL avec RenderUrlAsPdf() et des fichiers HTML avec RenderHtmlFileAsPdf(). Consultez la documentation HTML vers PDF pour des exemples complets.


Suppression des dépendances natives

L'un des avantages les plus significatifs de la migration d'un wrapper PDFium vers IronPDF est l'élimination de la gestion des binaires natifs.

Avant (wrapper PDFium) - Déploiement complexe

MyApp/
├── bin/
│ ├─── MyApp.dll
│   ├── PdfiumViewer.dll      # or PDFiumCore.dll / Patagames.Pdf.dll
│ ├── x86/
│ │ └── pdfium.dll
│ └── x64/
│ └── pdfium.dll
├── durées d&#39;exécution/
│ ├── win-x86/native/
│ │ └── pdfium.dll
│   ├── win-x64/native/
│ │ └── pdfium.dll
│   ├── linux-x64/native/
│   │   └── libpdfium.so
│   └── osx-x64/native/
│       └── libpdfium.dylib

Après (IronPDF) - Déploiement propre

MyApp/
├── bin/
│ ├─── MyApp.dll
│ └── IronPDF.dll # Everything included

Supprimer les références binaires natives

# Delete native PDFium binaries
rm -rf x86/x64/runtimes/

# Remove from .csproj
# Delete any <Content Include="pdfium.dll" /> entries
# Delete any <None Include="x86/pdfium.dll" /> entries
# Delete native PDFium binaries
rm -rf x86/x64/runtimes/

# Remove from .csproj
# Delete any <Content Include="pdfium.dll" /> entries
# Delete any <None Include="x86/pdfium.dll" /> entries
SHELL

Notesde migration essentielles

Conversion de l'échelle en DPI

La méthode Render(...) de PdfiumViewerprend explicitement dpiX/dpiY et le rendu sous-jacent de PDFium est échelle-dépendant (1.0 = 72 DPI).IronPDF utilise le DPI directement :

// Formula:IronPDF DPI = 72 × PDFium scale
// PDFium scale 2.0 →IronPDF DPI 144
pdf.RasterizeToImageFiles("*.png", DPI: 144);
// Formula:IronPDF DPI = 72 × PDFium scale
// PDFium scale 2.0 →IronPDF DPI 144
pdf.RasterizeToImageFiles("*.png", DPI: 144);
' Formula: IronPDF DPI = 72 × PDFium scale
' PDFium scale 2.0 → IronPDF DPI 144
pdf.RasterizeToImageFiles("*.png", DPI:=144)
$vbLabelText   $csharpLabel

Modification de la méthode de chargement des documents

// PdfiumViewer
PdfDocument.Load(path)

// IronPDF
PdfDocument.FromFile(path)
// PdfiumViewer
PdfDocument.Load(path)

// IronPDF
PdfDocument.FromFile(path)
' PdfiumViewer
PdfDocument.Load(path)

' IronPDF
PdfDocument.FromFile(path)
$vbLabelText   $csharpLabel

Enregistrer le changement de méthode

// PdfiumViewer(takes a Stream)
document.Save(stream)

//IronPDF(takes a path)
pdf.SaveAs(path)
// PdfiumViewer(takes a Stream)
document.Save(stream)

//IronPDF(takes a path)
pdf.SaveAs(path)
' PdfiumViewer(takes a Stream)
document.Save(stream)

' IronPDF(takes a path)
pdf.SaveAs(path)
$vbLabelText   $csharpLabel

Simplification du modèle d'élimination

// PdfiumViewer: explicit disposal of document and the rendered Image
using (var document = PdfDocument.Load(path))
using (var bitmap = document.Render(0, 1024, 768, 96, 96, PdfRenderFlags.None))
{
    bitmap.Save("output.png");
}

// IronPDF: Simplified
var pdf = PdfDocument.FromFile(path);
pdf.RasterizeToImageFiles("output.png");
// PdfiumViewer: explicit disposal of document and the rendered Image
using (var document = PdfDocument.Load(path))
using (var bitmap = document.Render(0, 1024, 768, 96, 96, PdfRenderFlags.None))
{
    bitmap.Save("output.png");
}

// IronPDF: Simplified
var pdf = PdfDocument.FromFile(path);
pdf.RasterizeToImageFiles("output.png");
Imports PdfiumViewer

' PdfiumViewer: explicit disposal of document and the rendered Image
Using document = PdfDocument.Load(path)
    Using bitmap = document.Render(0, 1024, 768, 96, 96, PdfRenderFlags.None)
        bitmap.Save("output.png")
    End Using
End Using

' IronPDF: Simplified
Dim pdf = PdfDocument.FromFile(path)
pdf.RasterizeToImageFiles("output.png")
$vbLabelText   $csharpLabel

Suppression du code spécifique à la plateforme

// PDFium wrapper: required platform detection / RID-specific binaries
#if WIN64
    // Load x64 pdfium.dll
#else
    // Load x86 pdfium.dll
#endif

// IronPDF: Remove all platform-specific code
// Just use the API directly
// PDFium wrapper: required platform detection / RID-specific binaries
#if WIN64
    // Load x64 pdfium.dll
#else
    // Load x86 pdfium.dll
#endif

// IronPDF: Remove all platform-specific code
// Just use the API directly
$vbLabelText   $csharpLabel

Résumé de la comparaison des fonctionnalités

Fonction Wrappers .NET pour PDFium IronPDF
Charger le PDF Oui Oui
Rendu à l'image Oui Oui
Extraire le texte Oui (base, par page) Oui (ordre logique / visuel)
Page Info Oui Oui
Créer à partir de HTML None Oui
Créer à partir d'une URL None Oui
Fusionner des PDF Wrappers gratuits : non ; Patagames : partiel Oui
Diviser les PDF Wrappers gratuits : non ; Patagames : partiel Oui
Ajouter des filigranes Non intégré Oui
En-têtes/Pieds de page Non intégré Oui
Remplissage de formulaires Wrappers gratuits : non ; Patagames : oui Oui
Signatures numériques Wrappers gratuits : non ; Patagames : oui Oui
Protection par mot de passe Wrappers gratuits : non ; Patagames : oui Oui
Dépendances natives Les exigences sont les suivantes Inclus / géré par NuGet
Multiplateforme Complexe (binaires natifs par RID) Automatique
Gestion de la mémoire Mise au rebut du manuel Simplifié

Liste de contrôle de la migration

Pré-migration

  • Identifier quel wrapper PDFium est utilisé (PdfiumViewer / PdfiumViewer.Updated / PDFiumCore / Pdfium.Net.SDK)
  • Documenter les dimensions de rendu actuelles / DPI / échelles utilisées
  • Lister les emplacements des binaires natifs dans le projet (par RID)
  • Vérifier le code de chargement spécifique à la plateforme
  • Identifier les besoins en matière de création de PDF (utilisez-vous actuellement des outils distincts ?)
  • Examiner les schémas d'élimination en vue de la conversion
  • Obtenir une clé de licence IronPDF

Modifications du paquet

  • Supprimez le(s) package(s) NuGet du wrapper PDFium : PdfiumViewer, PdfiumViewer.Updated, PDFiumCore, ou Pdfium.Net.SDK
  • Supprimez les binaires natifs pdfium.dll / .so / .dylib des dossiers x86/, x64/, runtimes/
  • Supprimer la compilation conditionnelle spécifique à la plateforme
  • Mettre à jour le fichier .csproj pour supprimer les références aux binaires natifs
  • Installez le package NuGet IronPdf : dotnet add package IronPdf

Modifications du code

  • Ajouter la configuration de la clé de licence au démarrage
  • Remplacez PdfDocument.Load() par PdfDocument.FromFile()
  • Remplacez document.Save() par pdf.SaveAs()
  • Remplacez les boucles document.GetPdfText(i) par pdf.ExtractAllText()
  • Convertir les facteurs d'échelle en valeurs DPI (DPI = 72 × échelle)
  • Simplifier les modèles de suppression (supprimer les instructions using imbriquées)
  • Supprimer le code spécifique à la plateforme

Après la migration

  • Tester la qualité du rendu.
  • Comparer les résultats d'extraction de texte
  • Test du déploiement multiplateforme
  • Ajouter de nouvelles fonctionnalités (HTML vers PDF, fusion, filigranes, sécurité)
  • Mise à jour de la documentation

Veuillez noterPDFium est un projet de Google LLC, publié sous BSD-3-Clause. PdfiumViewer, PDFiumCore, et Pdfium.Net.SDK sont des marques de leurs propriétaires respectifs (pvginkel, Dtronix, et Patagames Software Ltd, respectivement). Ce site n'est pas affilié, soutenu, ou sponsorisé par Google, le projet Chromium ou n'importe lequel des auteurs de wrappers. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.

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

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi