Questa pagina può contenere testo tradotto automaticamente.
Comprimi documenti PDF in C# e VB.NET
In molti casi, è comune desiderare di comprimere e ottimizzare i documenti PDF. I documenti PDF più piccoli sono più facili da trasferire tramite rete e meno costosi da archiviare. Ridurre le dimensioni dei file PDF è particolarmente importante per l'archiviazione.

Libreria .NET per ottimizzare documenti PDF
Usa la libreria Docotic.Pdf per comprimere documenti PDF nelle applicazioni .NET Framework e .NET Core. La libreria è disponibile su NuGet e dal nostro sito. Ottieni la libreria e una chiave di licenza gratuita a tempo limitato nella pagina Scarica la libreria PDF C# .NET.
Docotic.Pdf fornisce diversi mezzi di ottimizzazione:
- ottimizzare gli oggetti PDF
- rimuovere oggetti PDF duplicati (font, immagini, ecc.)
- comprimere le immagini
- creare sottoinsiemi dei font
- rimuovere i metadati
- rimuovere le informazioni sulla struttura
- rimuovere le risorse inutilizzate
- rimuovere i dati privati dell'applicazione
- appiattire i campi modulo e le annotazioni
- rimuovere l'incorporamento dei font
Puoi usare tutto quanto sopra per ottenere il miglior rapporto di compressione per i tuoi documenti PDF. Guarda il campione Comprimi un documento PDF in .NET per vedere tutte queste tecniche in azione.
Rivediamo 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, stream, array e altri. Durante il salvataggio di un file PDF, Docotic.Pdf applica per impostazione predefinita le seguenti ottimizzazioni senza perdita di dati:
- comprime gli stream PDF con la codifica Flate
- elimina gli oggetti PDF inutilizzati
- in linea gli oggetti PDF indiretti
- scrive gli oggetti PDF senza formattazione
- inserisce gli oggetti PDF in object stream 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 influenzano il contenuto visibile (testo, immagini, segnalibri e qualsiasi altra cosa) del documento PDF. Influenzano solo il modo in cui gli oggetti PDF vengono scritti e compressi nel file PDF di output.
L'eliminazione degli oggetti PDF inutilizzati è importante per le altre tecniche descritte di seguito. Non impostare la proprietà PdfSaveOptions.RemoveUnusedObjects su false a meno che tu non abbia valide ragioni per mantenere gli oggetti inutilizzati.
Rimuovi gli oggetti duplicati nei documenti PDF
Quando unisci documenti PDF, il PDF risultante spesso contiene font e immagini duplicati. Sostituire gli oggetti duplicati aiuta a ridurre le dimensioni del file PDF generato. 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 l'incorporamento dei font. In caso contrario, verrà eseguita molta attività aggiuntiva per ottimizzare le copie delle stesse immagini o degli stessi font.
Il metodo PdfDocument.ReplaceDuplicateObjects non sostituisce le immagini in linea. Se il documento contiene immagini in linea, usa prima il metodo PdfCanvas.MoveInlineImagesToResources. Il metodo convertirà le immagini in linea in immagini normali e poi il metodo ReplaceDuplicateObjects sarà in grado di deduplicare anche le immagini convertite.
Comprimi le immagini nel PDF
L'ottimizzazione delle immagini PDF è di solito il metodo di compressione più efficace per i documenti con immagini raster.
La libreria Docotic.Pdf fornisce metodi integrati per ricomprimere le immagini PDF usando gli algoritmi di compressione JPEG, CCITT Group 3 e 4 (fax), JPEG 2000 e zip/deflate. Puoi anche ridimensionare o ridurre la scala delle immagini per diminuire ancora di più le dimensioni del file PDF. Oppure puoi ottimizzare le immagini da solo usando uno strumento di terze parti e poi sostituire le immagini.
Guarda il campione Ottimizza le immagini nel documento PDF in C# e VB.NET su GitHub per un esempio.
Sottoinsieme dei font
I documenti PDF di solito incorporano i font usati per disegnare il testo. I font incorporati spesso includono informazioni su tutti i glifi supportati. Rimuovere i glifi non usati in un documento PDF può ridurre in modo significativo le dimensioni del file di output.
Questo esempio mostra come ottimizzare i font PDF in C#:
using var pdf = new PdfDocument("text.pdf");
pdf.RemoveUnusedFontGlyphs();
pdf.Save("compressed.pdf");
La creazione di sottoinsiemi non influisce sui font usati 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, le parole chiave, l'ora di creazione e così via. I metadati non influenzano il contenuto visibile 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");
Rimuovi le informazioni sulla struttura
I documenti PDF possono includere informazioni sulla loro struttura logica. Le informazioni vengono usate per:
- produrre documenti Tagged PDF
- rendere il documento PDF accessibile ai dispositivi di assistenza
Rimuovere queste informazioni aiuta a ridurre le dimensioni del file PDF. Ma il PDF non sarà più tagged 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 gli XObject possono fare riferimento a più font, immagini o pattern di quanti ne usino effettivamente. Puoi usare 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 privati dell'applicazione dal PDF
I documenti PDF, prodotti da software Adobe, possono includere dati privati dell'applicazione. Questi dati dell'applicazione sono memorizzati nei dizionari page-piece.
Questo esempio mostra come ripulire e comprimere un PDF in C# rimuovendo i dizionari page-piece:
using var pdf = new PdfDocument("input.pdf");
pdf.RemovePieceInfo();
pdf.Save("compressed.pdf");
Appiattisci i campi modulo e le annotazioni PDF
Puoi ridurre le dimensioni di un documento PDF con un modulo compilato appiattendo i campi modulo. L'appiattimento sostituirà i campi modulo con la loro rappresentazione visiva. I valori inseriti verranno mantenuti. Questo esempio C# mostra come appiattire tutti i campi 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 usando il metodo PdfDocument.FlattenWidgets.
Inoltre, il metodo PdfWidget.Flatten consente di appiattire singole annotazioni o controlli.
Rimuovi l'incorporamento dei font
L'incorporamento dei font PDF ha perfettamente senso per font personalizzati o rari. Allo stesso tempo, i font ampiamente disponibili come Arial o Verdana possono aumentare le dimensioni del file PDF senza un valido motivo. Puoi rimuovere l'incorporamento dei font popolari disponibili sulle piattaforme di destinazione. Esempio di codice C#:
using var pdf = new PdfDocument("input.pdf");
UnembedFonts(pdf);
pdf.Save("compressed.pdf");
/// <summary>
/// Questo metodo rimuove l'incorporamento di qualsiasi font che:
/// * è installato nel sistema operativo
/// * oppure il cui nome è incluso nell'elenco "always unembed"
/// * e il cui nome non è incluso nell'elenco "always keep".
/// </summary>
private static void UnembedFonts(PdfDocument pdf)
{
string[] alwaysUnembedList = ["MyriadPro-Regular"];
string[] alwaysKeepList = ["ImportantFontName", "AnotherImportantFontName"];
using var ms = new MemoryStream();
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;
ms.Position = 0;
if (loader.TryLoad(font.Name, font.Bold, font.Italic, ms))
{
font.Unembed();
continue;
}
}
if (Array.Exists(alwaysUnembedList, name => font.Name == name))
font.Unembed();
}
}
Non usare questa tecnica con documenti PDF/A. Un documento PDF/A deve incorporare tutti i font.
Testa sempre i documenti PDF con font non incorporati nei sistemi operativi di destinazione (Windows, Linux, macOS, iOS, Android) e nei visualizzatori PDF (Adobe, Foxit, ecc.).
Altri metodi per ridurre le dimensioni del PDF
Esistono molti metodi di ottimizzazione menzionati sopra. Tuttavia, puoi comprimere i documenti PDF ancora di più rimuovendo il contenuto meno importante. Docotic.Pdf consente di eliminare questi oggetti dai documenti PDF:
- annotazioni
- allegati
- segnalibri
- campi modulo
- pagine
- script
- trasparenza
Puoi anche rimuovere testo, immagini e grafica vettoriale dalle pagine PDF. È anche possibile appiattire il testo.
Conclusione
Puoi usare la libreria Docotic.Pdf per comprimere PDF in C# e VB.NET. Docotic.Pdf fornisce molti mezzi di ottimizzazione efficaci.
Scarica e prova il campione completo Comprimi un documento PDF in C# e VB.NET da GitHub.
Contattaci e ti indicheremo come ottenere il miglior rapporto di compressione per i tuoi documenti PDF.