lunedì 22 marzo 2010

C#: split pdf in pagine singole

Oggi volevo condividere con voi un metodo scritto in c# per dividere semplicemente un file pdf in più pagine.

Facciamo uso della libreria itext# repribile qui.

 La libreria è molto potente e consente di fare un'altra miriade di operazioni, trovate tutta la documentazione a riguardo qui.

Di seguito il codice per includere la libreria:


using iTextSharp.text;
using iTextSharp.text.pdf; 
using iTextSharp.text.xml;


E qui il codice per lo split:

public static void InizioSplit(string srcfile)
        {
            try
            {
                // creaiamo il reader per un documento pdf
                PdfReader reader = new PdfReader(@srcfile);
                // prendiamo il numero totale di pagine
                int n = reader.NumberOfPages;
                MessageBox.Show("Ci sono " + n + " pagine nel file originale.");
                PdfImportedPage page;
                int rotation;
                int i = 0;
                // inseriamo il contenuto
                while (i < n)
                {
                    i++;
                    // step 1: creazione dei document-object
                    Document document1 = new Document(reader.GetPageSizeWithRotation(i));
                    // step 2: creiamo un writer per scrivere i documenti con nome uguale al numero pagina
                    PdfWriter writer1 = PdfWriter.GetInstance(document1, new FileStream(i + ".pdf", FileMode.Create));
                    // step 3: apriamo il documento
                    document1.Open();
                    PdfContentByte cb1 = writer1.DirectContent;
                    document1.SetPageSize(reader.GetPageSizeWithRotation(i));
                    document1.NewPage();
                    page = writer1.GetImportedPage(reader, i);                   
                    rotation = reader.GetPageRotation(i);     
                    if (rotation == 90 || rotation == 270)
                    {
                        cb1.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                    }
                    else
                    {
                        cb1.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }
                    // step 5: chiudiamo il documento
                    document1.Close();
                }

                   MessageBox.Show("Files creati " + i);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                MessageBox.Show(e.StackTrace);
            }
        }
stay tuned!!

1 commento:

  1. Dovrei fare una cosa simile, ma io voglio controllare il size e l'inclinazione di un intero doc pdf. Cosa devo modificare rispetto a questo metodo?

    RispondiElimina