Questa pagina può contenere testo tradotto automaticamente.

Modifica PDF in C#

Utilizza Docotic.Pdf per modificare i tuoi documenti PDF. È la libreria di modifica PDF per C# e VB.NET che combina potenti funzionalità con un'API intuitiva.

Libreria Docotic.Pdf 9.5.17573-dev Test di regressione Ne sono passati 14,726 Download totali di NuGet 4,765,230
Icona dell'editor PDF

Docotic.Pdf offre molti modi per modificare i documenti PDF. Ecco alcune delle principali funzionalità della libreria per la modifica dei PDF:

  • Combina più PDF in uno o dividi un singolo PDF in più file.
  • Riduci le dimensioni del file PDF.
  • Riorganizza, elimina, ruota o estrai le pagine.
  • Leggi, modifica o elimina i metadati PDF.
  • Firma PDF con firme digitali.
  • Crittografa documenti o rimuovi password da un PDF.
  • Aggiungi, modifica o rimuovi annotazioni e allegati.
  • Compila AcroForms, aggiungi o rimuovi controlli 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 successive, descriverò le funzionalità di modifica PDF in modo più dettagliato. Le sezioni contengono anche frammenti di codice e link a risorse pertinenti.

Unire e dividere PDF

Questa sezione riguarda due funzionalità con obiettivi opposti.

Dividi e unisci PDF in C# e VB.NET

Combina PDF

Quando si consolidano file PDF, si crea un singolo documento PDF. Il PDF unito di solito contiene informazioni correlate da più file PDF esistenti.

Ecco un frammento di codice che mostra come combinare file PDF utilizzando 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 i casi di unione più complessi. Ad esempio, mostra come combinare documenti crittografati.

Dividi PDF

Dividere significa estrarre pagine selezionate dal PDF originale per creare uno o più nuovi file PDF. Questo processo è utile quando si desidera condividere solo una parte di un documento.

Il seguente frammento di codice 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 le dimensioni del file quando le pagine copiate
    // fanno riferimento a risorse inutilizzate come caratteri, immagini, modelli.
    copy.RemoveUnusedResources();
    copy.Save(i + ".pdf");
}

Per saperne di più su altri approcci per implementare uno splitter PDF, leggi l'articolo dedicato.

Compressione PDF

Ci sono due approcci principali quando si comprime un PDF. Il primo è quello di applicare solo operazioni che non cambiano il contenuto del file, solo la sua forma. Il secondo approccio include anche modifiche che possono causare perdita di dettagli o la qualità del documento per una migliore compressione.

Compressione PDF senza perdita di dati

Di default, la libreria salva gli oggetti PDF in modo che occupino meno byte. Per questo, esclude gli oggetti inutilizzati, scrive gli oggetti senza formattazione e usa una forma più breve ove possibile.

Per migliorare ulteriormente la compressione, Docotic.Pdf produce anche flussi di oggetti nei PDF di output. Questa è un'altra forma di scrittura di oggetti con la rappresentazione più compatta. I flussi di oggetti vengono compressi con l'algoritmo Flate.

È possibile modificare il modo in cui la libreria salva gli oggetti utilizzando opzioni di salvataggio.

Alcuni documenti contengono font, immagini, profili colore e altri oggetti duplicati. Di solito è il caso di documenti e file aggiornati in modo incrementale creati unendo più documenti. La deduplicazione di questi oggetti tramite il metodo PdfDocument.ReplaceDuplicateObjects può ridurre drasticamente le dimensioni dell'output.

Le pagine di un documento possono fare riferimento a risorse inutilizzate. Ad esempio, immagini che erano precedentemente visibili sulla pagina ma non lo sono più. Utilizzare il metodo PdfDocument.RemoveUnusedResources per rimuovere tali risorse.

Tutte queste operazioni sul PDF riducono le dimensioni del file senza perderne la qualità.

Trasformazioni con perdita

Per i file con immagini, uno dei modi più efficaci per ridurre le dimensioni del PDF è modificare lo schema di compressione delle immagini. Ad esempio, usare una compressione lossy come JPEG sulle immagini ne ridurrà le dimensioni. Come effetto collaterale, artefatti di compressione e perdita di dettagli possono essere visibili sulle immagini.

Se le immagini nel PDF sono più grandi del necessario, puoi ridimensionarle. Questo può fornire una compressione ancora migliore. Un'altra opzione è convertire le immagini in bianco e nero (bitonale).

Puoi appiattire i campi del modulo e le annotazioni per risparmiare spazio. Ha senso quando non hai più bisogno di annotazioni e campi del 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 le dimensioni dell'output. Font subsetting è un altro nome per questo processo. Puoi persino rimuovere completamente i byte dei font dal documento (unembed font). Questo potrebbe avere senso quando il documento contiene byte di un font popolare come Arial.

Altre trasformazioni rimuovono direttamente le informazioni dai documenti. Puoi rimuovere metadati, informazioni sulla 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 saperne di più e vedere alcuni esempi di codice, leggi l'articolo su come ridurre le dimensioni del file PDF.

Riordina le pagine in PDF

Ci sono sufficienti motivi per cambiare l'ordine delle pagine in un PDF. Ad esempio, potresti dover raggruppare informazioni correlate o migliorare la leggibilità del documento assicurandoti che scorra in modo logico.

Riorganizza le pagine in PDF

Oltre alla capacità di unire e dividere le pagine, Docotic.Pdf fornisce un set esteso di altri metodi per riorganizzare le pagine in PDF. Utilizzerò 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 di codici campione Pagine e navigazione. Io uso ten-pages.pdf negli snippet. Questo è un documento di test banale con un titolo Page N su ogni pagina.

Spostare le 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 set 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 solo una pagina, utilizzare il metodo PdfDocument.MovePage.

Scambia pagine PDF

Per scambiare due pagine, utilizzare il codice come nel seguente frammento.

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 dovrebbero occupare la posizione l'una dell'altra. Quando il numero di pagine non è uguale a due, utilizzare uno dei metodi sposta pagine.

Aggiungere e inserire 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 un PDF usando Docotic.Pdf API. 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 lo stesso 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 Prepend PDF. Puoi usare la combinazione di chiamate per aggiungere una pagina di copertina a un PDF.

Pagine PDF duplicate

Con la libreria API, puoi eseguire l'operazione di duplicazione come due operazioni consecutive. La prima è l'operazione di copia delle pagine. Vedere l'esempio di codice nella sezione PDF diviso.

La seconda è l'operazione di incollamento delle pagine. Per questa operazione, usa il metodo PdfDocument.Append. Quindi sposta le pagine aggiunte nella posizione richiesta.

Estrarre pagine

Il seguente frammento 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 le 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 solo una pagina.

Si consiglia di rimuovere le risorse inutilizzate dal documento con le pagine estratte.

Rimuovi pagina dal PDF

Dai un'occhiata allo snippet che mostra come eliminare una pagina in un documento PDF. In realtà elimina due pagine usando diversi overload 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. Quel metodo sovraccarica funziona con array di indici di pagina o oggetti di pagina.

Firme digitali

Docotic.Pdf implementa molte operazioni per le firme digitali in PDF e può aiutarti a mantenere l'affidabilità e la validità legale dei tuoi documenti PDF. Ecco alcuni esempi di cosa può fare la libreria:

Firma PDF con certificato. Aggiungere firme digitali in PDF è il modo per confermare l'identità del firmatario e garantire che nessuno abbia alterato il documento dopo la firma.

Firma certificata. Per aggiungere ulteriori restrizioni a un PDF, puoi firmarlo con una firma di certificazione. Puoi bloccare completamente il PDF dopo la firma o consentire alcuni tipi di modifiche.

Verifica la firma in 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 spesso richiedono che più parti firmino un singolo documento. L'aggiunta di più firme al PDF richiede che il documento venga salvato in modo incrementale.

Incorpora timestamp firma. È possibile specificare un URL di Timestamping Authority e, facoltativamente, le sue credenziali nelle opzioni di firma. La libreria incorporerà il timestamp ricevuto nella firma.

Certificato incorporato. La libreria incorpora automaticamente i certificati di firma nelle firme digitali.

La pagina Firme digitali contiene codici di esempio e ulteriori informazioni su ciascuna operazione.

Proteggi PDF

Ci sono tre funzionalità che puoi usare per garantire la sicurezza dei PDF. Docotic.Pdf può lavorare con loro in entrambe le direzioni: la libreria può proteggere i PDF e sbloccare un PDF protetto.

Sicurezza PDF

Protezione tramite password

Questa funzionalità 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.

Esistono due tipi di password nei PDF:

  • 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 di autorizzazione (password proprietario). Questa password è necessaria per rimuovere le autorizzazioni dal PDF. L'apertura di un PDF con la password proprietario consente tutte le azioni, anche se le autorizzazioni limitano determinate azioni, come la stampa, la copia o la modifica del PDF.

Puoi impostare entrambe le password per lo stesso documento PDF. Leggi su decifrare i 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 all'interno del PDF siano disponibili solo agli utenti legittimi. Solo gli utenti con la chiave di decifratura o la password corrette possono visualizzare i contenuti.

Docotic.Pdf può crittografare i file PDF utilizzando gli algoritmi RC4 a 40 bit, RC4 a 128 bit, AES a 128 bit e crittografia AES a 256 bit.

Permessi e restrizioni

Puoi impostare vari permessi su un PDF, come limitare la stampa, copiare il testo, modificare il documento e altro. I permessi influenzano l'esperienza solo quando qualcuno apre il PDF con la password utente. Le restrizioni non si applicano a coloro che aprono il PDF con la password del proprietario.

Per rimuovere i permessi da un PDF, dovresti prima rimuovere la password di sicurezza del PDF. Leggi come fare questo usando C# e l'API Docotic.Pdf.

Per sapere come garantire l'integrità del PDF oltre alla sicurezza del PDF, leggere la sezione sulle firme digitali.

Metadati in PDF

I metadati PDF sono informazioni incorporate in un file PDF che forniscono dettagli sul documento. Esistono due fonti principali di metadati: proprietà del documento PDF e metadati XMP.

Le proprietà del documento sono comunemente chiamate anche dizionario delle informazioni del documento, informazioni sui file, campi dei metadati, attributi del documento e attributi dei file.

I metadati XMP (Extensible Metadata Platform) sono fondamentalmente un file XML incorporato in un PDF. XMP utilizza un modello di dati flessibile che può memorizzare qualsiasi set di proprietà di metadati. Questi metadati utilizzano namespace per raggruppare proprietà correlate. Alcuni namespace comuni includono XMP Core/XMP Basic e Dublin Core.

Docotic.Pdf supporta pienamente sia i metadati XMP che le proprietà del documento. Si noti 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.

È possibile trovare progetti di test completi per gli esempi di questa sezione nel gruppo Metadati dei codici di esempio.

Proprietà del documento

Scopri 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 modificare il valore per ogni proprietà, ma tieni presente che per impostazione predefinita la libreria aggiorna automaticamente alcune proprietà prima di salvare il PDF. Puoi modificare questo 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. Si noti che la proprietà Producer viene sovrascritta a causa delle opzioni di salvataggio predefinite.

Puoi estrarre 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, utilizzare il metodo XmpMetadata.Unembed.

Sincronizzazione metadati

È auspicabile assicurarsi che sia i metadati XMP che le proprietà Document Info abbiano gli stessi valori per le proprietà corrispondenti. È particolarmente vero se si modificano entrambe le fonti di metadati nello stesso file.

Utilizzare il metodo PdfDocument.SyncMetadata per sincronizzare i valori in XMP Metadata e Document Info. Quando una proprietà cambia in entrambe le fonti, il metodo sovrascriverà una fonte con il valore dell'altra fonte. Leggere la documentazione per il metodo per maggiori dettagli.

Segnalibri PDF

Un documento PDF può contenere scorciatoie o link speciali che aiutano i lettori a navigare rapidamente verso sezioni o pagine specifiche. Il PDF outline è un altro nome per i segnalibri.

Schema PDF

Le app di visualizzazione solitamente visualizzano i segnalibri come l'indice di un libro, ma in modo interattivo. Quando il lettore clicca su un segnalibro, l'app di visualizzazione salta alla parte designata del documento. Un comportamento simile è possibile da ottenere utilizzando le annotazioni di collegamento.

Ecco un frammento di codice C# che mostra come aggiungere segnalibri al 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");

Lo schema PDF può avere segnalibri principali e sotto-segnalibri, rendendo più semplice la strutturazione di 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 per contrassegnare gli elementi. Guarda l'esempio completo per creare un outline con stili.

Per rimuovere un segnalibro dal PDF, utilizzare i metodi RemoveChild o RemoveChildAt. È possibile 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. Le persone si riferiscono comunemente a questi file anche 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 più PDF insieme, creando un file PDF combinato, consulta l'articolo su unione di documenti PDF.

Ecco il codice C# che mostra come aggiungere allegati 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 sopra 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");

Controllare il gruppo Allegati dei codici di esempio per trovare progetti di test completi per gli esempi di questa sezione.

Per rimuovere gli allegati dal PDF, dovresti enumerare sia gli allegati condivisi che le annotazioni di pagina e rimuovere gli elementi di cui non hai bisogno. Guarda l'esempio per il codice di enumerazione qui sotto. Per rimuovere tutte le annotazioni condivise, puoi usare una chiamata pdf.SharedAttachments.Clear().

Dovresti anche enumerare le raccolte per estrarre i file incorporati dal PDF. Ecco un codice di esempio:

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 un mix 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 al PDF utilizzando 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 saranno 5, 6 e 7. Per le pagine rimanenti, le etichette saranno Appendix page 1, Appendix page 2 e Appendix page 3.

OCR PDF

Alcuni documenti PDF contengono pagine scansionate e richiedono il riconoscimento ottico dei caratteri (OCR) prima di poter estrarre il testo da essi. Un altro caso d'uso per l'OCR è estrarre il testo da un PDF che utilizza la mappatura personalizzata da glifo a Unicode.

PDF scansionato OCR per estrarre il testo

Abbiamo un post del blog che mostra come OCR scansionato documenti. Il post contiene un esempio PDF non ricercabile e mostra come usare Tesseract OCR, codice C# e Docotic.Pdf per riconoscere il testo in PDF solo immagine. Puoi anche aggiungere un livello di testo OCR ai file PDF scansionati con l'aiuto di Docotic.Pdf.

Modifica pagine

Questa sezione parla delle modifiche alle pagine PDF esistenti, come:

  • come ruotare le pagine PDF
  • come modificare le dimensioni della pagina
  • usare la grafica vettoriale sulla tela della pagina
  • aggiungere contenuto HTML

Leggi le informazioni sulla Layout API della libreria per sapere come creare documenti PDF a partire da blocchi di costruzione quali intestazione e piè di pagina, tabelle, immagini, paragrafi di testo e simili.

Consulta le altre sezioni per informazioni su:

Ruota le pagine

Consultare il frammento di codice C# per sapere come ruotare solo una 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 le pagine PDF anche di 0, 90 e 270 gradi.

Cambia dimensione pagina

Docotic.Pdf fornisce più di un modo per modificare le dimensioni della pagina 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, non ridimensionerà il contenuto delle pagine del documento. E non rimuoverà alcun contenuto. Nasconderà solo tutto il contenuto della pagina che si trova al di fuori del rettangolo delle dimensioni specificate.

Un approccio simile è quello di ritagliare le pagine. Puoi modificare CropBox di una pagina usando 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");

Se vuoi salvare una parte della pagina come immagine, la soluzione migliore è modificare la casella di ritaglio.

Se l'obiettivo è mantenere tutti i contenuti visibili su una pagina di dimensioni diverse, allora usa l'approccio di ridimensionamento. Nel seguente frammento di codice, creo un XObject da una pagina. L'XObject è come un'immagine vettoriale. Puoi disegnare lo stesso oggetto su più pagine ridimensionandolo e ruotandolo a seconda delle necessità.

Una volta che l'XObject è pronto, cancello il contenuto della pagina precedente, 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 da oggetti grafici. Quindi puoi riempire o tracciare i percorsi usando colori da diversi spazi colore.

Trova il codice di esempio per le funzionalità relative alla grafica nel gruppo Grafica dei codici di esempio.

È anche possibile estrarre la grafica da PDF. Inizia chiamando il metodo GetObjects e poi estrai le informazioni dagli oggetti di tipo PdfPageObjectType.Path. Non dimenticare che XObjects può anche contenere 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);
        // ...
    }
}

Aggiungere HTML alle pagine PDF

Sovrapporre contenuto HTML a un documento PDF può essere utile per aggiungere elementi dinamici ai PDF, come grafici o indicatori del prezzo delle azioni.

Per maggiori dettagli e per scaricare un codice di esempio, leggi come inserire HTML in PDF.

Modifica il testo PDF

Questa sezione spiega come modificare il testo in un PDF, come cambiare il colore del testo in un PDF e come aggiungere nuovo testo.

L'editor PDF modifica il testo

Abbiamo un articolo dedicato a come estrarre testo da un PDF. Consultatelo per maggiori informazioni sull'argomento.

L'appiattimento del testo è possibile anche con l'aiuto di Docotic.Pdf.

Trova e sostituisci

Per modificare il testo in PDF, dovresti trovare l'area che contiene il testo, quindi rimuovere il testo nell'area. L'ultimo passaggio è aggiungere il nuovo testo alla stessa area del documento.

La ricerca nei PDF può essere complicata perché internamente il documento può contenere parole in qualsiasi ordine. Il testo può anche essere ruotato. Fortunatamente, 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 contenente. La libreria fornisce i mezzi per enumerare e copiare gli oggetti della pagina. Quindi è possibile omettere del testo durante la copia degli oggetti. Ciò rimuoverà essenzialmente il testo. Il codice dell'esempio modifica contenuto pagina PDF mostra tutti i dettagli del processo. Dovresti aggiornare il metodo ShouldRemoveText per usare le coordinate trovate.

Leggi la sezione successiva per scoprire come aggiungere il nuovo testo al documento.

Se si creano documenti con un testo segnaposto e in seguito si sostituisce il segnaposto con un altro testo, è possibile utilizzare al suo posto le caselle di testo.

L'idea è di aggiungere una casella di testo di sola lettura senza bordi al documento e di inserirvi il testo segnaposto. In seguito 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 del testo ai documenti, usa i metodi DrawString e DrawText di un oggetto PdfCanvas. I metodi usano il font canvas corrente. Il font deve contenere glifi per tutti i caratteri nel testo. Usa il metodo PdfFont.ContainsGlyphsForText per verificare se il font soddisfa questo requisito.

var canvas = pdf.Pages[0].Canvas;
canvas.Font = pdf.AddFont("NSimSun")
    ?? throw new ArgumentException("Font not found");

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 sul tuo sistema, 14 font Type1 incorporati o caricare un font richiesto da un file.

Cambia il colore del testo

Per cambiare il colore del testo nel PDF, utilizzare lo stesso approccio di con rimozione del testo. Dovresti cambiare almeno il metodo ReplaceColor nel codice di esempio.

Immagini

Docotic.Pdf fornisce tutto il necessario per modificare le immagini PDF. Di seguito sono riportati frammenti di codice C# per le operazioni più comuni.

Il gruppo di codici campione Immagini contiene progetti di test completi per gli esempi in questa sezione.

Aggiungi immagine al PDF

La libreria può importare immagini nei formati 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.AddImage("image.jpg")
    ?? throw new ArgumentException("Cannot add image");

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, aggiungi l'immagine una 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.AddImage(path)
        ?? throw new ArgumentException("Cannot add image");

    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 ogni dimensione di pagina per adattarla alla dimensione dell'immagine corrispondente. Prima di salvare il risultato, il codice rimuove la prima pagina vuota aggiunta implicitamente.

Estrarre immagini PDF

Abbiamo progettato Docotic.Pdf per estrarre immagini da file PDF senza compromettere la qualità delle immagini. La libreria non modifica le dimensioni o la compressione delle immagini. Otterrai immagini della stessa qualità del 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}");
}

Rimuovere e sostituire le immagini

Utilizza il metodo PdfPage.RemovePaintedImages per rimuovere tutte o solo alcune immagini da una pagina PDF. Puoi filtrare le immagini in base a 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# soprastante mostra come rimuovere le immagini con l'aiuto di Docotic.Pdf. Consiglio di rimuovere le risorse inutilizzate dopo aver modificato o rimosso le immagini.

Utilizzare il metodo PdfImage.ReplaceWith per sostituire tutte le occorrenze dell'immagine nel 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 modificare la compressione delle immagini PDF. È possibile ricomprimere le immagini utilizzando gli 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 perdita di dettagli o della qualità dell'immagine. Ma le conversioni lossy di solito aiutano a ridurre le dimensioni del documento.

firstImage.RecompressWithJpeg2000(25);

Esistono altri metodi per ricomprimere un'immagine. Controlla i metodi PdfImage con nomi che iniziano con RecompressWith. Puoi rimuovere qualsiasi compressione da un'immagine usando il metodo Uncompress.

Ridimensiona le immagini

Se alcune immagini in un documento PDF sono più grandi del necessario, la libreria può ridimensionarle o rimpicciolirle.

firstImage.Scale(0.5, PdfImageCompression.Jpeg2000, 25);

Il codice sopra rende la prima immagine due volte più piccola in entrambe le direzioni. La libreria usa la compressione JPEG 2000 per l'immagine risultante.

È possibile utilizzare uno dei metodi ResizeTo per specificare i valori esatti per la larghezza e l'altezza risultanti.

Ridimensionare le immagini solitamente riduce le dimensioni del file PDF più della modifica della compressione (vedere la sezione precedente), ma è un processo con perdita di dati.

Filigrane e sfondi

Filigrana su PDF

L'applicazione della filigrana ai PDF prevede i seguenti passaggi:

  • Creare un XObject, il contenitore per i contenuti della filigrana
  • Riempire l'oggetto con testo, immagini e grafica vettoriale
  • Timbrare le pagine PDF con l'oggetto

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 della tela della filigrana. Il pennello viene utilizzato per dipingere il testo. Per scoprire la dimensione del testo, il codice misura il testo. Quindi disegna un rettangolo con angoli arrotondati attorno al testo. La penna viene utilizzata per tracciare il rettangolo.

Una volta pronto il contenuto della filigrana, il codice lo disegna al centro di ogni pagina.

Gli sfondi PDF sono molto simili alle filigrane. Almeno puoi crearli quasi nello stesso modo. Per aggiungere uno sfondo al PDF, fai lo stesso del codice sopra, ma aggiungi watermark.DrawOnBackground = true; dopo la chiamata CreateXObject. Nota che contenuti opachi come le immagini possono oscurare lo sfondo.

Annotazioni

Docotic.Pdf fornisce una ricca API per le annotazioni in PDF. Puoi creare, modificare e rimuovere annotazioni dai documenti PDF. È anche possibile appiattire le annotazioni.

Per annotare un testo, ci sono:

  • Note adesive o annotazioni di testo. Vedere il metodo AddTextAnnotation della classe PdfPage.
  • Evidenziazioni. Vedere il metodo AddHighlightAnnotation.
  • Barrature. Vedere il metodo AddStrikeoutAnnotation.
  • Sottolineature. Vedere i metodi AddJaggedUnderlineAnnotation e AddUnderlineAnnotation.

Utilizza i link 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. Ci sono annotazioni di redazione per le parti che sono designate per essere rimosse dal documento. Puoi anche incorporare contenuti audio, video o 3D.

Evidenzia il testo

Ecco come evidenziare il 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");

Per creare un collegamento a una pagina specifica in un PDF, utilizzare 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 navigare verso risorse esterne ed eseguire anche azioni non di navigazione.

Rimuovi annotazioni

Per rimuovere annotazioni da PDF:

  1. Accedi alla raccolta di widget usando la proprietà PdfPage.Widgets o il metodo PdfDocument.GetWidgets.
  2. Controlla il tipo, le proprietà o decidi quali annotazioni non ti servono più.
  3. Rimuovi l'annotazione usando il metodo o i metodi PdfDocument.RemoveWidget dell'oggetto PdfWidgetCollection.

Per rimuovere gli allegati dal PDF, è necessario rimuovere sia le annotazioni del file sia allegati condivisi.

Redigere PDF

In quanto libreria di redazione PDF, Docotic.Pdf offre metodi per rimuovere definitivamente o oscurare rapidamente le informazioni sensibili dai documenti PDF.

Oscuramento delle informazioni su un PDF

Redigere il testo

Ecco come oscurare il testo in un PDF senza lo strumento Redact, utilizzando 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 su ogni terza parola in un documento. Si noti che il testo dietro i rettangoli rimane nel documento ed è possibile estrarlo in seguito. Per rimuovere permanentemente il testo, utilizzare l'approccio della sezione relativa alla sostituzione del testo.

Immagini censurate

Puoi usare anche rettangoli neri per coprire le immagini. Ma un approccio più semplice sarebbe quello di sostituire l'immagine con una immagine nera 1 per 1 pixel. Questo non solo evidenzierà visivamente l'immagine censurata, ma rimuoverà anche i dati dell'immagine originale.

Controlla 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 Acroform (altro nome per i moduli PDF) utilizzando tutti i tipi di elementi interattivi, come pulsanti, caselle di controllo, elenchi a discesa, caselle di riepilogo, pulsanti di scelta e campi di testo.

Di solito bastano poche righe di codice per aggiungere e impostare un campo modulo. Ad esempio, puoi aggiungere campi modificabili a PDF semplicemente chiamando il metodo PdfPage.AddTextBox. I codici di esempio nel gruppo Moduli e annotazioni forniscono ulteriori informazioni sulla creazione e l'utilizzo dei moduli.

Come compilare un modulo PDF

Utilizzare il metodo PdfDocument.GetControl per trovare un controllo PDF tramite il suo nome completo o parziale. Un'alternativa è quella di enumerare i controlli del documento utilizzando il metodo GetControls. In entrambi i casi, è necessario eseguire il cast del controllo nel tipo di campo previsto.

using var pdf = new PdfDocument(@"example-form.pdf");

if (pdf.GetControl("txt-name") is PdfTextBox nameTextBox)
    nameTextBox.Text = "Bit Miracle team";

if (pdf.GetControl("txt-email") is PdfTextBox emailTextBox)
    emailTextBox.Text = "support@bitmiracle.com";

if (pdf.GetControl("check-agree") is PdfCheckBox agreeCheckBox)
    agreeCheckBox.Checked = true;

pdf.Save("filled-form.pdf");

Il codice usa questo esempio di modulo PDF. Nel codice, imposto valori per i due campi di testo e segno di spunta la casella di controllo.

Una volta completata la compilazione di un modulo, puoi appiattire tutti i suoi campi.

Utilizzo di JavaScript nei moduli

È possibile aggiungere azioni per controllare gli eventi. La classe PdfControl fornisce l'accesso a un set predefinito di eventi. I nomi degli eventi iniziano con On (ad esempio, OnMouseDown).

Ecco un esempio di utilizzo 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

C'è un altro modo per compilare elettronicamente un PDF. Utilizzare la funzionalità FDF to PDF della biblioteca per popolare automaticamente il modulo PDF dal database o da un'altra fonte.

using var pdf = new PdfDocument(@"example-form.pdf");
pdf.ImportFdf("form-data.fdf");
pdf.Save("auto-populated.pdf");

Il codice utilizza questo file FDF per compilare tutti i campi del modulo contemporaneamente.

Appiattisci PDF

Questa sezione spiega come appiattire un PDF.

Appiattimento PDF

Quando si appiattisce un PDF, si convertono elementi interattivi come moduli e annotazioni in contenuto statico per impedire ulteriori modifiche. Un PDF appiattito può occupare notevolmente meno byte pur mantenendo lo stesso aspetto.

Appiattisci forme e annotazioni

Per appiattire un PDF compilabile, usa il metodo PdfDocument.FlattenControls. Questo metodo disegna tutti i campi del modulo e altri controlli sulla sua pagina padre, rimuovendo il controllo sorgente dal documento.

Quando si appiattisce un modulo PDF, ha senso appiattire anche le annotazioni. Utilizzare il metodo PdfDocument.FlattenWidgets per appiattire contemporaneamente sia i controlli che le annotazioni.

Se vuoi solo convertire alcuni controlli e/o annotazioni nella loro rappresentazione visiva, allora usa il metodo PdfWidget.Flatten. Dovresti prima trovare il controllo o l'annotazione richiesti.

Appiattisci il testo

Puoi convertire il testo PDF in outline con l'aiuto di Docotic.Pdf. Il motivo usuale per questo è ottenere l'indipendenza dei font. Indipendentemente dal fatto che i font siano installati o meno, il testo appiattito apparirà uguale su qualsiasi dispositivo.

Tuttavia, una volta convertito il testo in contorni, non è più possibile modificarlo come testo. Inoltre, durante il processo di appiattimento, la libreria converte il testo in grafica vettoriale. Ciò può aumentare le dimensioni dei file.

Per appiattire il testo PDF, dovresti estrarre il testo come percorsi vettoriali e copiarlo su una nuova pagina o sulla stessa pagina. C'è un codice di esempio per questo.

Salva opzioni

Nei frammenti di codice sopra, ho usato il metodo PdfDocument.Save senza argomenti aggiuntivi. La libreria usa le opzioni di salvataggio predefinite in tali casi. Abbiamo selezionato manualmente le opzioni predefinite in modo che nei casi normali funzionino perfettamente.

Tuttavia, ci sono casi in cui è necessario sovrascrivere le opzioni predefinite. Per questo, crea un oggetto PdfSaveOptions, imposta le opzioni e forniscile a uno dei metodi di salvataggio. Descriverò ulteriormente tali casi.

Per proteggere un PDF con una password o un certificato, creare un gestore di crittografia e impostarlo sulla proprietà EncryptionHandler.

Quando vuoi firmare lo stesso PDF più volte, attiva la modalità di aggiornamenti incrementali impostando la proprietà WriteIncrementally su true. Fai lo stesso quando salvi un file firmato in precedenza con nuove annotazioni o dati di 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 tali file più velocemente.

Per impedire modifiche in fase di salvataggio ad alcuni dei campi metadati, impostare le proprietà UpdateProducer e UpdateModifiedDate su false.