Questa pagina può contenere testo tradotto automaticamente.

Comprimi documenti PDF in C# e VB.NET

In molti casi, è un desiderio comune comprimere e ottimizzare i documenti PDF. I documenti PDF più piccoli sono più facili da trasferire attraverso la rete e più economici da archiviare. Ridurre le dimensioni del file PDF è particolarmente importante per scopi di archiviazione.

Ottimizza i documenti PDF in C# e VB.NET

Libreria .NET per ottimizzare i documenti PDF

Utilizzare la libreria Docotic.Pdf per comprimere documenti PDF nelle applicazioni .NET Framework e .NET Core. È possibile scaricare i binari della libreria o utilizzare il relativo pacchetto NuGet. Per provare la libreria senza limitazioni della modalità di valutazione, è possibile ottenere la chiave di licenza gratuita limitata nel tempo utilizzando il modulo qui.

Libreria Docotic.Pdf 9.3.16887-dev Test di regressione Ne sono passati 14,635 Download totali di NuGet 4,075,269

Docotic.Pdf fornisce diversi mezzi di ottimizzazione:

  • ottimizzare gli oggetti PDF
  • rimuovere oggetti PDF duplicati (caratteri, immagini, ecc.)
  • comprimere le immagini
  • sottoinsieme di caratteri
  • rimuovi i metadati
  • rimuovere le informazioni sulla struttura
  • rimuovere le risorse inutilizzate
  • rimuovere i dati dell'applicazione privata
  • appiattire i campi del modulo e le annotazioni
  • caratteri non incorporati

Puoi utilizzare tutto quanto sopra per ottenere il miglior rapporto di compressione per i tuoi documenti PDF. Guarda l'esempio Comprimi il documento PDF in .NET per vedere tutte queste tecniche in azione.

Esaminiamo questi metodi di compressione in modo più dettagliato.

Ottimizza gli oggetti PDF

Internamente, un file PDF è una raccolta di oggetti PDF di basso livello: dizionari, flussi, array e altri. Quando si salva un file PDF, Docotic.Pdf applica per impostazione predefinita le seguenti ottimizzazioni senza perdita di dati:

  • comprime i flussi PDF con la codifica Flate
  • cancella gli oggetti PDF inutilizzati
  • incorpora oggetti PDF indiretti
  • scrive oggetti PDF senza formattazione
  • confeziona oggetti PDF in flussi di oggetti compressi

Questo esempio mostra come ottimizzare gli oggetti PDF in C#:

using BitMiracle.Docotic.Pdf;

using (var pdf = new PdfDocument("input.pdf"))
{
    var saveOptions = new PdfSaveOptions();

    // Queste opzioni sono abilitate per impostazione predefinita
    // e applicate implicitamente:
    //saveOptions.Compression = PdfCompression.Flate;
    //saveOptions.RemoveUnusedObjects = true;
    //saveOptions.OptimizeIndirectObjects = true;
    //saveOptions.UseObjectStreams = true;
    //saveOptions.WriteWithoutFormatting = true;

    pdf.Save("compressed.pdf", saveOptions);
}

Tutte queste ottimizzazioni non influiscono sui contenuti visibili (testo, immagini, segnalibri e qualsiasi altra cosa) del documento PDF. Influiscono solo sul modo in cui gli oggetti PDF vengono scritti e compressi nel file PDF di output.

L'eliminazione degli oggetti PDF inutilizzati è importante per altre tecniche discusse di seguito. Non impostare la proprietà PdfSaveOptions.RemoveUnusedObjects su false a meno che non si abbiano validi motivi per conservare gli oggetti inutilizzati.

Rimuovi oggetti duplicati nei documenti PDF

Quando unisci documenti PDF, il PDF prodotto spesso contiene caratteri e immagini duplicati. La sostituzione di oggetti duplicati aiuta a ridurre le dimensioni del file PDF prodotto. Ecco l'esempio C# per questa operazione:

using (var pdf = new PdfDocument("merged.pdf"))
{
    pdf.ReplaceDuplicateObjects();

    pdf.Save("compressed.pdf");
}

Si consiglia di rimuovere gli oggetti duplicati prima di comprimere le immagini o rimuovere i caratteri. Altrimenti, verrà svolto molto lavoro extra per ottimizzare le copie delle stesse immagini o caratteri.

Il metodo PdfDocument.ReplaceDuplicateObjects non sostituisce le immagini in linea. Se il documento contiene immagini in linea, utilizza prima il metodo PdfCanvas.MoveInlineImagesToResources. Il metodo convertirà le immagini in linea in immagini normali, quindi il metodo ReplaceDuplicateObjects sarà in grado di deduplicare anche le immagini convertite.

Comprimi le immagini in PDF

L'ottimizzazione delle immagini PDF è solitamente il metodo di compressione più efficace per i documenti con immagini raster.

La libreria Docotic.Pdf fornisce metodi integrati per ricomprimere le immagini PDF utilizzando algoritmi di compressione JPEG, CCITT Gruppo 3 e 4 (fax), JPEG 2000 e zip/deflate. Puoi anche ridimensionare o ridurre le immagini per ridurre ulteriormente le dimensioni del file PDF. Oppure puoi ottimizzare tu stesso le immagini utilizzando uno strumento di terze parti e quindi sostituisci immagini.

Per un esempio, vedere l'esempio Ottimizza immagini nel documento PDF in C# e VB.NET su GitHub.

Sottoinsieme di caratteri

I documenti PDF solitamente incorporano i caratteri utilizzati per disegnare il testo. I caratteri incorporati spesso includono informazioni su tutti i glifi supportati. La rimozione dei glifi inutilizzati in un documento PDF può ridurre significativamente le dimensioni del file di output.

Questo esempio mostra come ottimizzare i caratteri PDF in C#:

using (var pdf = new PdfDocument("text.pdf"))
{
    pdf.RemoveUnusedFontGlyphs();

    pdf.Save("compressed.pdf");
}

Il sottoinsieme non influisce sui caratteri utilizzati nei controlli di testo variabile, come caselle di testo o caselle combinate.

Rimuovi i metadati

I documenti PDF possono contenere metadati XMP non compressi con informazioni sull'autore, parole chiave, ora di creazione e così via. I metadati non influiscono sui contenuti visibili del documento PDF.

Questo esempio mostra come rimuovere i metadati da un file PDF in C#:

using (var pdf = new PdfDocument("metadata.pdf"))
{
    XmpMetadata xmp = pdf.Metadata;
    xmp.Unembed();
    pdf.Info.Clear(false);

    pdf.Save("compressed.pdf");
}

Rimuovere le informazioni sulla struttura

I documenti PDF possono includere informazioni sulla loro struttura logica. Le informazioni vengono utilizzate per:

  • produrre documenti PDF con tag
  • rendere il documento PDF accessibile per i dispositivi di assistenza

La rimozione di tali informazioni aiuta a ridurre le dimensioni del file PDF. Ma il PDF non sarà più taggato né accessibile ai dispositivi di assistenza. Questo esempio mostra come eliminare le informazioni sulla struttura dal PDF in C#:

using (var pdf = new PdfDocument("tagged.pdf"))
{
    pdf.RemoveStructureInformation();

    pdf.Save("compressed.pdf");
}

Rimuovi le risorse inutilizzate dal PDF

Le pagine PDF e XObject possono fare riferimento a più caratteri, immagini o modelli di quelli che utilizzano. È possibile utilizzare il metodo PdfDocument.RemoveUnusedResources per rimuovere le risorse inutilizzate dal PDF. Ecco l'esempio C#:

using (var pdf = new PdfDocument("input.pdf"))
{
    pdf.RemoveUnusedResources();

    pdf.Save("compressed.pdf");
}

Rimuovi i dati dell'applicazione privata dal PDF

I documenti PDF, prodotti dal software Adobe, possono includere dati di applicazioni private. Tali dati dell'applicazione vengono archiviati in dizionari di pagine.

Questo esempio mostra come ripulire e comprimere PDF in C# rimuovendo i dizionari delle parti di pagina:

using (var pdf = new PdfDocument("input.pdf"))
{
    pdf.RemovePieceInfo();

    pdf.Save("compressed.pdf");
}

Appiattisci i campi e le annotazioni del modulo PDF

È possibile ridurre le dimensioni di un documento PDF con un modulo completato unendo i campi del modulo. L'appiattimento sostituirà i campi del modulo con la relativa rappresentazione visiva. I valori inseriti verranno conservati. Questo esempio C# mostra come appiattire tutti i campi del modulo PDF:

using (var pdf = new PdfDocument("form.pdf"))
{
    pdf.FlattenControls();

    pdf.Save("compressed.pdf");
}

In alternativa, puoi appiattire tutte le annotazioni e i controlli utilizzando il metodo PdfDocument.FlattenWidgets.

Inoltre, il metodo PdfWidget.Flatten consente di appiattire singole annotazioni o controlli.

Caratteri non incorporati

L'incorporamento di caratteri PDF è perfettamente logico per i caratteri personalizzati o rari. Allo stesso tempo, i caratteri ampiamente disponibili come Arial o Verdana possono aumentare le dimensioni del file PDF senza una buona ragione. Puoi rimuovere i caratteri più diffusi disponibili sulle tue piattaforme di destinazione. Codice C# di esempio:

using (var pdf = new PdfDocument("input.pdf"))
{
    unembedFonts(pdf);

    pdf.Save("compressed.pdf");
}

/// <summary>
/// Questo metodo rimuove qualsiasi carattere che sia:
/// * installato nel sistema operativo
/// * o il suo nome è incluso nell'elenco "sempre unembed".
/// * e il suo nome non è incluso nell'elenco "conserva sempre".
/// </summary>
private static void unembedFonts(PdfDocument pdf)
{
    string[] alwaysUnembedList = new string[] { "MyriadPro-Regular" };
    string[] alwaysKeepList = new string[] { "ImportantFontName", "AnotherImportantFontName" };

    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;
            byte[] fontBytes = loader.Load(font.Name, font.Bold, font.Italic);
            if (fontBytes != null)
            {
                font.Unembed();
                continue;
            }
        }
        
        if (Array.Exists(alwaysUnembedList, name => font.Name == name))
            font.Unembed();
    }
}

Non utilizzare questa tecnica con documenti PDF/A. Un documento PDF/A deve incorporare tutti i caratteri.

Ti invitiamo a testare sempre i documenti PDF con caratteri non incorporati nei tuoi sistemi operativi di destinazione (Windows, Linux, macOS, iOS, Android) e visualizzatori PDF (Adobe, Foxit, ecc.).

Altri metodi per ridurre le dimensioni del PDF

Esistono molti metodi di ottimizzazione menzionati sopra. Tuttavia, puoi comprimere ulteriormente i documenti PDF rimuovendo i contenuti non importanti. Docotic.Pdf ti consente di eliminare questi oggetti dai documenti PDF:

  • annotazioni
  • allegati
  • segnalibri
  • campi del modulo
  • pagine
  • script
  • trasparenza

Puoi anche rimuovere testo, immagini e grafica vettoriale dalle pagine PDF. È anche possibile l'appiattimento del testo.

Conclusione

È possibile utilizzare la libreria Docotic.Pdf per comprimere PDF in C# e VB.NET. Docotic.Pdf fornisce molti mezzi di ottimizzazione efficaci.

Scaricare e provare l'esempio completo Comprimi documento PDF in C# e VB.NET da GitHub.

Contattaci e ti consiglieremo come ottenere il miglior rapporto di compressione per i tuoi documenti PDF.