Compression de documents PDF avec C# et VB.NET

Catégorie du blog: PDF.NET

12.07.2024

VintaSoft PDF .NET Plug-in peut être utilisé pour la compression et l'optimisation des documents PDF. VintaSoft PDF .NET Plug-in permet également de supprimer les métadonnées des documents PDF. Réduire la taille d'un fichier PDF contribue à diminuer le trafic réseau lors de son transfert et l'espace de stockage occupé. Ceci s'avère particulièrement utile pour l'archivage, l'envoi par courriel et l'utilisation de documents PDF dans des applications web.

Pour optimiser un document PDF, VintaSoft PDF .NET Plug-in peut effectuer les actions suivantes:

Compresser le document PDF

Un document PDF peut contenir des ressources inutilisées. VintaSoft PDF .NET Plug-in permet de les identifier et de les supprimer.
Un document PDF peut également contenir un historique des révisions. VintaSoft PDF .NET Plug-in permet de supprimer cet historique.
Les ressources du document PDF peuvent être compressées avec un algorithme non optimal. VintaSoft PDF .NET Plug-in permet de compresser les ressources avec des algorithmes plus performants.
Un document PDF peut également contenir une table de références croisées non compressée s'il utilise le format PDF 1.4 ou une version antérieure. VintaSoft PDF .NET Plug-in permet d'enregistrer un document PDF au format PDF 1.5 ou supérieur et d'utiliser une table de correspondance compressée.

Voici un exemple de code C# illustrant comment charger un document PDF existant, supprimer les ressources inutilisées, compresser les ressources utilisées avec un algorithme de compression optimal et enregistrer le document au format PDF optimal:
/// <summary>
/// Packs the PDF document.
/// </summary>
/// <param name="inPdfFilename">The input PDF filename.</param>
/// <param name="outPdfFilename">The output PDF filename.</param>
public static void PackDocument(string inPdfFilename, string outPdfFilename)
{
    // create compressor with empty compression settings
    Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand compressor =
        Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand.CreateEmptyCompressor();

    // specify that compressor must use maximum Flate compression level (best compression)
    compressor.FlateCompressionLevel = 9;
    // specify that compressor must recompress all resource that uses None, LZW, Flate compression using Flate compression
    compressor.RecompressFlateCompression = true;
    compressor.UseFlateInsteadLzwCompression = true;
    compressor.UseFlateInsteadNoneCompression = true;

    // specify that compressor must remove incremental update info and unused objects
    compressor.PackDocument = true;

    // if version of PDF document is lower than 1.7
    if (GetPdfDocumentVersion(inPdfFilename) < 17)
    {
        // set output format to PDF 1.7
        compressor.DocumentPackFormat = Vintasoft.Imaging.Pdf.PdfFormat.Pdf_17;
    }

    // compress PDF document
    compressor.Compress(inPdfFilename, outPdfFilename);
}

/// <summary>
/// Returns the PDF document version.
/// </summary>
/// <param name="pdfFilename">The PDF filename.</param>
/// <returns>The version number in dual-digit format (10,11,12,13,14,15,16,17,20,...).</returns>
private static int GetPdfDocumentVersion(string pdfFilename)
{
    using (Vintasoft.Imaging.Pdf.PdfDocument document = new Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename))
        return document.Format.VersionNumber;
}


Optimisation des polices dans un document PDF

Certains glyphes de police ne sont pas utilisés pour l'affichage du texte dans un document PDF. VintaSoft PDF .NET Plug-in permet de supprimer les glyphes inutilisés des polices du document PDF.

Voici un code C# qui montre comment optimiser les polices dans un document PDF à l'aide de la classe Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand:
/// <summary>
/// Subsets fonts in PDF document.
/// </summary>
/// <param name="inPdfFilename">The input PDF filename.</param>
/// <param name="outPdfFilename">The output PDF filename.</param>
public static void SubsetFonts(string inPdfFilename, string outPdfFilename)
{
    // create compressor with empty compression settings
    Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand compressor =
       Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand.CreateEmptyCompressor();

    // specify that compressor must subset fonts in PDF document
    compressor.SubsetFonts = true;

    // compress PDF document
    compressor.Compress(inPdfFilename, outPdfFilename);
}


Compresser les images dans un document PDF

De nombreux documents PDF contiennent des images. VintaSoft PDF .NET Plug-in permet de réduire la résolution et la profondeur de couleur des images dans un document PDF afin de diminuer la taille du fichier PDF.

Voici un exemple de code C# illustrant comment réduire la résolution et la profondeur de couleur des ressources d'un document PDF à l'aide de la classe Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand:
/// <summary>
/// Detects "read color depth" of PDF image resources and compress PDF document with intent to view in 150DPI.
/// </summary>
/// <param name="inPdfFilename">The input PDF filename.</param>
/// <param name="outPdfFilename">The output PDF filename.</param>
public static void CompressToViewIn150DPI(string inPdfFilename, string outPdfFilename)
{
    // create compressor that will compress PDF document using lossy compression algorithms
    Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand compressor =
       Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand.CreateLossyCompressor(150, false, false, false);

    // specify that compressor must use JPEG compression for color images
    compressor.ColorImagesCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg;
    // specify that compressor must set JPEG quality to 70
    compressor.ColorImagesCompressionSettings.JpegQuality = 70;

    // specify that compressor must detect if image is bitonal image and use optimal compression for bitonal image
    compressor.DetectBitonalImageResources = true;
    // specify that compressor must detect if image is black-white image and use optimal compression for black-white image
    compressor.DetectBlackWhiteImageResources = true;
    // specify that compressor must detect if image is grayscale image and use optimal compression for grayscale image
    compressor.DetectGrayscaleImageResources = true;

    // compress PDF document
    compressor.Compress(inPdfFilename, outPdfFilename);
}


Nettoyer le contenu d'un document PDF

Un document PDF peut contenir des objets inutilisés, tels que des ressources, des pages, des polices, des images, des noms et des opérateurs de contenu. Il peut également contenir des doublons de ressources, comme des copies d'images ou de polices. VintaSoft PDF .NET Plug-in permet de détecter et de supprimer les objets inutilisés et les doublons de ressources dans un document PDF.

Voici un exemple de code C# montrant comment supprimer les objets inutilisés et les ressources dupliquées d'un document PDF à l'aide de la classe Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand:
/// <summary>
/// Removes unused and duplicated resources in the PDF document.
/// </summary>
/// <param name="inPdfFilename">The input PDF filename.</param>
/// <param name="outPdfFilename">The output PDF filename.</param>
public static void RemoveUnsusedResources(string inPdfFilename, string outPdfFilename)
{
    // create compressor with empty compression settings
    Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand compressor =
       Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand.CreateEmptyCompressor();

    // specify that compressor must remove duplicate resources from PDF document
    compressor.RemoveDuplicateResources = true;
    // specify that compressor must remove unused names resources from PDF document
    compressor.RemoveUnusedNamedResources = true;
    // specify that compressor must remove unused names from PDF document
    compressor.RemoveUnusedNames = true;
    // specify that compressor must remove unused pages from PDF document
    compressor.RemoveUnusedPages = true;
    // specify that compressor must remove invalid bookmarks from PDF document
    compressor.RemoveInvalidBookmarks = true;
    // specify that compressor must remove invalid links from PDF document
    compressor.RemoveInvalidLinks = true;

    // compress PDF document
    compressor.Compress(inPdfFilename, outPdfFilename);
}


Suppression des métadonnées et autres éléments d'un document PDF

Un document PDF peut contenir des objets qui n'affectent pas l'affichage de la page, tels que: métadonnées, signets, fichiers incorporés, formulaires interactifs, miniatures de pages, arborescence, informations du document. VintaSoft PDF .NET Plug-in permet de supprimer les objets inutiles d'un document PDF.

Voici un exemple de code C# montrant comment supprimer des objets d'un document PDF à l'aide de la classe Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand:
/// <summary>
/// Removes metadata, bookmarks, document information, embedded files, embedded thumbnails, interactive form and structure tree of the PDF document.
/// </summary>
/// <param name="inPdfFilename">The input PDF filename.</param>
/// <param name="outPdfFilename">The output PDF filename.</param>
public static void RemoveObjects(string inPdfFilename, string outPdfFilename)
{
    // create compressor with empty compression settings
    Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand compressor =
       Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand.CreateEmptyCompressor();

    // specify that compressor must remove metadata from PDF document
    compressor.RemoveMetadata = true;
    // specify that compressor must remove bookmarks from PDF document
    compressor.RemoveBookmarks = true;
    // specify that compressor must remove document information from PDF document
    compressor.RemoveDocumentInformation = true;
    // specify that compressor must remove embedded files from PDF document
    compressor.RemoveEmbeddedFiles = true;
    // specify that compressor must remove embedded thumbnails from PDF document
    compressor.RemoveEmbeddedThumbnails = true;
    // specify that compressor must remove interactive form from PDF document
    compressor.RemoveInteractiveForm = true;
    // specify that compressor must remove structure tree from PDF document
    compressor.RemoveStructureTree = true;

    // compress PDF document
    compressor.Compress(inPdfFilename, outPdfFilename);
}


Supprimer les annotations du document PDF

VintaSoft PDF .NET Plug-in permet de supprimer les annotations d'une page PDF si elles sont inutiles. VintaSoft PDF .NET Plug-in permet également de convertir les annotations en graphiques (aplatir les annotations) si les annotations doivent être affichées sur la page PDF mais que l'utilisateur ne doit pas pouvoir interagir avec elles.

Voici un exemple de code C# montrant comment convertir des annotations en graphiques (aplatir les annotations) et supprimer les formulaires interactifs d'un document PDF à l'aide de la classe Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand:
/// <summary>
/// Flatten an annotations and remove intractive form of the PDF document.
/// </summary>
/// <param name="inPdfFilename">The input PDF filename.</param>
/// <param name="outPdfFilename">The output PDF filename.</param>
public static void FlattenAnnotations(string inPdfFilename, string outPdfFilename)
{
    // create compressor with empty compression settings
    Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand compressor =
       Vintasoft.Imaging.Pdf.Processing.PdfDocumentCompressorCommand.CreateEmptyCompressor();

    // specify that compressor must remove interactive form from PDF document
    compressor.RemoveInteractiveForm = true;
    // specify that compressor must flatten annotations in PDF document
    compressor.FlattenAnnotations = true;

    // compress PDF document
    compressor.Compress(inPdfFilename, outPdfFilename);
}