Questa pagina può contenere testo tradotto automaticamente.
Modifica PDF in C#
Usa Docotic.Pdf per modificare i tuoi documenti PDF. È la libreria di modifica PDF per C# e VB.NET che combina funzionalità potenti con un'API intuitiva.
Docotic.Pdf offre molti strumenti per modificare documenti PDF. Ecco alcune delle funzionalità principali della libreria per la modifica PDF:
- Unisci più PDF in uno solo o dividi un singolo PDF in più file.
- Riduci la dimensione del file PDF.
- Riordina, elimina, ruota o estrai pagine.
- Leggi, modifica o elimina i metadati PDF.
- Firma PDF con firme digitali.
- Crittografa i documenti o rimuovi le password da un PDF.
- Aggiungi, modifica o rimuovi annotazioni e allegati.
- Compila AcroForms, aggiungi o rimuovi controlli del modulo.
- Appiattisci campi modulo e annotazioni per renderli parte del contenuto PDF.
- Aggiungi, elimina o sostituisci testo all'interno del PDF.
- Inserisci, sostituisci e ridimensiona immagini.
- Aggiungi filigrane e sfondi.
- Converti documenti scansionati in testo modificabile e ricercabile.
Nelle sezioni seguenti descriverò in modo più dettagliato le funzionalità di modifica PDF. Le sezioni contengono anche frammenti di codice e collegamenti a risorse pertinenti.
Unisci e dividi PDF
Questa sezione riguarda due funzionalità con obiettivi opposti.

Unisci PDF
Quando consolidi file PDF, crei un unico documento PDF. Il PDF unito in genere contiene informazioni correlate provenienti da più file PDF esistenti.
Ecco un frammento di codice che mostra come unire file PDF usando Docotic.Pdf.
using var pdf = new PdfDocument("first.pdf");
pdf.Append("second.pdf");
pdf.Save("merged.pdf");
Il codice è molto semplice perché mostra il caso più basilare. Abbiamo un articolo che descrive casi di unione più complessi. Ad esempio, mostra come unire documenti crittografati.
Dividi PDF
Dividere significa estrarre pagine selezionate dal PDF originale per creare uno o più nuovi file PDF. Questo processo è utile quando vuoi condividere solo una parte di un documento.
Il frammento di codice seguente mostra come creare un nuovo documento da ogni pagina di un PDF.
using var pdf = new PdfDocument("compound.pdf");
for (int i = 0; i < pdf.PageCount; ++i)
{
using PdfDocument copy = pdf.CopyPages(i, 1);
// Aiuta a ridurre la dimensione del file quando le pagine copiate fanno riferimento
// a risorse non usate, come font, immagini, pattern.
copy.RemoveUnusedResources();
copy.Save(i + ".pdf");
}
Leggi altri approcci per implementare uno splitter PDF nell'articolo dedicato.
Compressione PDF
Esistono due approcci principali quando si comprime un PDF. Il primo consiste nell'applicare solo operazioni che non modificano il contenuto del file, ma solo la sua forma. Il secondo approccio include anche modifiche che possono causare una perdita di dettaglio o di qualità del documento per ottenere una compressione migliore.
Compressione PDF senza perdita
Per impostazione predefinita, la libreria salva gli oggetti PDF in modo che occupino meno byte. Per farlo, esclude gli oggetti inutilizzati, scrive gli oggetti senza formattazione e usa una forma più compatta quando possibile.
Per migliorare ulteriormente la compressione, Docotic.Pdf produce anche object stream nei PDF di output. Questa è un'altra forma di scrittura degli oggetti con la rappresentazione più compatta. Gli object stream vengono compressi con l'algoritmo Flate.
Puoi influire sul modo in cui la libreria salva gli oggetti usando le opzioni di salvataggio.
Alcuni documenti contengono font, immagini, profili colore e altri oggetti duplicati. In genere questo accade per documenti aggiornati in modo incrementale e per file creati unendo più documenti. La deduplicazione di questi oggetti usando il metodo PdfDocument.ReplaceDuplicateObjects può ridurre drasticamente la dimensione del file di output.
Le pagine di un documento possono fare riferimento a risorse non usate. Ad esempio, immagini che erano visibili sulla pagina ma non lo sono più. Usa il metodo PdfDocument.RemoveUnusedResources per rimuovere tali risorse.
Tutte queste operazioni sul PDF riducono la dimensione del file senza perdita di qualità.
Trasformazioni con perdita
Per i file con immagini, uno dei modi più efficaci per ridurre la dimensione del PDF è cambiare lo schema di compressione delle immagini. Ad esempio, usare una compressione con perdita come JPEG sulle immagini ne ridurrà la dimensione. Come effetto collaterale, artefatti di compressione e perdita di dettaglio possono risultare visibili nelle immagini.
Se le immagini nel PDF sono più grandi del necessario, puoi ridimensionarle. Questo può offrire una compressione ancora migliore. Un'altra opzione è convertire le immagini in bianco e nero (bitonali).
Puoi appiattire campi modulo e annotazioni per risparmiare un po' di spazio. Ha senso quando non hai più bisogno di annotazioni e campi modulo modificabili nei tuoi documenti.
I font possono occupare molto spazio nei documenti. Il metodo PdfDocument.RemoveUnusedFontGlyphs può rimuovere i glifi inutilizzati dai font per ottimizzare la dimensione dell'output. Il subset del font è un altro nome per questo processo. Puoi persino rimuovere completamente i byte del font dal documento (de-incorporare il font). Questo può avere senso quando il documento contiene byte di un font diffuso come Arial.
Altre trasformazioni rimuovono direttamente informazioni dai documenti. Puoi rimuovere metadati, informazioni di struttura e dati privati dell'applicazione. Questi dati non sono visibili, ma rimuovili solo se non sono importanti per gli utenti dei tuoi documenti.
Per conoscere più dettagli e vedere alcuni esempi di codice, leggi l'articolo su come ridurre la dimensione dei file PDF.
Riordina le pagine in PDF
Ci sono abbastanza motivi per cambiare l'ordine delle pagine all'interno di un PDF. Ad esempio, potresti dover raggruppare insieme informazioni correlate o migliorare la leggibilità del documento garantendo un flusso logico.

Oltre alla possibilità di unire e dividere pagine, Docotic.Pdf offre un ampio set di altri metodi per riordinare le pagine in PDF. Userò frammenti di codice C# e l'API Docotic.Pdf per mostrare come organizzare le pagine PDF.
Puoi trovare progetti di test completi per gli esempi di questa sezione nel gruppo Pagine e navigazione dei codici di esempio. Nei frammenti uso ten-pages.pdf. Questo è un documento di test banale con un titolo Page N su ogni pagina.
Sposta pagine PDF
Il frammento seguente mostra come spostare intervalli continui di pagine. Il codice sposta la prima metà delle pagine alla fine del documento.
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.MovePages(0, 5, pdf.PageCount);
pdf.Save("continuous-move.pdf");
È possibile spostare insiemi arbitrari di pagine. Il codice seguente sposta le pagine dispari alla fine del documento.
using var pdf = new PdfDocument("ten-pages.pdf");
int[] indexes = [0, 2, 4, 6, 8];
pdf.MovePages(indexes, pdf.PageCount);
pdf.Save("arbitrary-move.pdf");
Per spostare una sola pagina, usa il metodo PdfDocument.MovePage.
Scambia pagine PDF
Per scambiare due pagine, usa un codice come nel frammento seguente.
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.SwapPages(9, 0);
pdf.SwapPages(8, 1);
pdf.Save("swapped.pdf");
Il metodo PdfDocument.SwapPages accetta gli indici delle due pagine che devono prendere il posto l'una dell'altra. Quando il numero di pagine non è uguale a due, usa uno dei metodi sposta pagine.
Aggiungi e inserisci pagine
Ogni PdfDocument contiene almeno una pagina. Quando crei un nuovo documento, la libreria aggiunge implicitamente una pagina.
Ecco come inserire una pagina vuota in PDF usando l'API Docotic.Pdf. Puoi inserire pagine in posizioni con indici da 0 a PageCount inclusi.
using var pdf = new PdfDocument();
var newPage = pdf.InsertPage(0);
newPage.Canvas.DrawString("This is the new first page");
pdf.Save("two-pages.pdf");
Per aggiungere una pagina vuota al PDF, usa il metodo PdfDocument.AddPage. Il metodo aggiunge una nuova pagina alla fine del documento. Fa la stessa cosa di una chiamata pdf.InsertPage(pdf.PageCount).
Per aggiungere o inserire pagine da un altro documento, usa una combinazione di chiamate come descritto nella sezione Anteponi PDF. Puoi usare la combinazione di chiamate per aggiungere una pagina di copertina a un PDF.
Duplica pagine PDF
Con l'API della libreria, puoi eseguire l'operazione di duplicazione come due operazioni consecutive. La prima è l'operazione di copia delle pagine. Vedi l'esempio di codice nella sezione Dividi PDF.
La seconda è l'operazione di incolla delle pagine. Per questa operazione, usa il metodo PdfDocument.Append. Poi sposta le pagine aggiunte nella posizione richiesta.
Estrai pagine
Il frammento seguente mostra come estrarre pagine da un PDF. Estrae le prime tre pagine dal documento sorgente.
using var pdf = new PdfDocument("ten-pages.pdf");
using (var extracted = pdf.ExtractPages(0, 3))
{
extracted.RemoveUnusedResources();
extracted.Save("three-pages.pdf");
}
pdf.Save("seven-pages.pdf");
Il metodo ExtractPages rimuove pagine dal documento. Per questo motivo, nel documento sorgente rimangono solo sette pagine. La libreria non consente di estrarre pagine da un documento che contiene una sola pagina.
Consigliamo di rimuovere le risorse non usate dal documento con le pagine estratte.
Rimuovi pagina dal PDF
Guarda il frammento che mostra come eliminare una pagina in un documento PDF. In realtà elimina due pagine usando overload diversi del metodo RemovePage. Il primo overload accetta un indice di pagina come parametro. Il secondo overload accetta un oggetto pagina.
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.RemovePage(0);
pdf.RemovePage(pdf.Pages[0]);
pdf.Save("without-first-two-pages.pdf");
Per rimuovere più di una pagina alla volta, usa il metodo PdfDocument.RemovePages. Gli overload di quel metodo lavorano con array di indici di pagina o di oggetti pagina.
Firme digitali
Docotic.Pdf implementa molte operazioni per le firme digitali nei PDF e può aiutarti a mantenere l'attendibilità e la validità legale dei tuoi documenti PDF. Ecco alcuni esempi di ciò che la libreria può fare:
Firma PDF con certificato. L'aggiunta di firme digitali in PDF è il modo per confermare l'identità del firmatario e garantire che nessuno abbia alterato il documento dopo la firma.
Certifica la firma. Per aggiungere ulteriori restrizioni a un PDF, puoi firmarlo con una firma di certificazione. Puoi bloccare completamente il PDF dopo la firma oppure consentire alcuni tipi di modifiche.
Verifica la firma nel PDF. Controlla la validità di una firma digitale per confermare che la parte firmata del documento non sia cambiata.
Consenti firme multiple. Contratti, accordi e moduli richiedono spesso che più parti firmino un singolo documento. Aggiungere più firme a un PDF richiede che il documento venga salvato in modo incrementale.
Incorpora il timestamp della firma. È possibile specificare l'URL di una Timestamping Authority e, facoltativamente, le relative credenziali nelle opzioni di firma. La libreria incorporerà il timestamp ricevuto nella firma.
Incorpora il certificato. La libreria incorpora automaticamente i certificati di firma nelle firme digitali.
La pagina Firme digitali contiene codici di esempio e ulteriori informazioni su ogni operazione.
Proteggi PDF
Ci sono tre funzionalità che puoi usare per garantire la sicurezza del PDF. Docotic.Pdf può lavorare con esse in entrambe le direzioni: la libreria può proteggere PDF e sbloccare un PDF protetto.

Protezione con password
Questa funzionalità ti consente di impostare una password per limitare l'accesso al PDF. A seconda del tipo di password, il PDF richiederà la password corretta per aprire o modificare il documento.
Nei PDF esistono due tipi di password:
- Password di apertura (password utente). Questo tipo di password è necessario per aprire e visualizzare il PDF. Senza la password corretta, un visualizzatore PDF conforme non aprirà il documento.
- Password dei permessi (password del proprietario). Questa password è necessaria per rimuovere i permessi dal PDF. Aprire un PDF con la password del proprietario consente tutte le azioni, anche se i permessi limitano determinate operazioni, come la stampa, la copia o la modifica del PDF.
Puoi impostare entrambe le password per lo stesso documento PDF. Leggi come decrittografare file PDF per sapere come rimuovere le password dai documenti PDF.
Crittografia
La crittografia PDF e le password PDF lavorano insieme per garantire che le informazioni sensibili nel PDF siano disponibili solo agli utenti legittimi. Solo gli utenti con la chiave di decrittografia o la password corrette possono visualizzare il contenuto.
Docotic.Pdf può crittografare file PDF usando gli algoritmi RC4 a 40 bit, RC4 a 128 bit, AES a 128 bit e AES a 256 bit.
Permessi e restrizioni
Puoi impostare vari permessi su un PDF, ad esempio limitando la stampa, la copia del testo, la modifica del documento e altro. I permessi influiscono sull'esperienza solo quando qualcuno apre il PDF con la password utente. Eventuali restrizioni non si applicano a chi apre il PDF con la password del proprietario.
Per rimuovere i permessi da un PDF, devi prima rimuovere la password di sicurezza del PDF. Leggi come fare usando C# e l'API Docotic.Pdf.
Per sapere come garantire l'integrità del PDF oltre alla sicurezza del PDF, leggi la sezione sulle firme digitali.
Metadati nel PDF
I metadati PDF sono informazioni incorporate in un file PDF che forniscono dettagli sul documento. Esistono due fonti principali di metadati: le proprietà del documento PDF e i metadati XMP.
Le proprietà del documento sono anche comunemente chiamate dizionario delle informazioni del documento, informazioni del file, campi dei metadati, attributi del documento e attributi del file.
I metadati XMP (Extensible Metadata Platform) sono in pratica un file XML incorporato in un PDF. XMP usa un modello dati flessibile che può memorizzare qualsiasi insieme di proprietà di metadati. Questi metadati usano namespace per raggruppare proprietà correlate. Alcuni namespace comuni includono XMP Core/XMP Basic e Dublin Core.
Docotic.Pdf supporta completamente sia i metadati XMP sia le proprietà del documento. Tieni presente che lo standard PDF 2.0 ha contrassegnato la maggior parte delle proprietà del dizionario delle informazioni del documento come deprecate. Le uniche eccezioni sono la data di creazione e la data di modifica.
Puoi trovare progetti di test completi per gli esempi di questa sezione nel gruppo Metadati dei codici di esempio.
Proprietà del documento
Vedi come modificare le proprietà del documento con Docotic.Pdf.
using var pdf = new PdfDocument("file.pdf");
pdf.Info.Author = "An example code";
pdf.Info.Subject = "Showing how to access and change document metadata";
pdf.Info.Title = "Custom title goes here";
pdf.Info.Keywords = "pdf Docotic.Pdf";
pdf.Save("updated-file.pdf");
Puoi cambiare il valore di ogni proprietà, ma tieni presente che per impostazione predefinita la libreria aggiorna automaticamente alcune proprietà prima di salvare il PDF. Puoi modificare questo comportamento nelle opzioni di salvataggio.
Per rimuovere tutti i metadati specificati nelle proprietà del documento, usa il metodo PdfInfo.Clear. Il metodo può rimuovere solo le proprietà personalizzate, se preferisci.
Metadati XMP
Questo frammento mostra come modificare le proprietà dei metadati XMP in un documento PDF.
using var pdf = new PdfDocument("file.pdf");
pdf.Metadata.DublinCore.Creators = new XmpArray(XmpArrayType.Ordered);
pdf.Metadata.DublinCore.Creators.Values.Add(new XmpString("me"));
pdf.Metadata.DublinCore.Creators.Values.Add(new XmpString("Docotic.Pdf"));
pdf.Metadata.DublinCore.Format = new XmpString("application/pdf");
pdf.Metadata.Pdf.Producer = new XmpString("me too!");
pdf.Save("updated-file.pdf");
Il codice modifica le proprietà negli schemi Dublin Core e Adobe PDF. Tieni presente che la proprietà Producer viene sovrascritta a causa delle opzioni di salvataggio predefinite.
Puoi estrarre i metadati XMP grezzi usando uno dei metodi XmpMetatada.Save. Il metodo produrrà un XML con tutte le proprietà.
Per rimuovere tutti i metadati XMP da un documento, usa il metodo XmpMetadata.Unembed.
Sincronizza metadati
È consigliabile assicurarsi che sia i metadati XMP sia le proprietà Document Info abbiano gli stessi valori per le proprietà corrispondenti. Questo è particolarmente vero se modifichi entrambe le sorgenti di metadati nello stesso file.
Usa il metodo PdfDocument.SyncMetadata per sincronizzare i valori nei metadati XMP e in Document Info. Quando una proprietà è cambiata in entrambe le sorgenti, il metodo sovrascriverà una sorgente con il valore dell'altra. Leggi la documentazione del metodo per maggiori dettagli.
Segnalibri PDF
Un documento PDF può contenere collegamenti o scorciatoie speciali che aiutano i lettori a navigare rapidamente verso sezioni o pagine specifiche. PDF outline è un altro nome per i segnalibri.

Le app di visualizzazione di solito mostrano i segnalibri come un indice di un libro, ma in modo interattivo. Quando il lettore fa clic su un segnalibro, l'app di visualizzazione passa alla parte designata del documento. Un comportamento simile si può ottenere usando annotazioni di collegamento.
Ecco un frammento di codice C# che mostra come aggiungere segnalibri a un PDF:
using var pdf = new PdfDocument("ten-pages.pdf");
var root = pdf.OutlineRoot;
root.AddChild("Fifth page", 4);
root.AddChild("Seventh page", pdf.Pages[6]);
pdf.PageMode = PdfPageMode.UseOutlines;
pdf.Save("simple-bookmarks.pdf");
PDF outline può avere segnalibri principali e sotto-segnalibri, rendendo più facile strutturare documenti di grandi dimensioni. Ecco come creare sotto-segnalibri in PDF:
using var pdf = new PdfDocument("ten-pages.pdf");
var root = pdf.OutlineRoot;
var evenPages = root.AddChild("Even pages");
evenPages.AddChild("Second page", 1);
evenPages.AddChild("Fourth page", 3);
pdf.PageMode = PdfPageMode.UseOutlines;
pdf.Save("even-pages-bookmarks.pdf");
Puoi applicare font e colori agli elementi dei segnalibri. Consulta l'esempio completo per creare una struttura con stili.
Per rimuovere un segnalibro dal PDF, usa i metodi RemoveChild o RemoveChildAt. Puoi rimuovere tutti i segnalibri chiamando il metodo RemoveAllChildren sul nodo radice.
Allegati di file
Gli allegati PDF sono file esterni incorporati in un documento PDF. Spesso ci si riferisce anche a questi file come file incorporati e allegati di file. Puoi allegare qualsiasi file: immagine, file audio/video, un altro PDF, documento Word, fogli di calcolo Excel o qualsiasi altra cosa.
Se vuoi allegare PDF tra loro, creando un file PDF combinato, consulta l'articolo su come unire documenti PDF.
Ecco il codice C# che mostra come aggiungere un allegato a un PDF con l'aiuto dell'API Docotic.Pdf.
using var pdf = new PdfDocument();
var excelFile = pdf.CreateFileAttachment("this-year-figures.xlsx");
pdf.SharedAttachments.Add(excelFile);
pdf.Save("shared-attachment.pdf");
Il codice precedente ha aggiunto il file come allegato condiviso. I lettori possono trovare il file allegato nel pannello Allegati del loro visualizzatore.
È anche possibile aggiungere allegati alle pagine PDF. Tali allegati sono visibili all'interno del contenuto della pagina come qualsiasi altra annotazione.
using var pdf = new PdfDocument();
var page = pdf.Pages[0];
page.Canvas.DrawString(20, 100, "Here is this year's figures document:");
var bounds = PdfRectangle.FromLTRB(155, 100, 165, 110);
var excelFile = pdf.CreateFileAttachment("this-year-figures.xlsx");
pdf.Pages[0].AddFileAnnotation(bounds, excelFile);
pdf.Save("page-attachment.pdf");
Consulta il gruppo Allegati dei codici di esempio per trovare progetti di test completi per gli esempi di questa sezione.
Per rimuovere allegati da un PDF, devi enumerare sia gli allegati condivisi sia le annotazioni di pagina e rimuovere gli elementi che non ti servono. Vedi l'esempio per il codice di enumerazione qui sotto. Per rimuovere tutti gli allegati condivisi, puoi usare una chiamata pdf.SharedAttachments.Clear().
Dovrai anche enumerare le raccolte per estrarre i file incorporati da un PDF. Ecco un esempio di codice:
using var pdf = new PdfDocument("file-with-attachments.pdf");
int i = 0;
foreach (var attachment in pdf.SharedAttachments)
{
if (attachment?.Contents == null)
continue;
var fileName = attachment.Specification ?? $"attachment{i++}";
attachment.Contents.Save(fileName);
}
foreach (var widget in pdf.GetWidgets())
{
var attachment = (widget as PdfFileAttachmentAnnotation)?.File;
if (attachment?.Contents == null)
continue;
var fileName = attachment.Specification ?? $"attachment{i++}";
attachment.Contents.Save(fileName);
}
Etichette di pagina
Le etichette di pagina PDF sono nomi o numeri personalizzati assegnati alle pagine in un documento PDF. A differenza dei numeri di pagina standard, le etichette di pagina possono includere una combinazione di lettere, numeri e persino numeri romani. Altri nomi per le etichette di pagina sono identificatori di pagina e nomi di pagina.
Ecco come aggiungere etichette di pagina a un PDF usando Docotic.Pdf:
using var pdf = new PdfDocument("ten-pages.pdf");
pdf.PageLabels.AddRange(0, 3, PdfPageNumberingStyle.LowercaseRoman);
pdf.PageLabels.AddRange(4, PdfPageNumberingStyle.DecimalArabic, string.Empty, 5);
pdf.PageLabels.AddRange(7, PdfPageNumberingStyle.DecimalArabic, "Appendix page ", 1);
pdf.Save("page-labels.pdf");
Le prime quattro pagine avranno le etichette i, ii, iii e iv. Le tre etichette successive sono 5, 6 e 7. Per le pagine rimanenti, le etichette saranno Appendix page 1, Appendix page 2 e Appendix page 3.
OCR del PDF
Alcuni documenti PDF contengono pagine scansionate e richiedono il riconoscimento ottico dei caratteri (OCR) prima di poter estrarne il testo. Un altro caso d'uso per l'OCR è estrarre testo da un PDF che usa una mappatura personalizzata da glifo a Unicode.

Abbiamo un post del blog che mostra come eseguire l'OCR su documenti scansionati. Il post contiene un esempio di PDF non ricercabile e mostra come usare Tesseract OCR, codice C# e Docotic.Pdf per riconoscere il testo in PDF composti solo da immagini. Puoi anche aggiungere un livello di testo OCR ai file PDF scansionati con l'aiuto di Docotic.Pdf.
Modifica delle pagine
Questa sezione parla di modifiche alle pagine PDF esistenti, come:
- ruotare le pagine PDF
- cambiare la dimensione della pagina
- usare grafica vettoriale sul canvas della pagina
- aggiungere contenuto HTML
Leggi la Layout API della libreria per sapere come creare documenti PDF partendo da blocchi come intestazione e piè di pagina, tabelle, immagini, paragrafi di testo e simili.
Consulta le altre sezioni per informazioni su:
- come modificare il testo nei PDF
- operazioni con le immagini
- filigrane PDF
- come annotare un PDF
- come compilare moduli PDF
Ruota pagine
Vedi il frammento di codice C# per sapere come ruotare una sola pagina in un PDF:
using var pdf = new PdfDocument("existing.pdf");
pdf.Pages[0].Rotation = PdfRotation.Rotate180;
pdf.Save("rotated.pdf");
Il codice ruota la prima pagina di 180 gradi. Puoi ruotare anche le pagine PDF di 0, 90 e 270 gradi.
Cambia dimensione pagina
Docotic.Pdf offre più di un modo per cambiare la dimensione delle pagine di un PDF. Nel caso più semplice, puoi usare le proprietà Width e Height di un oggetto PdfPage per specificare la dimensione desiderata. Per un documento esistente, questo non ridimensiona il contenuto delle pagine del documento. E non rimuove alcun contenuto. Semplicemente nasconde tutto il contenuto della pagina che si trova fuori dal rettangolo della dimensione specificata.
Un approccio simile consiste nel ritagliare le pagine. Puoi cambiare il CropBox di una pagina usando un codice C# come questo:
using var pdf = new PdfDocument("existing.pdf");
var page = pdf.Pages[0];
var cropBoxBefore = page.CropBox;
page.CropBox = new PdfBox(0, cropBoxBefore.Height - 256, 256, cropBoxBefore.Height);
pdf.Save("cropped.pdf");
Cambiare il crop box è la strada da seguire se vuoi salvare una parte della pagina come immagine.
Se l'obiettivo è mantenere tutti i contenuti visibili su una pagina di dimensioni diverse, allora usa l'approccio di scalatura. Nel frammento di codice seguente, creo un XObject da una pagina. L'XObject è come un'immagine vettoriale. Puoi disegnare lo stesso oggetto su più pagine scalando e ruotando secondo necessità.
Una volta pronto l'XObject, cancello il contenuto precedente della pagina, ridimensiono la pagina e poi disegno l'oggetto sulla pagina ridimensionata.
using var pdf = new PdfDocument("existing.pdf");
var page = pdf.Pages[0];
var pageXObject = pdf.CreateXObject(page);
page.Canvas.Clear();
page.Width /= 2;
page.Height /= 2;
page.Canvas.DrawXObject(pageXObject, 0, 0, page.Width, page.Height, 0);
pdf.Save("resized.pdf");
Grafica vettoriale
La libreria Docotic.Pdf può aggiungere grafica vettoriale come linee, curve e forme ai documenti PDF. Puoi costruire percorsi grafici a partire da oggetti grafici. Poi puoi riempire o tracciare i percorsi usando colori di spazi colore diversi.
Trova il codice di esempio per le funzionalità relative alla grafica nel gruppo Grafica dei codici di esempio.
È anche possibile estrarre grafica da un PDF. Inizia chiamando il metodo GetObjects e poi estrai le informazioni dagli oggetti di tipo PdfPageObjectType.Path. Non dimenticare che gli XObject possono contenere anche percorsi nidificati.
using var pdf = new PdfDocument("existing.pdf");
var options = new PdfObjectExtractionOptions();
var objects = pdf.Pages[0].GetObjects(options);
foreach (var obj in objects)
{
if (obj.Type == PdfPageObjectType.Path)
{
var path = (PdfPath)obj;
Console.WriteLine($"Found path {path}");
}
else if (obj.Type == PdfPageObjectType.XObject)
{
var paintedXObject = (PdfPaintedXObject)obj;
var nestedObjects = paintedXObject.XObject.GetObjects(options);
// ...
}
}
Aggiungi HTML alle pagine PDF
Sovrapporre contenuto HTML a un documento PDF può essere utile per aggiungere elementi dinamici come grafici o ticker dei prezzi delle azioni ai tuoi PDF.
Leggi come inserire HTML in PDF per maggiori dettagli e per scaricare un esempio di codice.
Modifica del testo PDF
Questa sezione spiega come modificare il testo in un PDF, come cambiare il colore del testo in PDF e come aggiungere nuovo testo.

Abbiamo un articolo dedicato a come estrarre testo da un PDF. Consulta l'articolo per maggiori informazioni sull'argomento.
Anche l'appiattimento del testo è possibile con l'aiuto di Docotic.Pdf.
Trova e sostituisci
Per modificare il testo in un PDF, devi trovare l'area che contiene il testo, quindi rimuovere il testo in quell'area. L'ultimo passaggio consiste nell'aggiungere il nuovo testo nella stessa area del documento.
Cercare nei PDF può essere complicato perché internamente il documento può contenere parole in qualsiasi ordine. Il testo può anche essere ruotato. Per fortuna, abbiamo un codice di esempio che mostra come cercare parole o frasi in un PDF.
Quando hai le coordinate del testo da rimuovere, è il momento di modificare il contenuto della pagina che lo contiene. La libreria fornisce strumenti per enumerare e copiare gli oggetti di pagina. Quindi è possibile omettere parte del testo durante la copia degli oggetti. Questo rimuoverà sostanzialmente il testo. Il codice dell'esempio modifica del contenuto della pagina PDF mostra tutti i dettagli del processo. Dovrai aggiornare il metodo ShouldRemoveText per usare le coordinate trovate.
Leggi la sezione seguente per vedere come aggiungere il nuovo testo al documento.
Se crei documenti con un testo segnaposto e in seguito sostituisci il segnaposto con un altro testo, allora puoi usare invece caselle di testo.
L'idea è aggiungere al documento una casella di testo in sola lettura senza bordi e inserirvi il testo segnaposto. Più tardi puoi aprire il documento, trovare la casella di testo tramite il suo nome e sostituire il segnaposto con una semplice chiamata box.Text = "new text";. Appiattisci la casella di testo dopo la sostituzione se non vuoi ulteriori modifiche.
Aggiungi nuovo testo
Per aggiungere testo ai documenti, usa i metodi DrawString e DrawText di un oggetto PdfCanvas. I metodi usano il font corrente del canvas. Il font deve contenere i glifi per tutti i caratteri del testo. Usa il metodo PdfFont.ContainsGlyphsForText per verificare se il font soddisfa questo requisito.
var canvas = pdf.Pages[0].Canvas;
canvas.Font = pdf.CreateFont("NSimSun");
canvas.DrawString(10, 50, "Olá. 你好. Hello. This is some new text");
Puoi aggiungere testo Unicode disegnato con font Type1, TrueType e OpenType. La libreria può usare font installati nel sistema, 14 font Type1 incorporati oppure caricare da un file il font richiesto.
Cambia colore del testo
Per cambiare il colore del testo in PDF, usa lo stesso approccio usato per rimuovere testo. Dovrai modificare almeno il metodo ReplaceColor nel codice di esempio.
Immagini
Docotic.Pdf fornisce tutto il necessario per modificare le immagini PDF. Di seguito trovi frammenti di codice C# per le operazioni più comuni.
Il gruppo Immagini dei codici di esempio contiene progetti di test completi per gli esempi di questa sezione.
Aggiungi immagine al PDF
La libreria può importare immagini in formato GIF/TIFF/PNG/BMP/JPEG. Puoi anche aggiungere un'immagine da un oggetto System.Drawing.Image.
var canvas = pdf.Pages[0].Canvas;
var image = pdf.CreateImage("image.jpg");
canvas.DrawImage(image, 10, 50);
Puoi specificare un angolo di rotazione e una dimensione di output usando gli overload del metodo DrawImage. Per disegnare la stessa immagine su più pagine, aggiungila una sola volta e usa lo stesso oggetto PdfImage in più chiamate al metodo DrawImage.
Combina immagini in PDF
Ecco il codice C# che mostra come combinare più immagini in un unico PDF.
using var pdf = new PdfDocument();
var imagePaths = new string[] { "image.jpg", "another-image.png" };
foreach (var path in imagePaths)
{
var image = pdf.CreateImage(path);
var page = pdf.AddPage();
page.Width = image.Width;
page.Height = image.Height;
page.Canvas.DrawImage(image, 0, 0);
}
pdf.RemovePage(0);
pdf.Save("combined-images.pdf");
Il codice aggiunge più immagini al PDF, modificando la dimensione di ogni pagina in modo che corrisponda alla dimensione dell'immagine corrispondente. Prima di salvare il risultato, il codice rimuove la prima pagina vuota aggiunta implicitamente.
Estrai immagini PDF
Abbiamo progettato Docotic.Pdf per estrarre immagini dai file PDF senza compromettere la loro qualità. La libreria non modifica dimensione o compressione delle immagini. Otterrai immagini della stessa qualità di quelle presenti nel PDF.
using var pdf = new PdfDocument("file-with-images.pdf");
int i = 0;
foreach (PdfImage image in pdf.GetImages())
{
var path = image.Save($"image{i++}");
Console.WriteLine($"Saved to {path}");
}
Rimuovi e sostituisci immagini
Usa il metodo PdfPage.RemovePaintedImages per rimuovere tutte o specifiche immagini da una pagina PDF. Puoi filtrare le immagini per posizione, dimensione, trasformazione o altri parametri.
using var pdf = new PdfDocument("file-with-images.pdf");
pdf.Pages[0].RemovePaintedImages(
image =>
{
return image.Size.Width > 100;
}
);
pdf.RemoveUnusedResources();
pdf.Save("no-wide-images.pdf");
Il codice C# sopra mostra come rimuovere immagini con l'aiuto di Docotic.Pdf. Ti consiglio di rimuovere le risorse non usate dopo aver modificato o rimosso immagini.
Usa il metodo PdfImage.ReplaceWith per sostituire tutte le occorrenze dell'immagine all'interno del documento PDF.
using var pdf = new PdfDocument("file-with-images.pdf");
var firstImage = pdf.GetImages(false).FirstOrDefault()
?? throw new ArgumentException("No images found");
firstImage.ReplaceWith("another-image.png");
pdf.RemoveUnusedResources();
pdf.Save("replaced-image.pdf");
Cambia schema di compressione
Docotic.Pdf fornisce metodi per cambiare la compressione delle immagini PDF. È possibile ricodificare le immagini usando algoritmi di compressione JPEG, CCITT Group 3 e 4 (fax), JPEG 2000 e zip/deflate.
A seconda della compressione iniziale e di quella nuova, la modifica può causare una perdita di dettaglio o della qualità dell'immagine. Ma le conversioni con perdita aiutano di solito a ridurre la dimensione del documento.
firstImage.RecompressWithJpeg2000(25);
Esistono altri metodi per ricodificare un'immagine. Controlla i metodi PdfImage i cui nomi iniziano con RecompressWith. Puoi rimuovere qualsiasi compressione da un'immagine usando il metodo Uncompress.
Ridimensiona immagini
Se alcune immagini in un documento PDF sono più grandi del necessario, la libreria può ridimensionarle o ridurne la scala per te.
firstImage.Scale(0.5, PdfImageCompression.Jpeg2000, 25);
Il codice precedente rende la prima immagine due volte più piccola in entrambe le direzioni. La libreria usa la compressione JPEG 2000 per l'immagine risultante.
Puoi usare uno dei metodi ResizeTo per specificare valori esatti per larghezza e altezza risultanti.
Ridimensionare le immagini di solito riduce la dimensione del file PDF ancora di più rispetto a cambiarne la compressione (vedi la sezione sopra), ma è un processo con perdita.
Filigrane e sfondi

L'applicazione di filigrane PDF coinvolge questi passaggi:
- Crea un XObject, il contenitore del contenuto della filigrana
- Riempi l'oggetto con testo, immagini e grafica vettoriale
- Apponi l'oggetto sulle pagine PDF
Ecco il codice C# che aggiunge la filigrana Confidential al PDF:
using var pdf = new PdfDocument("existing.pdf");
var watermark = pdf.CreateXObject();
watermark.DrawOnBackground = true;
var canvas = watermark.Canvas;
canvas.FontSize = 72;
canvas.Brush.Color = new PdfRgbColor(222, 35, 35);
canvas.Brush.Opacity = 45;
canvas.Pen.Color = canvas.Brush.Color;
canvas.Pen.Opacity = canvas.Brush.Opacity;
canvas.Pen.Width = 5;
var padding = 10;
var text = "CONFIDENTIAL";
canvas.DrawString(padding, padding, text);
var textSize = canvas.MeasureText(text);
var watermarkRect = new PdfRectangle(
padding, padding, textSize.Width, textSize.Height);
canvas.DrawRoundedRectangle(watermarkRect, new PdfSize(padding, padding));
foreach (var page in pdf.Pages)
{
page.Canvas.DrawXObject(
watermark,
(page.Width - watermarkRect.Width) / 2,
(page.Height - watermarkRect.Height) / 2);
}
pdf.Save("watermarked.pdf");
Il codice imposta le proprietà del pennello e della penna del canvas della filigrana. Il pennello viene usato per dipingere il testo. Per determinare la dimensione del testo, il codice misura il testo. Poi disegna un rettangolo con angoli arrotondati attorno al testo. La penna viene usata per tracciare il rettangolo.
Quando il contenuto della filigrana è pronto, il codice lo disegna al centro di ogni pagina.
Gli sfondi PDF sono molto simili alle filigrane. Almeno puoi crearli in quasi lo stesso modo. Per aggiungere uno sfondo al PDF, fai lo stesso del codice sopra, ma aggiungi watermark.DrawOnBackground = true; dopo la chiamata CreateXObject. Tieni presente che contenuti opachi come le immagini possono oscurare lo sfondo.
Annotazioni
Docotic.Pdf fornisce una ricca API per le annotazioni nei PDF. Puoi creare, modificare e rimuovere annotazioni dai documenti PDF. È anche possibile appiattire le annotazioni.
Per annotare un testo, esistono:
- Note adesive o annotazioni di testo. Vedi il metodo
AddTextAnnotationdella classePdfPage. - Evidenziazioni. Vedi il metodo
AddHighlightAnnotation. - Barrature. Vedi il metodo
AddStrikeoutAnnotation. - Sottolineature. Vedi i metodi
AddJaggedUnderlineAnnotationeAddUnderlineAnnotation.
Usa collegamenti per passare da una pagina all'altra o a una risorsa esterna. Puoi usare annotazioni a inchiostro per disegnare a mano libera su una pagina PDF. Esistono annotazioni di redazione per parti designate da rimuovere dal documento. Puoi anche incorporare contenuti audio, video o 3D.
Evidenzia testo
Ecco come evidenziare testo nei documenti PDF:
using var pdf = new PdfDocument();
var page = pdf.Pages[0];
var canvas = page.Canvas;
canvas.FontSize = 30;
var text = "Highlighted text.";
var position = new PdfPoint(10, 50);
canvas.DrawString(position, text);
canvas.DrawString(" Not highlighted.");
var size = canvas.MeasureText(text);
var bounds = new PdfRectangle(position, size);
var color = new PdfRgbColor(145, 209, 227);
var annotationText = "Please pay attention to this part.";
page.AddHighlightAnnotation(annotationText, bounds, color);
pdf.Save("highlighted.pdf");
Collegamenti
Per collegarti a una pagina specifica in un PDF, usa un codice come questo:
using var pdf = new PdfDocument();
var secondPage = pdf.AddPage();
secondPage.Canvas.DrawString(10, 50, "Welcome to the second page.");
var firstPage = pdf.Pages[0];
var canvas = firstPage.Canvas;
var linkRect = new PdfRectangle(10, 50, 100, 60);
canvas.DrawRectangle(linkRect, PdfDrawMode.Stroke);
var options = new PdfTextDrawingOptions(linkRect)
{
HorizontalAlignment = PdfTextAlign.Center,
VerticalAlignment = PdfVerticalAlign.Center
};
canvas.DrawText("Go to 2nd page", options);
firstPage.AddLinkToPage(linkRect, 1);
pdf.Save("linked.pdf");
Nel codice, l'annotazione dell'area di azione funziona come un collegamento ipertestuale interno. Tali aree possono anche navigare verso risorse esterne ed eseguire azioni non di navigazione.
Rimuovi annotazioni
Per rimuovere annotazioni da un PDF:
- Accedi alla raccolta di widget usando la proprietà
PdfPage.Widgetso il metodoPdfDocument.GetWidgets. - Controlla il tipo, le proprietà o comunque decidi quali annotazioni non ti servono più.
- Rimuovi l'annotazione usando il metodo
PdfDocument.RemoveWidgeto i metodi dell'oggettoPdfWidgetCollection.
Per rimuovere allegati da un PDF, dovresti rimuovere sia le annotazioni di file sia gli allegati condivisi.
Oscura PDF
Come libreria per la redazione PDF, Docotic.Pdf offre metodi per rimuovere in modo permanente o oscurare rapidamente informazioni sensibili dai tuoi documenti PDF.

Oscura il testo
Ecco come oscurare il testo in PDF senza uno strumento di redazione, usando solo C# e Docotic.Pdf.
int i = 0;
foreach (var page in pdf.Pages)
{
foreach (var word in page.GetWords())
{
if (i % 3 == 0)
{
page.Canvas.AppendRectangle(word.Bounds);
page.Canvas.FillPath(PdfFillMode.Winding);
}
i++;
}
}
Il codice disegna un rettangolo nero sopra ogni terza parola in un documento. Tieni presente che il testo dietro i rettangoli rimane nel documento ed è possibile estrarlo in seguito. Per rimuovere il testo in modo permanente, usa l'approccio della sezione sulla sostituzione del testo.
Oscura le immagini
Puoi usare anche rettangoli neri per coprire le immagini. Ma un approccio più semplice sarebbe sostituire l'immagine con una immagine nera di 1 per 1 pixel. Questo non solo evidenzierà visivamente l'immagine oscurata, ma rimuoverà anche i dati originali dell'immagine.
Consulta la sezione su rimozione e sostituzione delle immagini per esempi di codice. Consiglio anche di chiamare il metodo PdfDocument.ReplaceDuplicateObjects dopo la sostituzione.
Moduli PDF
Docotic.Pdf può creare AcroForms (questo è un altro nome per i moduli PDF) usando tutti i tipi di elementi interattivi come pulsanti, caselle di controllo, menu a discesa, elenchi, pulsanti di opzione e campi di testo.
Di solito bastano poche righe di codice per aggiungere e configurare un campo modulo. Ad esempio, puoi aggiungere campi modificabili a un PDF semplicemente chiamando il metodo PdfPage.AddTextBox. I codici di esempio nel gruppo Moduli e annotazioni forniscono maggiori informazioni sulla creazione e sull'uso dei moduli.
Come compilare un modulo PDF
Usa il metodo PdfDocument.TryGetControl per recuperare un controllo PDF dal suo nome completo o parziale. In alternativa, puoi enumerare tutti i controlli nel documento usando il metodo GetControls. In entrambi gli approcci, dovrai eseguire il cast del risultato al tipo di campo previsto.
using var pdf = new PdfDocument(@"example-form.pdf");
if (pdf.TryGetControl("txt-name", out var c) && c is PdfTextBox nameTextBox)
nameTextBox.Text = "Bit Miracle team";
if (pdf.TryGetControl("txt-email", out c) && c is PdfTextBox emailTextBox)
emailTextBox.Text = "support@bitmiracle.com";
if (pdf.TryGetControl("check-agree", out c) && c is PdfCheckBox agreeCheckBox)
agreeCheckBox.Checked = true;
pdf.Save("filled-form.pdf");
Il codice usa questo esempio di modulo PDF. Nel codice imposto i valori dei due campi di testo e seleziono la casella di controllo.
Quando hai finito di compilare un modulo, puoi appiattirne tutti i campi.
Uso di JavaScript nei moduli
Puoi aggiungere azioni agli eventi dei controlli. La classe PdfControl fornisce accesso a un insieme predefinito di eventi. I nomi degli eventi iniziano con "On" (ad esempio, OnMouseDown).
Ecco un esempio di uso di JavaScript per i moduli PDF:
using var pdf = new PdfDocument(@"example-form.pdf");
foreach (var field in pdf.GetControls())
field.OnChange = pdf.CreateJavaScriptAction($"app.alert('{field.Name} changed!',3)");
pdf.Save("javascript-events.pdf");
Formato dati moduli
Esiste un altro modo per compilare elettronicamente un PDF. Usa la funzionalità FDF to PDF della libreria per popolare automaticamente un modulo PDF da un database o da un'altra origine.
using var pdf = new PdfDocument(@"example-form.pdf");
pdf.ImportFdf("form-data.fdf");
pdf.Save("auto-populated.pdf");
Il codice usa questo file FDF per compilare tutti i campi del modulo in una sola volta.
Appiattisci PDF
Questa sezione spiega come appiattire un PDF.

Quando appiattisci un PDF, converti elementi interattivi come moduli e annotazioni in contenuto statico per impedire ulteriori modifiche. Un PDF appiattito può occupare molti meno byte pur apparendo identico.
Appiattisci moduli e annotazioni
Per appiattire un PDF compilabile, usa il metodo PdfDocument.FlattenControls. Questo metodo disegna tutti i campi modulo e gli altri controlli sulla pagina padre, rimuovendo il controllo sorgente dal documento.
Quando appiattisci un modulo PDF, ha senso appiattire anche le annotazioni. Usa il metodo PdfDocument.FlattenWidgets per appiattire contemporaneamente sia i controlli sia le annotazioni.
Se vuoi convertire solo alcuni controlli e/o annotazioni nella loro rappresentazione visiva, usa il metodo PdfWidget.Flatten. Dovrai prima trovare il controllo richiesto o l'annotazione.
Appiattisci testo
Puoi convertire il testo PDF in contorni con l'aiuto di Docotic.Pdf. Il motivo abituale è ottenere indipendenza dai font. Indipendentemente dal fatto che i font siano installati, il testo appiattito apparirà uguale su qualsiasi dispositivo.
Tuttavia, una volta convertito il testo in contorni, non puoi più modificarlo come testo. Inoltre, durante il processo di appiattimento, la libreria converte il testo in grafica vettoriale. Questo può aumentare la dimensione dei file.
Per appiattire il testo PDF, dovresti estrarre il testo come tracciati vettoriali e copiarlo in una pagina nuova o nella stessa. C'è un codice di esempio per questo.
Opzioni di salvataggio
Nei frammenti di codice sopra, ho usato il metodo PdfDocument.Save senza argomenti aggiuntivi. In questi casi la libreria usa le opzioni di salvataggio predefinite. Abbiamo scelto con cura i valori predefiniti in modo che nei casi comuni funzionino perfettamente.
Ci sono comunque casi in cui devi sovrascrivere le opzioni predefinite. Per farlo, crea un oggetto PdfSaveOptions, configura le opzioni e fornisceli a uno dei metodi di salvataggio. Di seguito descriverò questi casi.
Per proteggere un PDF con una password o un certificato, crea un gestore di crittografia e impostalo nella proprietà EncryptionHandler.
Quando vuoi firmare più volte lo stesso PDF, attiva la modalità di aggiornamento incrementale impostando la proprietà WriteIncrementally su true. Fai lo stesso quando salvi un file precedentemente firmato con nuove annotazioni o nuovi dati modulo.
Imposta la proprietà Linearize su true per produrre un file PDF linearizzato (o ottimizzato per Fast Web View). I visualizzatori che riconoscono questa ottimizzazione possono visualizzare questi file più rapidamente.
Per evitare modifiche in fase di salvataggio ad alcuni campi di metadati, imposta le proprietà UpdateProducer e UpdateModifiedDate su false.