Comment migrer de C# à IronPDF en C#
Pourquoi migrer de pdforgeà IronPDF
Compréhension de pdforge
pdforge est une API de génération de PDF basée sur le cloud, qui offre un moyen simple de produire des fichiers PDF en s'intégrant à votre application par le biais d'appels API. En confiant la création de PDF à une API externe, les développeurs peuvent simplifier le processus de développement. Cependant, pdforgeprésente des inconvénients tels que des dépendances externes, des options de personnalisation limitées et des coûts d'abonnement permanents dont les développeurs doivent être conscients.
Le problème de la dépendance de l'API Cloud
pdforge traite tous les documents sur des serveurs cloud externes. Cette architecture pose des problèmes importants pour les applications de production :
-
Traitement sur serveur externe : Chaque PDF que vous générez nécessite l'envoi de vos données HTML aux serveurs de pdforge ; vos documents quittent votre infrastructure.
-
Risques liés à la confidentialité et à la conformité : des données sensibles transitent par Internet vers des serveurs tiers. Lorsqu'ils utilisent pdforge, les développeurs doivent tenir compte des problèmes de sécurité liés à l'envoi de données à une API externe. Si le contenu du PDF contient des informations sensibles, cela peut constituer un facteur critique.
-
Frais d'abonnement récurrents : Les frais mensuels s'accumulent indéfiniment sans transfert de propriété. Le modèle SaaS de pdforgeengendre des dépenses opérationnelles continues susceptibles de s'accumuler au fil du temps.
-
Dépendance à Internet : aucune génération de PDF lorsque le réseau est indisponible.
-
Limites de débit : les plafonds d'utilisation des API peuvent limiter le volume des applications.
- Latence du réseau : le temps d'aller-retour ajoute des secondes à chaque génération de PDF.
Comparaison entre Pdforge et IronPDF
| Fonction | pdforge | IronPDF |
|---|---|---|
| Type de déploiement | API basée sur le cloud | Bibliothèque locale |
| Dépendances | Nécessite une authentification Internet et API | Aucune dépendance externe |
| Personnalisation | Contrôle limité sur la génération de PDF | Contrôle total de la personnalisation |
| Structure des coûts | Abonnement en cours | Option d'achat unique |
| Sécurité | Problèmes potentiels liés aux données envoyées sur le web | Le traitement des données se fait entièrement dans l'environnement local |
| Complexité de l'installation | Installation initiale plus facile grâce à la manipulation externe | Nécessite plus d'installation et de configuration initiales |
IronPDF se différencie en fournissant une bibliothèque entièrement locale, accordant aux développeurs un contrôle total sur le processus de création de PDF. Ceci est particulièrement avantageux pour les applications où le traitement interne des fichiers est préféré, ou lorsque les appels d'API externes posent des problèmes de sécurité.IronPDFtraite tout localement, ce qui minimise ces risques.
Pour les équipes qui prévoient l'adoption de .NET 10 et C# 14 d'ici 2025 et 2026,IronPDFconstitue une base de traitement local qui élimine la dépendance au cloud tout en ajoutant des fonctionnalités complètes de manipulation des PDF.
Avant de commencer
Prérequis
- Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Accès à NuGet : possibilité d'installer des packages NuGet
- Licence IronPDF : Obtenez votre clé de licence sur IronPDF
Modifications du paquet NuGet
# Remove pdforgepackages
dotnet remove package pdforge
dotnet remove package PdfForge
# Install IronPDF
dotnet add package IronPdf
# Remove pdforgepackages
dotnet remove package pdforge
dotnet remove package PdfForge
# Install IronPDF
dotnet add package IronPdf
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"
Identifier l'utilisation de pdforge
# Find pdforgeusage
grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" .
# Find placeholder patterns to migrate
grep -r "{totalPages}" --include="*.cs" .
# Find pdforgeusage
grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" .
# Find placeholder patterns to migrate
grep -r "{totalPages}" --include="*.cs" .
Référence API complète
Modifications de l'espace de nommage
// Before: pdforge
using PdfForge;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: pdforge
using PdfForge;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
' Before: pdforge
Imports PdfForge
Imports System.IO
' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
Mappages de classes de base
| pdforge | IronPDF |
|---|---|
HtmlToPdfConverter |
ChromePdfRenderer |
PdfClient |
ChromePdfRenderer |
PageSize.A4 |
PdfPaperSize.A4 |
PageOrientation.Landscape |
PdfPaperOrientation.Landscape |
Type de retour : byte[] |
PdfDocument |
Mise en correspondance des méthodes
| pdforge | IronPDF |
|---|---|
converter.ConvertHtmlString(html) |
renderer.RenderHtmlAsPdf(html) |
converter.ConvertUrl(url) |
renderer.RenderUrlAsPdf(url) |
File.WriteAllBytes(path, bytes) |
pdf.SaveAs(path) |
Type de retour : byte[] |
pdf.BinaryData |
Mappages de configuration
| pdforge | IronPDF(RenderingOptions) |
|---|---|
converter.PageSize = PageSize.A4 |
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 |
converter.Orientation = PageOrientation.Landscape |
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape |
Footer = "Page {page} of {totalPages}" |
TextFooter = new TextHeaderFooter { CenterText = "Page {page} of {total-pages}" } |
Nouvelles fonctionnalités non disponibles dans pdforge
| Fonctionnalité d'IronPDF | Description du projet |
|---|---|
PdfDocument.Merge() |
Combiner plusieurs PDF |
pdf.ExtractAllText() |
Extraction de texte à partir de PDF |
pdf.ApplyWatermark() |
Ajouter des filigranes |
pdf.SecuritySettings |
Protection par mot de passe |
pdf.Form |
Remplissage de formulaires |
pdf.SignWithDigitalSignature() |
Signatures numériques |
Exemples de migration de code
Exemple 1 : Conversion d'une chaîne HTML en fichier PDF
Avant (pdforge):
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdf);
}
}
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdf);
}
}
Imports PdfForge
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New HtmlToPdfConverter()
Dim html = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = converter.ConvertHtmlString(html)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Class
Après (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
La différence fondamentale réside dans le modèle de traitement et le type de retour. pdforgeutilise HtmlToPdfConverter avec ConvertHtmlString() qui renvoie un tableau byte[]—vous devez ensuite utiliser File.WriteAllBytes() pour enregistrer le résultat.
IronPDF utilise ChromePdfRenderer avec RenderHtmlAsPdf() qui renvoie un objet PdfDocument. Cet objet peut être enregistré directement avec SaveAs(), ou vous pouvez accéder à pdf.BinaryData si vous avez besoin des octets bruts. Le PdfDocument permet également la manipulation (ajouter des filigranes, fusionner avec d'autres PDF, ajouter une sécurité) avant l'enregistrement. Consultez la documentation HTML vers PDF pour des exemples complets.
Exemple 2 : Conversion d'une URL en PDF
Avant (pdforge):
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var pdf = converter.ConvertUrl("https://example.com");
File.WriteAllBytes("webpage.pdf", pdf);
}
}
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var pdf = converter.ConvertUrl("https://example.com");
File.WriteAllBytes("webpage.pdf", pdf);
}
}
Imports PdfForge
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New HtmlToPdfConverter()
Dim pdf = converter.ConvertUrl("https://example.com")
File.WriteAllBytes("webpage.pdf", pdf)
End Sub
End Class
Après (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
pdforge utilise ConvertUrl() sur la classe HtmlToPdfConverter, renvoyant des octets que vous écrivez avec File.WriteAllBytes().IronPDFutilise RenderUrlAsPdf() sur ChromePdfRenderer, renvoyant un PdfDocument avec la méthode intégrée SaveAs().
Le principal avantage d'IronPDF est que l'URL est récupérée et rendue localement à l'aide d'un moteur Chromium - aucune donnée n'est envoyée à des serveurs externes. IronPDF, étant une bibliothèque locale, peut offrir de meilleures performances car il n'y a pas de temps d'aller-retour impliqué dans les requêtes web. En savoir plus sur la conversion d'URL en PDF.
Exemple 3 : Fichier HTML vers PDF avec des paramètres personnalisés
Avant (pdforge):
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
var htmlContent = File.ReadAllText("input.html");
var pdf = converter.ConvertHtmlString(htmlContent);
File.WriteAllBytes("output.pdf", pdf);
}
}
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
var htmlContent = File.ReadAllText("input.html");
var pdf = converter.ConvertHtmlString(htmlContent);
File.WriteAllBytes("output.pdf", pdf);
}
}
Imports PdfForge
Imports System.IO
Class Program
Shared Sub Main()
Dim converter As New HtmlToPdfConverter()
converter.PageSize = PageSize.A4
converter.Orientation = PageOrientation.Landscape
Dim htmlContent As String = File.ReadAllText("input.html")
Dim pdf As Byte() = converter.ConvertHtmlString(htmlContent)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Class
Après (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
var htmlContent = System.IO.File.ReadAllText("input.html");
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
var htmlContent = System.IO.File.ReadAllText("input.html");
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
Dim htmlContent = System.IO.File.ReadAllText("input.html")
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
End Sub
End Class
Cet exemple illustre la différence entre les modèles de configuration. pdforgedéfinit les propriétés directement sur l'objet convertisseur (converter.PageSize = PageSize.A4, converter.Orientation = PageOrientation.Landscape).
IronPDF utilise la propriété RenderingOptions avec des énumérations fortement typées : renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 et renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape. Ces outils offrent une prise en charge IntelliSense et une sécurité de type au moment de la compilation. NotezIronPDFnécessite l'importation de l'espace de noms IronPdf.Rendering pour les énumérations de format et d'orientation du papier. Voir les tutoriels pour plus d'exemples de configuration.
Notes de migration essentielles
Changement de type de retour
pdforge renvoie byte[];IronPDFrenvoie PdfDocument:
// pdforge: Returns byte[]
byte[] pdfBytes = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Direct save
byte[] bytes = pdf.BinaryData; // Get bytes if needed
// pdforge: Returns byte[]
byte[] pdfBytes = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Direct save
byte[] bytes = pdf.BinaryData; // Get bytes if needed
' pdforge: Returns byte()
Dim pdfBytes As Byte() = converter.ConvertHtmlString(html)
File.WriteAllBytes("output.pdf", pdfBytes)
' IronPDF: Returns PdfDocument
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf") ' Direct save
Dim bytes As Byte() = pdf.BinaryData ' Get bytes if needed
Changement de classe de convertisseur
// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();
// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();
' pdforge: HtmlToPdfConverter
Dim converter As New HtmlToPdfConverter()
' IronPDF: ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()
Modification des noms de méthode
// pdforgemethods
converter.ConvertHtmlString(html)
converter.ConvertUrl(url)
//IronPDFmethods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)
// pdforgemethods
converter.ConvertHtmlString(html)
converter.ConvertUrl(url)
//IronPDFmethods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)
' pdforgemethods
converter.ConvertHtmlString(html)
converter.ConvertUrl(url)
' IronPDFmethods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)
Enregistrer le changement de méthode
// pdforge: Manual file write
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Built-in save method
pdf.SaveAs("output.pdf");
// pdforge: Manual file write
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Built-in save method
pdf.SaveAs("output.pdf");
' pdforge: Manual file write
File.WriteAllBytes("output.pdf", pdfBytes)
' IronPDF: Built-in save method
pdf.SaveAs("output.pdf")
Modification de l'emplacement de la configuration
pdforge utilise les propriétés du convertisseur ;IronPDFutilise RenderingOptions :
// pdforge: Properties on converter
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
// IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// pdforge: Properties on converter
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
// IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
' pdforge: Properties on converter
converter.PageSize = PageSize.A4
converter.Orientation = PageOrientation.Landscape
' IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
Syntaxe de l'en-tête et du pied de page
Si vous utilisez des numéros de page dans les en-têtes ou les pieds de page, la syntaxe des espaces réservés est différente :
// pdforgeplaceholders
"Page {page} of {totalPages}"
//IronPDFplaceholders
"Page {page} of {total-pages}" // Note: hyphen in total-pages
// pdforgeplaceholders
"Page {page} of {totalPages}"
//IronPDFplaceholders
"Page {page} of {total-pages}" // Note: hyphen in total-pages
' pdforgeplaceholders
"Page {page} of {totalPages}"
' IronPDFplaceholders
"Page {page} of {total-pages}" ' Note: hyphen in total-pages
Nouvelles capacités après la migration
Après avoir migré vers IronPDF, vous bénéficiez de fonctionnalités que pdforgene peut pas vous offrir :
Fusion de fichiers PDF
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
Extraction de texte
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim allText As String = pdf.ExtractAllText()
Marques de fond
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>")
Protection par mot de passe
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"
Résumé de la comparaison des fonctionnalités
| Fonction | pdforge | IronPDF |
|---|---|---|
| HTML vers PDF | ✓ | ✓ |
| URL vers PDF | ✓ | ✓ |
| Paramètres de la page | ✓ | ✓ |
| Capacité hors ligne | ✗ | ✓ |
| Traitement local | ✗ | ✓ |
| Fusionner des PDF | ✗ | ✓ |
| Diviser les PDF | ✗ | ✓ |
| Extraire le texte | ✗ | ✓ |
| Filigranes | ✗ | ✓ |
| Remplissage de formulaires | ✗ | ✓ |
| Signatures numériques | ✗ | ✓ |
| Protection par mot de passe | ✗ | ✓ |
| Pas de limite de tarif | ✗ | ✓ |
| Licence unique | ✗ | ✓ |
Liste de contrôle de la migration
Pré-migration
- Inventorier tous les appels à l'API pdforgedans le code source
- Options de configuration actuelles du document utilisées (taille de page, orientation)
- Identifier les espaces réservés d'en-tête/de pied de page à mettre à jour (
{totalPages}→{total-pages}) - Planifier le stockage de la clé de licenceIronPDF(variables d'environnement recommandées)
- Commencez par tester avec une licence d'essaiIronPDF.
Modifications du paquet
- Supprimer le package NuGet
pdforge - Supprimer le package NuGet
PdfForge - Installez le package NuGet
IronPdf:dotnet add package IronPdf
Modifications du code
- Mettre à jour toutes les importations d'espace de noms (
using PdfForge;→using IronPdf;) - Ajoutez
using IronPdf.Rendering;pour les énumérations de format et d'orientation du papier - Remplacez
HtmlToPdfConverterparChromePdfRenderer - Remplacez
ConvertHtmlString()parRenderHtmlAsPdf() - Remplacez
ConvertUrl()parRenderUrlAsPdf() - Remplacez
File.WriteAllBytes()parpdf.SaveAs() - Déplacer la propriété
PageSizeversRenderingOptions.PaperSize - Déplacer la propriété
OrientationversRenderingOptions.PaperOrientation - Mise à jour des noms d'énumération (
PageSize.A4→PdfPaperSize.A4) - Mise à jour des noms d'énumération (
PageOrientation.Landscape→PdfPaperOrientation.Landscape) - Mettre à jour la syntaxe des espaces réservés dans les en-têtes/pieds de page
Après la migration
- Testez la qualité de la sortie PDF en fonction des attentes
- Vérifier que le fonctionnement hors ligne fonctionne
- Supprimer les identifiants API de la configuration
- Ajouter de nouvelles fonctionnalités (fusion, filigranes, sécurité) selon les besoins

