Cette page peut contenir du texte traduit automatiquement.
Compresser des documents PDF en C# et VB.NET
Dans de nombreux cas, il est courant de vouloir compresser et optimiser des documents PDF. Les documents PDF plus petits sont plus faciles à transférer sur le réseau et moins coûteux à stocker. Réduire la taille des fichiers PDF est particulièrement important pour l’archivage.

Bibliothèque .NET pour optimiser des documents PDF
Utilisez la bibliothèque Docotic.Pdf pour compresser des documents PDF dans des applications .NET Framework et .NET Core. La bibliothèque est disponible sur NuGet et sur notre site. Obtenez la bibliothèque et une clé de licence gratuite à durée limitée sur la page Télécharger la bibliothèque PDF C# .NET.
Docotic.Pdf fournit différents moyens d’optimisation :
- optimiser les objets PDF
- supprimer les objets PDF dupliqués (polices, images, etc.)
- compresser les images
- créer des sous-ensembles de polices
- supprimer les métadonnées
- supprimer les informations de structure
- supprimer les ressources inutilisées
- supprimer les données privées de l’application
- aplatir les champs de formulaire et les annotations
- supprimer l’intégration des polices
Vous pouvez utiliser tout ce qui précède pour obtenir le meilleur taux de compression pour vos documents PDF. Consultez l’exemple Compresser un document PDF dans .NET pour voir toutes ces techniques en action.
Examinons ces méthodes de compression plus en détail.
Optimiser les objets PDF
En interne, un fichier PDF est une collection d’objets PDF de bas niveau : dictionnaires, flux, tableaux et autres. Lors de l’enregistrement d’un fichier PDF, Docotic.Pdf applique par défaut les optimisations sans perte suivantes :
- compresse les flux PDF avec l’encodage Flate
- supprime les objets PDF inutilisés
- remplace les objets PDF indirects par leur contenu
- écrit les objets PDF sans mise en forme
- place les objets PDF dans des flux d’objets compressés
Cet exemple montre comment optimiser les objets PDF en C# :
using BitMiracle.Docotic.Pdf;
using var pdf = new PdfDocument("input.pdf");
var saveOptions = new PdfSaveOptions();
// Ces options sont activées par défaut et appliquées implicitement :
//saveOptions.Compression = PdfCompression.Flate;
//saveOptions.RemoveUnusedObjects = true;
//saveOptions.OptimizeIndirectObjects = true;
//saveOptions.UseObjectStreams = true;
//saveOptions.WriteWithoutFormatting = true;
pdf.Save("compressed.pdf", saveOptions);
Toutes ces optimisations n’affectent pas le contenu visible (texte, images, signets et tout le reste) du document PDF. Elles n’affectent que la manière dont les objets PDF sont écrits et compressés dans le fichier PDF de sortie.
La suppression des objets PDF inutilisés est importante pour les autres techniques décrites ci-dessous. Ne définissez pas la propriété PdfSaveOptions.RemoveUnusedObjects sur false sauf si vous avez de solides raisons de conserver les objets inutilisés.
Supprimer les objets dupliqués dans les documents PDF
Lorsque vous fusionnez des documents PDF, le PDF النات produit contient souvent des polices et des images dupliquées. Le remplacement des objets dupliqués aide à réduire la taille du fichier PDF produit. Voici l’exemple C# pour cette opération :
using var pdf = new PdfDocument("merged.pdf");
pdf.ReplaceDuplicateObjects();
pdf.Save("compressed.pdf");
Il est recommandé de supprimer les objets dupliqués avant de compresser les images ou de supprimer l’intégration des polices. Sinon, beaucoup de travail supplémentaire sera effectué pour optimiser les copies des mêmes images ou polices.
La méthode PdfDocument.ReplaceDuplicateObjects ne remplace pas les images inline. Si votre document contient des images inline, utilisez d’abord la méthode PdfCanvas.MoveInlineImagesToResources. La méthode convertira les images inline en images normales, puis la méthode ReplaceDuplicateObjects pourra également dédupliquer les images converties.
Compresser les images dans le PDF
L’optimisation des images PDF est généralement la méthode de compression la plus efficace pour les documents contenant des images matricielles.
La bibliothèque Docotic.Pdf fournit des méthodes intégrées pour recompresser les images PDF à l’aide des algorithmes de compression JPEG, CCITT Group 3 et 4 (fax), JPEG 2000 et zip/deflate. Vous pouvez également redimensionner ou réduire l’échelle des images afin de diminuer encore davantage la taille du fichier PDF. Vous pouvez aussi optimiser les images vous-même à l’aide d’un outil tiers, puis remplacer les images.
Consultez l’exemple Optimiser les images dans un document PDF en C# et VB.NET sur GitHub pour un exemple.
Créer des sous-ensembles de polices
Les documents PDF intègrent généralement les polices utilisées pour dessiner le texte. Les polices intégrées contiennent souvent des informations sur tous les glyphes pris en charge. La suppression des glyphes inutilisés dans un document PDF peut réduire considérablement la taille du fichier de sortie.
Cet exemple montre comment optimiser les polices PDF en C# :
using var pdf = new PdfDocument("text.pdf");
pdf.RemoveUnusedFontGlyphs();
pdf.Save("compressed.pdf");
La création de sous-ensembles n’affecte pas les polices utilisées dans les contrôles de texte variable, tels que les zones de texte ou les listes déroulantes.
Supprimer les métadonnées
Les documents PDF peuvent contenir des métadonnées XMP non compressées avec des informations sur l’auteur, les mots-clés, l’heure de création, etc. Les métadonnées n’affectent pas le contenu visible du document PDF.
Cet exemple montre comment supprimer les métadonnées d’un fichier PDF en C# :
using var pdf = new PdfDocument("metadata.pdf");
XmpMetadata xmp = pdf.Metadata;
xmp.Unembed();
pdf.Info.Clear(false);
pdf.Save("compressed.pdf");
Supprimer les informations de structure
Les documents PDF peuvent inclure des informations sur leur structure logique. Ces informations sont utilisées pour :
- produire des documents PDF balisés
- rendre le document PDF accessible aux technologies d’assistance
La suppression de ces informations aide à réduire la taille du fichier PDF. Mais le PDF ne sera plus balisé ni accessible aux technologies d’assistance. Cet exemple montre comment supprimer les informations de structure d’un PDF en C# :
using var pdf = new PdfDocument("tagged.pdf");
pdf.RemoveStructureInformation();
pdf.Save("compressed.pdf");
Supprimer les ressources inutilisées du PDF
Les pages PDF et les XObjects peuvent référencer davantage de polices, d’images ou de motifs qu’ils n’en utilisent. Vous pouvez utiliser la méthode PdfDocument.RemoveUnusedResources pour supprimer les ressources inutilisées du PDF. Voici l’exemple C# :
using var pdf = new PdfDocument("input.pdf");
pdf.RemoveUnusedResources();
pdf.Save("compressed.pdf");
Supprimer les données privées de l’application du PDF
Les documents PDF produits par les logiciels Adobe peuvent inclure des données privées de l’application. Ces données sont stockées dans des dictionnaires page-piece.
Cet exemple montre comment nettoyer et compresser un PDF en C# en supprimant les dictionnaires page-piece :
using var pdf = new PdfDocument("input.pdf");
pdf.RemovePieceInfo();
pdf.Save("compressed.pdf");
Aplatir les champs de formulaire et les annotations PDF
Vous pouvez réduire la taille d’un document PDF avec un formulaire rempli en aplatissant les champs de formulaire. L’aplatissement remplacera les champs de formulaire par leur représentation visuelle. Les valeurs saisies seront conservées. Cet exemple C# montre comment aplatir tous les champs de formulaire PDF :
using var pdf = new PdfDocument("form.pdf");
pdf.FlattenControls();
pdf.Save("compressed.pdf");
Vous pouvez également aplatir toutes les annotations et tous les contrôles à l’aide de la méthode PdfDocument.FlattenWidgets.
La méthode PdfWidget.Flatten permet également d’aplatir des annotations ou des contrôles individuels.
Supprimer l’intégration des polices
L’intégration des polices PDF est parfaitement logique pour les polices personnalisées ou rares. En même temps, les polices largement disponibles comme Arial ou Verdana peuvent augmenter la taille du fichier PDF sans raison valable. Vous pouvez supprimer l’intégration des polices populaires disponibles sur vos plateformes cibles. Exemple de code C# :
using var pdf = new PdfDocument("input.pdf");
UnembedFonts(pdf);
pdf.Save("compressed.pdf");
/// <summary>
/// Cette méthode supprime l’intégration de toute police qui est :
/// * installée dans le système d’exploitation
/// * ou dont le nom est inclus dans la liste « always unembed »
/// * et dont le nom n’est pas inclus dans la liste « always keep ».
/// </summary>
private static void UnembedFonts(PdfDocument pdf)
{
string[] alwaysUnembedList = ["MyriadPro-Regular"];
string[] alwaysKeepList = ["ImportantFontName", "AnotherImportantFontName"];
using var ms = new MemoryStream();
foreach (PdfFont font in pdf.GetFonts())
{
if (!font.Embedded ||
font.EncodingName == "Built-In" ||
Array.Exists(alwaysKeepList, name => font.Name == name))
{
continue;
}
if (font.Format == PdfFontFormat.TrueType || font.Format == PdfFontFormat.CidType2)
{
SystemFontLoader loader = SystemFontLoader.Instance;
ms.Position = 0;
if (loader.TryLoad(font.Name, font.Bold, font.Italic, ms))
{
font.Unembed();
continue;
}
}
if (Array.Exists(alwaysUnembedList, name => font.Name == name))
font.Unembed();
}
}
N’utilisez pas cette technique avec les documents PDF/A. Un document PDF/A doit intégrer toutes les polices.
Testez toujours les documents PDF avec des polices non intégrées sur vos systèmes d’exploitation cibles (Windows, Linux, macOS, iOS, Android) et dans vos visionneuses PDF (Adobe, Foxit, etc.).
Autres méthodes pour réduire la taille du PDF
De nombreuses méthodes d’optimisation sont mentionnées ci-dessus. Cependant, vous pouvez compresser encore davantage les documents PDF en supprimant le contenu non important. Docotic.Pdf permet de supprimer ces objets des documents PDF :
- annotations
- pièces jointes
- signets
- champs de formulaire
- pages
- scripts
- transparence
Vous pouvez également supprimer du texte, des images et des graphiques vectoriels des pages PDF. L’aplatissement du texte est également possible.
Conclusion
Vous pouvez utiliser la bibliothèque Docotic.Pdf pour compresser des PDF en C# et VB.NET. Docotic.Pdf fournit de nombreux moyens d’optimisation efficaces.
Téléchargez et essayez l’exemple complet Compresser un document PDF en C# et VB.NET depuis GitHub.
Contactez-nous, et nous vous conseillerons sur la manière d’obtenir le meilleur taux de compression pour vos documents PDF.