Comprimir documento PDF usando C#, VB.NET

Categoría del blog: PDF.NET

12.07.2024

El VintaSoft PDF .NET Plug-in permite comprimir y optimizar documentos PDF. También permite eliminar metadatos. Reducir el tamaño de un archivo PDF ayuda a reducir el tráfico de red al transferir archivos PDF y el espacio de almacenamiento que ocupan. Esto es especialmente útil en áreas como el archivado, el envío por correo electrónico y el uso de documentos PDF en aplicaciones web.

Para optimizar un documento PDF, el VintaSoft PDF .NET Plug-in puede realizar las siguientes acciones:

Empaquetar un documento PDF

El documento PDF puede contener recursos no utilizados. El VintaSoft PDF .NET Plug-in permite determinar y eliminar recursos no utilizados en el documento PDF.
También el documento PDF puede contener el historial de revisión del documento PDF. El VintaSoft PDF .NET Plug-in permite eliminar el historial de revisión del documento PDF.
También los recursos del documento PDF pueden comprimirse con un algoritmo de compresión no óptimo. El VintaSoft PDF .NET Plug-in puede comprimir recursos utilizando algoritmos de compresión más óptimos.
El documento PDF también contiene una tabla de referencias cruzadas sin comprimir si el archivo PDF usa el formato PDF 1.4 o anterior. El VintaSoft PDF .NET Plug-in puede guardar documentos PDF en formato PDF 1.5 o posterior y usar una tabla de referencias cruzadas comprimida.

Aquí hay un código C# que demuestra cómo cargar un documento PDF existente, eliminar recursos no utilizados del documento PDF, comprimir recursos PDF usados con un algoritmo de compresión óptimo y guardar el documento PDF con un formato PDF óptimo:
/// <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;
}


Optimice las fuentes en el documento PDF

Algunos glifos de fuentes no se utilizan para la representación de texto en un documento PDF. El VintaSoft PDF .NET Plug-in permite eliminar los glifos no utilizados de las fuentes en el documento PDF.

Aquí hay un código C# que demuestra cómo optimizar las fuentes en un documento PDF usando la clase 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);
}


Comprima imágenes en el documento PDF

Muchos documentos PDF contienen imágenes. El VintaSoft PDF .NET Plug-in permite disminuir la resolución y la profundidad de bits de color para las imágenes en el documento PDF para reducir el tamaño del archivo PDF.

Aquí se muestra código en C# que demuestra cómo reducir la resolución y la profundidad de bits de color de los recursos en un documento PDF mediante la clase 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);
}


Borrar contenido en un documento PDF.

Un documento PDF puede contener objetos no utilizados, por ejemplo: recursos, páginas, fuentes, imágenes, nombres y operadores de contenido. También puede contener recursos duplicados, por ejemplo, copias de imágenes o fuentes. El VintaSoft PDF .NET Plug-in puede determinar y eliminar objetos no utilizados y recursos duplicados en un documento PDF.

Aquí se muestra código en C# que demuestra cómo eliminar objetos no utilizados y recursos duplicados de un documento PDF mediante la clase 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);
}


Eliminar metadatos y otros elementos del documento PDF.

Un documento PDF puede contener objetos que no afectan la visualización de la página PDF, por ejemplo: metadatos, marcadores, archivos incrustados, formularios interactivos, miniaturas de página, estructura de árbol e información del documento. El VintaSoft PDF .NET Plug-in permite eliminar objetos del documento PDF si no son necesarios.

Aquí se muestra código en C# que muestra cómo eliminar objetos de un documento PDF con la clase 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);
}


Eliminar anotaciones del documento PDF

El VintaSoft PDF .NET Plug-in permite eliminar anotaciones de una página PDF si no son necesarias. También permite convertir anotaciones en gráficos (aplanar anotaciones) si estas deben mostrarse en la página PDF, pero el usuario no debería poder interactuar con ellas.

Aquí hay código C# que demuestra cómo convertir anotaciones en gráficos (aplanar anotaciones) y eliminar el formulario interactivo de un documento PDF usando la clase 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);
}