Comprimir documento PDF usando C# e VB.NET

Categoria do blog: PDF.NET

12.07.2024

O VintaSoft PDF .NET Plug-in pode ser usado para compressão e otimização de documentos PDF. Além disso, o VintaSoft PDF .NET Plug-in também pode ser usado para remover metadados de documentos PDF. Reduzir o tamanho de um arquivo PDF pode ajudar a diminuir o tráfego de rede durante a transferência de arquivos PDF e reduzir o espaço de armazenamento ocupado por eles. Isso é especialmente útil em áreas como arquivamento, envio por e-mail e uso de documentos PDF em aplicações web.

Para otimizar um documento PDF, o VintaSoft PDF .NET Plug-in pode executar as seguintes ações:

Empacotar documento PDF

O documento PDF pode conter recursos não utilizados. O VintaSoft PDF .NET Plug-in permite identificar e remover recursos não utilizados em um documento PDF.
O documento PDF também pode conter o histórico de revisões. O VintaSoft PDF .NET Plug-in permite remover o histórico de revisões do documento PDF.
Os recursos do documento PDF podem estar compactados com um algoritmo de compactação não otimizado. O VintaSoft PDF .NET Plug-in pode compactar os recursos usando algoritmos de compactação mais otimizados.
O documento PDF também pode conter uma tabela de referência cruzada não compactada se o arquivo PDF usar o formato PDF 1.4 ou anterior. O VintaSoft PDF .NET Plug-in pode salvar documentos PDF no formato 1.5 ou superior e usar tabelas de referência cruzada compactadas.

Aqui está um código C# que demonstra como carregar um documento PDF existente, remover recursos não utilizados, compactar os recursos utilizados com um algoritmo de compressão otimizado e salvar o documento PDF no formato ideal:
/// <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;
}


Otimizar fontes em documentos PDF

Alguns glifos de fontes não são usados ​​para a renderização de texto em um documento PDF. O VintaSoft PDF .NET Plug-in permite remover glifos não utilizados das fontes em documentos PDF.

Aqui está um código C# que demonstra como otimizar fontes em um documento PDF usando a 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);
}


Comprimir imagens em um documento PDF

Muitos documentos PDF contêm imagens. O VintaSoft PDF .NET Plug-in permite diminuir a resolução e a profundidade de bits de cor das imagens em documentos PDF, reduzindo assim o tamanho do arquivo.

Aqui está um código C# que demonstra como diminuir a resolução e a profundidade de bits de cor dos recursos em um documento PDF usando a 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);
}


Limpar conteúdo em um documento PDF

Um documento PDF pode conter objetos não utilizados, como recursos, páginas, fontes, imagens, nomes e operadores de conteúdo. Além disso, um documento PDF pode conter recursos duplicados, como cópias de imagens ou fontes. O VintaSoft PDF .NET Plug-in pode identificar e remover objetos não utilizados e recursos duplicados em um documento PDF.

Aqui está um código C# que demonstra como remover objetos não utilizados e recursos duplicados de um documento PDF usando a 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);
}


Remover metadados e outros elementos de um documento PDF

Um documento PDF pode conter objetos que não afetam a exibição da página, como metadados, marcadores, arquivos incorporados, formulários interativos, miniaturas de páginas, árvore de estrutura e informações do documento. O VintaSoft PDF .NET Plug-in permite remover objetos de um documento PDF caso eles não sejam necessários.

Aqui está um código C# que demonstra como remover objetos de um documento PDF usando a 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);
}


Remover anotações do documento PDF

O VintaSoft PDF .NET Plug-in permite remover anotações de uma página PDF caso elas não sejam necessárias. Além disso, o VintaSoft PDF .NET Plug-in permite converter anotações em gráficos (aplanar anotações) caso elas precisem ser exibidas na página PDF, mas o usuário não deva interagir com elas.

Aqui está um código C# que demonstra como converter anotações em gráficos (aplanar anotações) e remover formulários interativos de um documento PDF usando a 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);
}