Comprimi documento PDF usando C#, VB.NET

Categoria del blog: PDF.NET

12.07.2024

Il VintaSoft PDF .NET Plug-in può essere utilizzato per la compressione e l'ottimizzazione di documenti PDF. Inoltre, il VintaSoft PDF .NET Plug-in può essere utilizzato per rimuovere i metadati dai documenti PDF. Ridurre le dimensioni di un file PDF può aiutare a ridurre il traffico di rete durante il trasferimento di file PDF e a ridurre lo spazio di archiviazione occupato dai file PDF. Questo è particolarmente utile in ambiti quali l'archiviazione, l'invio di e-mail e l'utilizzo di documenti PDF in applicazioni web.

Per ottimizzare un documento PDF, il VintaSoft PDF .NET Plug-in può eseguire le seguenti azioni:

Comprimi documento PDF

Il documento PDF può contenere risorse inutilizzate. Il VintaSoft PDF .NET Plug-in consente di individuare e rimuovere le risorse inutilizzate nel documento PDF.
Inoltre, il documento PDF può contenere la cronologia delle revisioni del documento PDF. Il VintaSoft PDF .NET Plug-in consente di rimuovere la cronologia delle revisioni dal documento PDF.
Anche le risorse del documento PDF possono essere compresse con un algoritmo di compressione non ottimale. Il VintaSoft PDF .NET Plug-in può comprimere le risorse utilizzando algoritmi di compressione più ottimali.
Inoltre, il documento PDF contiene una tabella di riferimenti incrociati non compressa se il file PDF utilizza il formato PDF 1.4 o precedente. Il VintaSoft PDF .NET Plug-in può salvare documenti PDF in formato PDF 1.5 o superiore e utilizzare una tabella di riferimenti incrociati compressa.

Ecco il codice C# che mostra come caricare un documento PDF esistente, rimuovere le risorse non utilizzate dal documento PDF, comprimere le risorse PDF utilizzate con un algoritmo di compressione ottimale e salvare il documento PDF nel formato PDF ottimale:
/// <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;
}


Ottimizza i font nel documento PDF

Alcuni glifi dei font non vengono utilizzati per il rendering del testo in un documento PDF. Il VintaSoft PDF .NET Plug-in consente di rimuovere i glifi non utilizzati dai font nel documento PDF.

Ecco il codice C# che mostra come ottimizzare i font in un documento PDF utilizzando 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);
}


Comprimi le immagini in un documento PDF

Molti documenti PDF contengono immagini. Il VintaSoft PDF .NET Plug-in consente di ridurre la risoluzione e la profondità di colore delle immagini nei documenti PDF, riducendo così le dimensioni del file.

Ecco il codice C# che illustra come ridurre la risoluzione e la profondità di bit del colore per le risorse nei documenti PDF utilizzando 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);
}


Cancella il contenuto nel documento PDF

Un documento PDF può contenere oggetti inutilizzati, ad esempio risorse, pagine, font, immagini, nomi, operatori di contenuto. Inoltre, un documento PDF può contenere duplicati di risorse, ad esempio copie di immagini o font. Il VintaSoft PDF .NET Plug-in può individuare e rimuovere oggetti inutilizzati e duplicati di risorse nei documenti PDF.

Ecco il codice C# che mostra come rimuovere oggetti non utilizzati e risorse duplicate da un documento PDF utilizzando 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);
}


Rimuovere metadati e altri elementi da un documento PDF

Un documento PDF può contenere oggetti che non influiscono sulla visualizzazione della pagina PDF, ad esempio: metadati, segnalibri, file incorporati, moduli interattivi, miniature di pagina, struttura ad albero, informazioni sul documento. Il VintaSoft PDF .NET Plug-in consente di rimuovere oggetti dal documento PDF se non sono necessari.

Ecco il codice C# che mostra come rimuovere oggetti da un documento PDF utilizzando 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);
}


Rimuovi le annotazioni dal documento PDF

Il VintaSoft PDF .NET Plug-in consente di rimuovere le annotazioni dalla pagina PDF se non sono necessarie. Inoltre, il VintaSoft PDF .NET Plug-in consente di convertire le annotazioni in grafici (appiattire le annotazioni) se le annotazioni devono essere visualizzate nella pagina PDF ma l'utente non deve essere in grado di interagire con esse.

Ecco il codice C# che dimostra come convertire le annotazioni in grafici (appiattire le annotazioni) e rimuovere il modulo interattivo dal documento PDF utilizzando 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);
}