Το iTextSharp είναι μια δημοφιλής βιβλιοθήκη που επιτρέπει τη δημιουργία και τη διαχείριση εγγράφων PDF στο περιβάλλον .NET. Είναι μια παραλλαγή του iText, μιας Java-based βιβλιοθήκης, η οποία έχει προσαρμοστεί για τη γλώσσα προγραμματισμού C# και το περιβάλλον .NET.

Χρήσεις του iTextSharp:

  • Δημιουργία PDF: Μπορεί να δημιουργήσει αρχεία PDF από την αρχή, προσθέτοντας κείμενα, εικόνες, πίνακες και άλλα στοιχεία.
  • Ανάγνωση PDF: Δίνει τη δυνατότητα ανάγνωσης και ανάλυσης του περιεχομένου ενός PDF αρχείου.
  • Μετατροπές: Μπορεί να μετατρέψει έγγραφα σε μορφή PDF, όπως HTML, XML κ.λπ.
  • Επεξεργασία PDF: Υποστηρίζει την προσθήκη υδατογραφημάτων, σχολίων και την τροποποίηση των υπάρχοντων στοιχείων του PDF.
  • Ασφάλεια: Παρέχει δυνατότητες για κρυπτογράφηση PDF, ψηφιακές υπογραφές, καθώς και ρύθμιση δικαιωμάτων ανάγνωσης ή επεξεργασίας του αρχείου.

Κύρια χαρακτηριστικά:

  1. Δημιουργία και επεξεργασία περιεχομένου PDF: Μπορείς να προσθέσεις σελίδες, πίνακες, εικόνες, παραγράφους κειμένου και άλλες δομές σε ένα PDF.
  2. Εξαγωγή δεδομένων: Μπορείς να διαβάσεις περιεχόμενο από ένα υπάρχον PDF, όπως κείμενο ή εικόνες.
  3. Υποστήριξη μορφοποίησης: Παρέχει επιλογές για μορφοποίηση κειμένων, γραμματοσειρών, χρωμάτων, και στοίχισης.
  4. Διαχείριση σελίδων και σελιδοδεικτών: Εύκολη διαχείριση της δομής του PDF με δυνατότητα
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

class Program
{
    static void Main()
    {
        Document doc = new Document();
        PdfWriter.GetInstance(doc, new FileStream("example.pdf", FileMode.Create));
        doc.Open();
        doc.Add(new Paragraph("Hello, iTextSharp!"));
        doc.Close();
    }
}

Αυτός ο κώδικας δημιουργεί ένα απλό αρχείο PDF με την πρόταση “Hello, iTextSharp!”.

Εφαρμογές:

  • Δημιουργία αναφορών: Ιδανικό για δημιουργία PDF αναφορών από δεδομένα εφαρμογών.
  • Ηλεκτρονικά τιμολόγια: Χρησιμοποιείται για την αυτόματη δημιουργία τιμολογίων σε μορφή PDF.
  • Ψηφιακές υπογραφές: Ενσωμάτωση ψηφιακών υπογραφών για την επαλήθευση της αυθεντικότητας των PDF.

Το iTextSharp χρησιμοποιείται ευρέως λόγω της ευελιξίας και της δυνατότητάς του να διαχειρίζεται PDF έγγραφα με λεπτομέρεια και ακρίβεια.

Το iTextSharp είναι μια πολύ ισχυρή βιβλιοθήκη για εργασία με PDF αρχεία, που επιτρέπει στους προγραμματιστές να δημιουργούν, να διαβάζουν, να επεξεργάζονται και να χειρίζονται PDF έγγραφα στο .NET περιβάλλον. Ακολουθεί μια λεπτομερής ανάλυση των βασικών δυνατοτήτων του iTextSharp:

1. Δημιουργία PDF από την αρχή

Το iTextSharp επιτρέπει τη δημιουργία αρχείων PDF με προγραμματιστικό τρόπο. Οι δυνατότητες δημιουργίας PDF περιλαμβάνουν:

  • Προσθήκη κειμένου: Μπορείς να προσθέσεις παραγράφους κειμένου, να ορίσεις γραμματοσειρές, μεγέθη, χρώματα, μορφοποίηση (έντονα, πλάγια) και στοίχιση.
  • Προσθήκη εικόνων: Επιτρέπει την εισαγωγή εικόνων σε διαφορετικές μορφές (JPEG, PNG, κ.λπ.) με καθορισμένες διαστάσεις και θέση.
  • Πίνακες: Μπορείς να δημιουργήσεις πίνακες με προσαρμοσμένα κελιά, χρώματα, σύνορα, και συνδυασμό κελιών. Κάθε κελί μπορεί να περιέχει κείμενο, εικόνες ή άλλες δομές.
  • Γραφικά: Υπάρχει υποστήριξη για προσθήκη διανυσματικών γραφικών, όπως γραμμές, κύκλοι και άλλα σχήματα, καθώς και χρώματα φόντου και περιγράμματα.

Φαντάσου ότι θέλεις να φτιάξεις ένα βιβλίο ή μια ζωγραφιά σε μορφή PDF. Το iTextSharp είναι σαν ένα μαγικό εργαλείο που σου επιτρέπει να δημιουργείς τέτοια αρχεία PDF χρησιμοποιώντας κώδικα, όπως να γράφεις μια λίστα οδηγιών σε έναν υπολογιστή. Ας δούμε τα βασικά βήματα για το πώς μπορείς να το κάνεις αυτό, εξηγημένα απλά, σαν να είσαι μικρός μαθητής.

1. Προσθήκη Κειμένου

Φαντάσου ότι έχεις ένα λευκό χαρτί και θέλεις να γράψεις πάνω του. Με το iTextSharp μπορείς να προσθέσεις κείμενο σε ένα PDF όπως όταν γράφεις με ένα στυλό σε χαρτί.

Παράδειγμα:

Ας πούμε ότι θέλεις να γράψεις “Γειά σου Κόσμε!” στο PDF σου. Το iTextSharp το κάνει έτσι:

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

Document doc = new Document(); // Ξεκινάς ένα καινούργιο PDF
PdfWriter.GetInstance(doc, new FileStream(“MyPDF.pdf”, FileMode.Create)); // Δημιουργείς το αρχείο
doc.Open(); // Ανοίγεις το PDF για να γράψεις μέσα

doc.Add(new Paragraph(“Γειά σου Κόσμε!”)); // Προσθέτεις το κείμενο

doc.Close(); // Κλείνεις το PDF όταν τελειώσεις

Παράδειγμα 1: Προσθήκη απλού κειμένου

Αυτό είναι το πιο βασικό παράδειγμα, όπου προσθέτουμε μια απλή πρόταση στο PDF.

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

class Program
{
static void Main()
{
// Δημιουργία PDF
Document doc = new Document();
PdfWriter.GetInstance(doc, new FileStream("SimpleText.pdf", FileMode.Create));
doc.Open(); // Ανοίγουμε το PDF

// Προσθήκη απλού κειμένου
doc.Add(new Paragraph("Αυτό είναι ένα απλό κείμενο στο PDF."));

doc.Close(); // Κλείνουμε το PDF
}
}

Παράδειγμα 2: Προσθήκη κειμένου με προσαρμοσμένη γραμματοσειρά και μέγεθος

Εδώ προσθέτουμε κείμενο με διαφορετική γραμματοσειρά και μέγεθος.

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

class Program
{
static void Main()
{
// Δημιουργία PDF
Document doc = new Document();
PdfWriter.GetInstance(doc, new FileStream(“CustomFontText.pdf”, FileMode.Create));
doc.Open();

    // Δημιουργία γραμματοσειράς
    Font font = FontFactory.GetFont(FontFactory.HELVETICA, 16, Font.BOLD);

    // Προσθήκη κειμένου με προσαρμοσμένη γραμματοσειρά
    doc.Add(new Paragraph("Αυτό το κείμενο έχει μέγεθος 16 και είναι έντονο.", font));

    doc.Close();
}

}

Παράδειγμα 3: Προσθήκη κειμένου με διαφορετικό χρώμα και στοίχιση

Σε αυτό το παράδειγμα, θα προσθέσουμε κείμενο με χρώμα και θα το στοιχίσουμε στο κέντρο της σελίδας.

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

class Program
{
static void Main()
{
// Δημιουργία PDF
Document doc = new Document();
PdfWriter.GetInstance(doc, new FileStream(“ColoredText.pdf”, FileMode.Create));
doc.Open();

    // Δημιουργία γραμματοσειράς με χρώμα
    Font font = FontFactory.GetFont(FontFactory.HELVETICA, 18, Font.BOLD, BaseColor.RED);

    // Προσθήκη κειμένου με κόκκινο χρώμα και κεντρική στοίχιση
    Paragraph paragraph = new Paragraph("Αυτό το κείμενο είναι κόκκινο και στο κέντρο.", font);
    paragraph.Alignment = Element.ALIGN_CENTER;

    doc.Add(paragraph);

    doc.Close();
}

}

Παράδειγμα 4: Προσθήκη πολλών παραγράφων με διαφορετική μορφοποίηση

Σε αυτό το παράδειγμα, θα προσθέσουμε πολλές παραγράφους, καθεμία με διαφορετική μορφοποίηση.

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

class Program
{
static void Main()
{
// Δημιουργία PDF
Document doc = new Document();
PdfWriter.GetInstance(doc, new FileStream(“MultipleParagraphs.pdf”, FileMode.Create));
doc.Open();

    // Προσθήκη παραγράφων με διαφορετική μορφοποίηση
    Font font1 = FontFactory.GetFont(FontFactory.COURIER, 12, Font.NORMAL);
    Font font2 = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 14, Font.BOLD, BaseColor.BLUE);
    Font font3 = FontFactory.GetFont(FontFactory.TIMES, 16, Font.ITALIC, BaseColor.GREEN);

    doc.Add(new Paragraph("Αυτή είναι η πρώτη παράγραφος με κανονική μορφή.", font1));
    doc.Add(new Paragraph("Αυτή είναι η δεύτερη παράγραφος με έντονη και μπλε μορφή.", font2));
    doc.Add(new Paragraph("Αυτή είναι η τρίτη παράγραφος με πλάγια και πράσινη μορφή.", font3));

    doc.Close();
}

}

Παράδειγμα 5: Προσθήκη τίτλου με διαφορετική γραμματοσειρά και κειμένου

Αυτό το παράδειγμα περιλαμβάνει τη δημιουργία ενός τίτλου και στη συνέχεια την προσθήκη παραγράφων με κανονικό κείμενο

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

class Program
{
static void Main()
{
// Δημιουργία PDF
Document doc = new Document();
PdfWriter.GetInstance(doc, new FileStream(“TitleAndText.pdf”, FileMode.Create));
doc.Open();

    // Δημιουργία τίτλου
    Font titleFont = FontFactory.GetFont(FontFactory.TIMES_BOLD, 20, BaseColor.BLACK);
    Paragraph title = new Paragraph("Αυτός είναι ένας Τίτλος", titleFont);
    title.Alignment = Element.ALIGN_CENTER;

    // Δημιουργία κειμένου
    Font textFont = FontFactory.GetFont(FontFactory.HELVETICA, 12, BaseColor.DARK_GRAY);
    Paragraph text = new Paragraph("Αυτό είναι ένα κείμενο κάτω από τον τίτλο. Μπορείς να προσθέσεις όσες παραγράφους θέλεις.", textFont);

    // Προσθήκη τίτλου και κειμένου στο PDF
    doc.Add(title);
    doc.Add(new Paragraph("\n")); // Προσθήκη κενής γραμμής
    doc.Add(text);

    doc.Close();
}

}

Παράδειγμα 6: Προσθήκη λίστας στο κείμενο

Σε αυτό το παράδειγμα, θα προσθέσουμε μια λίστα στο PDF.

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;

class Program
{
static void Main()
{
// Δημιουργία PDF
Document doc = new Document();
PdfWriter.GetInstance(doc, new FileStream(“ListText.pdf”, FileMode.Create));
doc.Open();

    // Δημιουργία λίστας
    List list = new List(List.UNORDERED);
    list.Add(new ListItem("Πρώτο στοιχείο λίστας"));
    list.Add(new ListItem("Δεύτερο στοιχείο λίστας"));
    list.Add(new ListItem("Τρίτο στοιχείο λίστας"));

    // Προσθήκη λίστας στο PDF
    doc.Add(list);

    doc.Close();
}

}

Προσθήκη Εικόνων

    Όπως μπορείς να κολλήσεις μια εικόνα σε ένα φύλλο χαρτί, έτσι και το iTextSharp σου επιτρέπει να βάλεις εικόνες στο PDF σου. Μπορείς να προσθέσεις μια φωτογραφία ή ένα σκίτσο.


    Παράδειγμα:

    Αν έχεις μια εικόνα, π.χ. ένα λουλούδι, και θέλεις να τη βάλεις μέσα στο PDF, ακολουθείς αυτό το βήμα:

    Image img = Image.GetInstance(“flower.jpg”); // Φορτώνεις την εικόνα
    img.ScaleToFit(200f, 200f); // Ορίζεις το μέγεθος της εικόνας
    doc.Add(img); // Προσθέτεις την εικόνα στο PDF

    Αυτός ο κώδικας θα βάλει μια εικόνα στο PDF σου, και μπορείς να καθορίσεις πόσο μεγάλη ή μικρή θα είναι η εικόνα.

    Η προσθήκη εικόνων σε PDF χρησιμοποιώντας το iTextSharp είναι εξίσου εύκολη με την προσθήκη κειμένου. Μπορείς να φορτώσεις εικόνες, να τις τοποθετήσεις σε συγκεκριμένη θέση, να ορίσεις το μέγεθός τους και να προσθέσεις διάφορες προσαρμογές. Ας δούμε μερικά ολοκληρωμένα παραδείγματα για την προσθήκη εικόνων σε PDF.
    Παράδειγμα 1: Προσθήκη μιας απλής εικόνας

    Αυτό είναι το πιο βασικό παράδειγμα όπου προσθέτουμε μια εικόνα στο PDF.

    csharp

    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using System.IO;

    class Program
    {
    static void Main()
    {
    // Δημιουργία PDF
    Document doc = new Document();
    PdfWriter.GetInstance(doc, new FileStream(“SimpleImage.pdf”, FileMode.Create));
    doc.Open();

        // Φόρτωση και προσθήκη εικόνας
        Image img = Image.GetInstance("flower.jpg"); // Χρήση της διαδρομής εικόνας
        doc.Add(img); // Προσθήκη της εικόνας στο PDF
    
        doc.Close(); // Κλείσιμο του PDF
    }

    }

    Παράδειγμα 2: Προσαρμογή μεγέθους εικόνας

    Σε αυτό το παράδειγμα, θα αλλάξουμε το μέγεθος της εικόνας για να ταιριάζει καλύτερα στο PDF.

    csharp

    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using System.IO;

    class Program
    {
    static void Main()
    {
    // Δημιουργία PDF
    Document doc = new Document();
    PdfWriter.GetInstance(doc, new FileStream(“ResizedImage.pdf”, FileMode.Create));
    doc.Open();

        // Φόρτωση εικόνας
        Image img = Image.GetInstance("flower.jpg");
    
        // Προσαρμογή μεγέθους εικόνας
        img.ScaleToFit(200f, 200f); // Ορίζουμε μέγιστο ύψος και πλάτος 200 μονάδων
        doc.Add(img);
    
        doc.Close();
    }

    }

    Παράδειγμα 3: Τοποθέτηση εικόνας σε συγκεκριμένη θέση

    Αν θέλεις να τοποθετήσεις την εικόνα σε συγκεκριμένες συντεταγμένες της σελίδας (π.χ. πάνω δεξιά ή στη μέση), μπορείς να χρησιμοποιήσεις απόλυτη τοποθέτηση.

    csharp

    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using System.IO;

    class Program
    {
    static void Main()
    {
    // Δημιουργία PDF
    Document doc = new Document(PageSize.A4); // Ορίζουμε μέγεθος σελίδας
    PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(“PositionedImage.pdf”, FileMode.Create));
    doc.Open();

        // Φόρτωση εικόνας
        Image img = Image.GetInstance("flower.jpg");
    
        // Προσαρμογή μεγέθους εικόνας
        img.ScaleToFit(100f, 100f);
    
        // Τοποθέτηση εικόνας σε συγκεκριμένη θέση
        img.SetAbsolutePosition(400f, 700f); // Ορίζουμε τις συντεταγμένες (X=400, Y=700)
        doc.Add(img);
    
        doc.Close();
    }

    }

    Παράδειγμα 4: Προσθήκη εικόνας ως υδατογράφημα (watermark)

    Εδώ προσθέτουμε μια εικόνα ως υδατογράφημα στο PDF, δηλαδή ως φόντο πίσω από το περιεχόμενο.

    csharp

    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using System.IO;

    class Program
    {
    static void Main()
    {
    // Δημιουργία PDF
    Document doc = new Document(PageSize.A4);
    PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(“WatermarkedImage.pdf”, FileMode.Create));
    doc.Open();

        // Φόρτωση εικόνας
        Image img = Image.GetInstance("flower.jpg");
    
        // Προσαρμογή μεγέθους και διαφάνειας
        img.ScaleToFit(500f, 500f); // Ορίζουμε μέγεθος
        img.SetAbsolutePosition(100f, 300f); // Τοποθετούμε την εικόνα στο φόντο
    
        // Προσθήκη εικόνας σαν background
        PdfContentByte canvas = writer.DirectContentUnder;
        canvas.AddImage(img); // Τοποθέτηση κάτω από το περιεχόμενο
    
        // Προσθήκη κάποιου κειμένου στο PDF
        doc.Add(new Paragraph("Αυτό είναι κείμενο πάνω από το υδατογράφημα."));
    
        doc.Close();
    }

    }

    Παράδειγμα 5: Προσθήκη πολλαπλών εικόνων

    Σε αυτό το παράδειγμα, προσθέτουμε πολλές εικόνες στην ίδια σελίδα του PDF.

    csharp

    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using System.IO;

    class Program
    {
    static void Main()
    {
    // Δημιουργία PDF
    Document doc = new Document();
    PdfWriter.GetInstance(doc, new FileStream(“MultipleImages.pdf”, FileMode.Create));
    doc.Open();

        // Προσθήκη της πρώτης εικόνας
        Image img1 = Image.GetInstance("flower.jpg");
        img1.ScaleToFit(150f, 150f); // Μικραίνουμε την πρώτη εικόνα
        img1.SetAbsolutePosition(100f, 600f); // Τοποθετούμε την πρώτη εικόνα
        doc.Add(img1);
    
        // Προσθήκη της δεύτερης εικόνας
        Image img2 = Image.GetInstance("tree.jpg");
        img2.ScaleToFit(150f, 150f); // Μικραίνουμε τη δεύτερη εικόνα
        img2.SetAbsolutePosition(300f, 600f); // Τοποθετούμε τη δεύτερη εικόνα
        doc.Add(img2);
    
        doc.Close();
    }

    }

    Παράδειγμα 6: Προσθήκη εικόνας ως κεφαλίδα ή υποσέλιδο

    Μπορείς να προσθέσεις μια εικόνα ως κεφαλίδα ή υποσέλιδο σε κάθε σελίδα του PDF.

    csharp

    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using System.IO;

    class Program : PdfPageEventHelper
    {
    public override void OnEndPage(PdfWriter writer, Document doc)
    {
    // Προσθήκη εικόνας ως υποσέλιδο
    Image img = Image.GetInstance(“logo.jpg”);
    img.ScaleToFit(100f, 50f);
    img.SetAbsolutePosition(450f, 20f); // Τοποθετούμε την εικόνα στο κάτω μέρος της σελίδας
    writer.DirectContent.AddImage(img);
    }

    static void Main()
    {
        // Δημιουργία PDF
        Document doc = new Document();
        PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream("HeaderFooterImage.pdf", FileMode.Create));
    
        // Προσθήκη custom event για την προσθήκη εικόνας σε κάθε σελίδα
        writer.PageEvent = new Program();
    
        doc.Open();
    
        // Προσθήκη κειμένου
        doc.Add(new Paragraph("Αυτό είναι ένα έγγραφο με εικόνα ως υποσέλιδο."));
    
        doc.Close();
    }

    }

    Συμπέρασμα

    Με το iTextSharp, η προσθήκη εικόνων σε αρχεία PDF είναι ευέλικτη και ισχυρή. Μπορείς να κάνεις πολλά πράγματα, όπως να προσθέσεις απλές εικόνες, να τις προσαρμόσεις σε συγκεκριμένες θέσεις και μεγέθη, να δημιουργήσεις υδατογραφήματα, να προσθέσεις πολλαπλές εικόνες, ή ακόμα και να τις χρησιμοποιήσεις ως κεφαλίδες ή υποσέλιδα.

    Δημιουργία Πινάκων

      Οι πίνακες στο PDF είναι σαν πίνακες στο χαρτί, όπως σε ένα τετράδιο. Φαντάσου ότι θέλεις να φτιάξεις έναν πίνακα με 3 στήλες και 2 γραμμές.


      Παράδειγμα:

      Αν θέλεις να δημιουργήσεις έναν πίνακα για να βάλεις δεδομένα όπως ονόματα ή βαθμούς, μπορείς να το κάνεις έτσι:

      PdfPTable table = new PdfPTable(3); // Δημιουργείς έναν πίνακα με 3 στήλες
      table.AddCell(“Όνομα”); // Πρώτο κελί στη στήλη 1
      table.AddCell(“Ηλικία”); // Πρώτο κελί στη στήλη 2
      table.AddCell(“Βαθμός”); // Πρώτο κελί στη στήλη 3
      table.AddCell(“Μαρία”); // Δεύτερη γραμμή, στήλη 1
      table.AddCell(“10”); // Δεύτερη γραμμή, στήλη 2
      table.AddCell(“Άριστα”); // Δεύτερη γραμμή, στήλη 3

      doc.Add(table); // Προσθέτεις τον πίνακα στο PDF

      Αυτό θα δημιουργήσει έναν πίνακα με ονόματα, ηλικίες και βαθμούς.

      Η δημιουργία πινάκων σε αρχεία PDF με το iTextSharp είναι ένας πολύ αποτελεσματικός τρόπος για να παρουσιάσεις δεδομένα σε οργανωμένη μορφή, όπως θα έκανες σε ένα φύλλο Excel ή σε μια έκθεση με γραμμές και στήλες. Ακολουθούν διάφορα ολοκληρωμένα παραδείγματα που δείχνουν πώς μπορείς να δημιουργήσεις, να μορφοποιήσεις και να προσαρμόσεις πίνακες σε ένα PDF.
      Παράδειγμα 1: Δημιουργία ενός απλού πίνακα

      Αυτό είναι το πιο βασικό παράδειγμα όπου δημιουργούμε έναν πίνακα με 3 στήλες και προσθέτουμε μερικά δεδομένα.

      csharp

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“SimpleTable.pdf”, FileMode.Create));
      doc.Open();

          // Δημιουργία πίνακα με 3 στήλες
          PdfPTable table = new PdfPTable(3);
      
          // Προσθήκη κελιών
          table.AddCell("Στήλη 1");
          table.AddCell("Στήλη 2");
          table.AddCell("Στήλη 3");
      
          table.AddCell("Δεδομένο 1");
          table.AddCell("Δεδομένο 2");
          table.AddCell("Δεδομένο 3");
      
          // Προσθήκη πίνακα στο PDF
          doc.Add(table);
      
          doc.Close();
      }

      }

      Παράδειγμα 2: Δημιουργία πίνακα με προσαρμοσμένες αναλογίες στηλών

      Μπορείς να ορίσεις διαφορετικά πλάτη για κάθε στήλη, ανάλογα με το περιεχόμενο που θέλεις να παρουσιάσεις.

      csharp

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“CustomColumnWidths.pdf”, FileMode.Create));
      doc.Open();

          // Δημιουργία πίνακα με 3 στήλες
          PdfPTable table = new PdfPTable(3);
      
          // Ορισμός αναλογιών στηλών (60%, 20%, 20%)
          float[] columnWidths = new float[] { 2f, 1f, 1f };
          table.SetWidths(columnWidths);
      
          // Προσθήκη κελιών
          table.AddCell("Μεγάλη Στήλη");
          table.AddCell("Μικρή Στήλη 1");
          table.AddCell("Μικρή Στήλη 2");
      
          table.AddCell("Αυτό είναι ένα μεγάλο κείμενο στη στήλη.");
          table.AddCell("Μικρό");
          table.AddCell("Μικρότερο");
      
          // Προσθήκη πίνακα στο PDF
          doc.Add(table);
      
          doc.Close();
      }

      }

      Παράδειγμα 3: Προσθήκη μορφοποίησης στα κελιά

      Σε αυτό το παράδειγμα, θα μορφοποιήσουμε τα κελιά με διαφορετικές γραμματοσειρές, χρώματα και στοίχιση.

      csharp

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“StyledTable.pdf”, FileMode.Create));
      doc.Open();

          // Δημιουργία πίνακα με 3 στήλες
          PdfPTable table = new PdfPTable(3);
      
          // Δημιουργία γραμματοσειρών
          Font headerFont = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 12, BaseColor.WHITE);
          Font cellFont = FontFactory.GetFont(FontFactory.HELVETICA, 10, BaseColor.BLACK);
      
          // Δημιουργία κεφαλίδας με στυλ
          PdfPCell headerCell = new PdfPCell(new Phrase("Κεφαλίδα", headerFont));
          headerCell.BackgroundColor = BaseColor.DARK_GRAY;
          headerCell.HorizontalAlignment = Element.ALIGN_CENTER;
          headerCell.Padding = 10;
      
          // Προσθήκη κεφαλίδας στις 3 στήλες
          table.AddCell(headerCell);
          table.AddCell(headerCell);
          table.AddCell(headerCell);
      
          // Προσθήκη κελιών με κανονική μορφοποίηση
          PdfPCell cell = new PdfPCell(new Phrase("Κείμενο Κελιού", cellFont));
          cell.Padding = 5;
          cell.HorizontalAlignment = Element.ALIGN_LEFT;
      
          table.AddCell(cell);
          table.AddCell(cell);
          table.AddCell(cell);
      
          // Προσθήκη πίνακα στο PDF
          doc.Add(table);
      
          doc.Close();
      }

      }

      Παράδειγμα 4: Συγχώνευση κελιών (colspan, rowspan)

      Μπορείς να συγχωνεύσεις κελιά οριζόντια (colspan) ή κατακόρυφα (rowspan), ώστε να δημιουργήσεις πιο σύνθετους πίνακες.

      csharp

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“MergedCellsTable.pdf”, FileMode.Create));
      doc.Open();

          // Δημιουργία πίνακα με 3 στήλες
          PdfPTable table = new PdfPTable(3);
      
          // Συγχώνευση κελιών σε οριζόντια διάταξη (colspan)
          PdfPCell cell1 = new PdfPCell(new Phrase("Συγχωνευμένο κελί 1"));
          cell1.Colspan = 2;
          cell1.HorizontalAlignment = Element.ALIGN_CENTER;
          table.AddCell(cell1);
      
          // Κανονικά κελιά
          table.AddCell("Κελί 2");
          table.AddCell("Κελί 3");
      
          // Συγχώνευση κελιών σε κατακόρυφη διάταξη (rowspan)
          PdfPCell cell2 = new PdfPCell(new Phrase("Συγχωνευμένο κελί σε σειρά 2"));
          cell2.Rowspan = 2;
          table.AddCell(cell2);
      
          // Κανονικά κελιά
          table.AddCell("Κελί 4");
          table.AddCell("Κελί 5");
          table.AddCell("Κελί 6");
      
          // Προσθήκη πίνακα στο PDF
          doc.Add(table);
      
          doc.Close();
      }

      }

      Παράδειγμα 5: Προσθήκη εικόνων σε πίνακα

      Μπορείς να προσθέσεις εικόνες μέσα σε έναν πίνακα, όπως προσθέτεις κείμενο.

      csharp

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“TableWithImages.pdf”, FileMode.Create));
      doc.Open();

          // Δημιουργία πίνακα με 2 στήλες
          PdfPTable table = new PdfPTable(2);
      
          // Προσθήκη κειμένου
          table.AddCell("Κείμενο δίπλα στην εικόνα");
      
          // Προσθήκη εικόνας
          Image img = Image.GetInstance("flower.jpg");
          img.ScaleToFit(100f, 100f);
          PdfPCell imageCell = new PdfPCell(img);
          imageCell.Padding = 5;
          table.AddCell(imageCell);
      
          // Προσθήκη κειμένου στην επόμενη σειρά
          table.AddCell("Κείμενο χωρίς εικόνα");
          table.AddCell("Άλλο κείμενο");
      
          // Προσθήκη πίνακα στο PDF
          doc.Add(table);
      
          doc.Close();
      }

      }

      Παράδειγμα 6: Προσθήκη κεφαλίδων και υποσέλιδων στον πίνακα

      Μπορείς να ορίσεις κεφαλίδες και υποσέλιδα σε έναν πίνακα ώστε να είναι εμφανή σε πολλές σελίδες του PDF, εάν ο πίνακας εκτείνεται σε περισσότερες από μία σελίδες.

      csharp

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“TableWithHeaders.pdf”, FileMode.Create));
      doc.Open();

          // Δημιουργία πίνακα με 3 στήλες
          PdfPTable table = new PdfPTable(3);
          table.HeaderRows = 1; // Ορίζουμε την πρώτη σειρά ως κεφαλίδα
      
          // Προσθήκη κεφαλίδων
          table.AddCell("Κεφαλίδα 1");
          table.AddCell("Κεφαλίδα 2");
          table.AddCell("Κεφαλίδα 3");
      
          // Προσθήκη πολλών γραμμών δεδομένων
          for (int i = 0; i < 50; i++)
          {
              table.AddCell("Δεδομένα 1");
              table.AddCell("Δεδομένα 2");
              table.AddCell("Δεδομένα 3");
          }
      
          // Προσθήκη πίνακα στο PDF
          doc.Add(table);
      
          doc.Close();
      }

      }

      Συμπέρασμα

      Η βιβλιοθήκη iTextSharp σου επιτρέπει να δημιουργείς πίνακες σε PDF αρχεία με μεγάλη ευελιξία, όπως πίνακες με προσαρμοσμένα μεγέθη στηλών, συγχωνευμένα κελιά, εικόνες και μορφοποίηση. Μπορείς επίσης να προσθέσεις στυλ, κεφαλίδες και να προσαρμόσεις τις αναλογίες των στηλών και των γραμμών ανάλογα με τις ανάγκες σου.

      Γραφικά και Σχήματα

      Το iTextSharp σου επιτρέπει να ζωγραφίζεις απλά σχήματα, όπως κύκλους, γραμμές ή τετράγωνα, όπως όταν σχεδιάζεις με μολύβι.
      Παράδειγμα:

      Φαντάσου ότι θέλεις να τραβήξεις μια γραμμή ή να σχεδιάσεις ένα κύκλο στο PDF σου. Μπορείς να το κάνεις έτσι:

      PdfContentByte cb = writer.DirectContent;
      cb.MoveTo(100f, 600f); // Ξεκινάς τη γραμμή από αυτό το σημείο
      cb.LineTo(200f, 600f); // Τελειώνεις τη γραμμή σε αυτό το σημείο
      cb.Stroke(); // Τραβάς τη γραμμή

      cb.Circle(150f, 500f, 50f); // Σχεδιάζεις έναν κύκλο με κέντρο στο (150, 500) και ακτίνα 50
      cb.Stroke(); // Σχεδιάζεις τον κύκλο

      Με αυτό το παράδειγμα, μπορείς να σχεδιάσεις σχήματα όπως γραμμές και κύκλους μέσα στο PDF σου.

      Με το iTextSharp, μπορείς να προσθέσεις γραμμικά γραφικά και σχήματα σε ένα PDF, όπως γραμμές, κύκλους, τετράγωνα, ορθογώνια, και άλλα σχήματα. Αυτά τα γραφικά μπορούν να χρησιμοποιηθούν για να διαχωρίσεις τμήματα, να προσθέσεις σχέδια ή ακόμα και να δημιουργήσεις διαγράμματα. Ας δούμε μερικά ολοκληρωμένα παραδείγματα για τη χρήση γραφικών και σχημάτων.
      Παράδειγμα 1: Σχεδίαση απλής γραμμής

      Αυτό είναι το πιο βασικό παράδειγμα όπου σχεδιάζουμε μια οριζόντια γραμμή στο PDF.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(“SimpleLine.pdf”, FileMode.Create));
      doc.Open();

          // Σχεδίαση γραμμής
          PdfContentByte cb = writer.DirectContent;
          cb.MoveTo(100f, 750f); // Ξεκινάς από το σημείο (100, 750)
          cb.LineTo(500f, 750f); // Τέλος της γραμμής στο σημείο (500, 750)
          cb.Stroke(); // Σχεδιάζεις τη γραμμή
      
          doc.Close();
      }

      }

      Παράδειγμα 2: Σχεδίαση κύκλου

      Εδώ προσθέτουμε έναν κύκλο σε συγκεκριμένη θέση στο PDF.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(“SimpleCircle.pdf”, FileMode.Create));
      doc.Open();

          // Σχεδίαση κύκλου
          PdfContentByte cb = writer.DirectContent;
          cb.Circle(300f, 500f, 100f); // Κύκλος με κέντρο στο (300, 500) και ακτίνα 100
          cb.Stroke(); // Σχεδιάζεις τον κύκλο
      
          doc.Close();
      }

      }

      Παράδειγμα 3: Σχεδίαση ορθογωνίου με γέμισμα χρώματος

      Σε αυτό το παράδειγμα, θα σχεδιάσουμε ένα ορθογώνιο και θα το γεμίσουμε με χρώμα.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(“FilledRectangle.pdf”, FileMode.Create));
      doc.Open();

          // Σχεδίαση ορθογωνίου με γέμισμα χρώματος
          PdfContentByte cb = writer.DirectContent;
          cb.SetColorFill(BaseColor.BLUE); // Επιλογή χρώματος γέμισματος
          cb.Rectangle(100f, 500f, 300f, 200f); // Ορθογώνιο από το σημείο (100, 500) με πλάτος 300 και ύψος 200
          cb.Fill(); // Γέμισμα ορθογωνίου με μπλε χρώμα
      
          doc.Close();
      }

      }

      Παράδειγμα 4: Σχεδίαση πολυγώνου

      Το iTextSharp επιτρέπει να σχεδιάσεις πολυγωνικά σχήματα, συνδέοντας πολλαπλά σημεία.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(“Polygon.pdf”, FileMode.Create));
      doc.Open();

          // Σχεδίαση πολυγώνου
          PdfContentByte cb = writer.DirectContent;
          cb.MoveTo(100f, 500f); // Πρώτο σημείο
          cb.LineTo(200f, 600f); // Δεύτερο σημείο
          cb.LineTo(300f, 500f); // Τρίτο σημείο
          cb.LineTo(400f, 600f); // Τέταρτο σημείο
          cb.LineTo(500f, 500f); // Πέμπτο σημείο
          cb.ClosePath(); // Κλείνεις το σχήμα
          cb.Stroke(); // Σχεδιάζεις το πολύγωνο
      
          doc.Close();
      }

      }

      Παράδειγμα 5: Σχεδίαση καμπύλης Bézier

      Μπορείς επίσης να σχεδιάσεις καμπύλες χρησιμοποιώντας σημεία ελέγχου για να δημιουργήσεις ομαλές καμπύλες γραμμές.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(“BezierCurve.pdf”, FileMode.Create));
      doc.Open();

          // Σχεδίαση καμπύλης Bézier
          PdfContentByte cb = writer.DirectContent;
          cb.MoveTo(100f, 500f); // Αρχικό σημείο
          cb.CurveTo(200f, 700f, 400f, 300f, 500f, 500f); // Καμπύλη με 2 σημεία ελέγχου
          cb.Stroke(); // Σχεδιάζεις την καμπύλη
      
          doc.Close();
      }

      }

      Παράδειγμα 6: Σχεδίαση πολλών γραμμών και σχημάτων σε συνδυασμό

      Σε αυτό το παράδειγμα, σχεδιάζουμε γραμμές, κύκλους και ορθογώνια σε ένα μόνο PDF, δημιουργώντας ένα σύνθετο διάγραμμα.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(“MultipleShapes.pdf”, FileMode.Create));
      doc.Open();

          PdfContentByte cb = writer.DirectContent;
      
          // Σχεδίαση γραμμής
          cb.MoveTo(100f, 700f);
          cb.LineTo(500f, 700f);
          cb.Stroke();
      
          // Σχεδίαση κύκλου
          cb.Circle(300f, 600f, 50f);
          cb.Stroke();
      
          // Σχεδίαση ορθογωνίου
          cb.SetColorFill(BaseColor.YELLOW);
          cb.Rectangle(150f, 400f, 200f, 100f);
          cb.Fill();
      
          // Σχεδίαση καμπύλης
          cb.MoveTo(100f, 300f);
          cb.CurveTo(200f, 500f, 400f, 100f, 500f, 300f);
          cb.Stroke();
      
          doc.Close();
      }

      }

      Παράδειγμα 7: Προσθήκη χρώματος σε γραμμές και σχήματα

      Μπορείς να αλλάξεις το χρώμα των γραμμών και των σχημάτων με διάφορες επιλογές χρώματος.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(“ColoredShapes.pdf”, FileMode.Create));
      doc.Open();

          PdfContentByte cb = writer.DirectContent;
      
          // Σχεδίαση μπλε γραμμής
          cb.SetColorStroke(BaseColor.BLUE);
          cb.MoveTo(100f, 700f);
          cb.LineTo(500f, 700f);
          cb.Stroke();
      
          // Σχεδίαση κόκκινου κύκλου
          cb.SetColorStroke(BaseColor.RED);
          cb.Circle(300f, 600f, 50f);
          cb.Stroke();
      
          // Σχεδίαση πράσινου ορθογωνίου
          cb.SetColorFill(BaseColor.GREEN);
          cb.Rectangle(150f, 400f, 200f, 100f);
          cb.Fill();
      
          doc.Close();
      }

      }

      Παράδειγμα 8: Σχεδίαση διαγραμμάτων τύπου πλέγματος (grid)

      Μπορείς να δημιουργήσεις πλέγματα σχεδιάζοντας πολλές γραμμές παράλληλα ή κάθετα.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(“Grid.pdf”, FileMode.Create));
      doc.Open();

          PdfContentByte cb = writer.DirectContent;
      
          // Σχεδίαση οριζόντιων γραμμών
          for (float y = 100f; y <= 700f; y += 50f)
          {
              cb.MoveTo(100f, y);
              cb.LineTo(500f, y);
              cb.Stroke();
          }
      
          // Σχεδίαση κάθετων γραμμών
          for (float x = 100f; x <= 500f; x += 50f)
          {
              cb.MoveTo(x, 100f);
              cb.LineTo(x, 700f);
              cb.Stroke();
          }
      
          doc.Close();
      }

      }

      Συμπέρασμα

      Η βιβλιοθήκη iTextSharp σου παρέχει μεγάλη ευελιξία στη δημιουργία και διαχείριση γραφικών και σχημάτων σε PDF. Μπορείς να σχεδιάσεις γραμμές, κύκλους, ορθογώνια, καμπύλες, πολύγωνα, ακόμα και να δημιουργήσεις διαγράμματα ή πλέγματα. Αυτό σου δίνει τη δυνατότητα να προσθέσεις οπτική πληροφορία στο έγγραφο PDF με πολύ ευέλικτο τρόπο.

      2. Ανάγνωση και εξαγωγή δεδομένων από PDF

      Το iTextSharp παρέχει δυνατότητες ανάγνωσης υπαρχόντων PDF αρχείων, με πρόσβαση σε διάφορα τμήματα του περιεχομένου:

      • Εξαγωγή κειμένου: Μπορείς να εξάγεις το κείμενο από συγκεκριμένες σελίδες ή ολόκληρο το έγγραφο.
      • Ανάλυση PDF: Υποστηρίζεται η ανάλυση του περιεχομένου του PDF για αναζήτηση κειμένου, αντικειμένων, πινάκων, εικόνων και άλλων στοιχείων που περιλαμβάνονται.
      • Πρόσβαση σε μεταδεδομένα: Μπορείς να εξαγάγεις ή να επεξεργαστείς μεταδεδομένα όπως τίτλο, συγγραφέα, λέξεις-κλειδιά και άλλες πληροφορίες που είναι ενσωματωμένες στο αρχείο PDF.

      Η ανάγνωση και εξαγωγή δεδομένων από PDF είναι κάτι που γίνεται πιο εύκολα αντιληπτό αν το εξηγήσουμε βήμα-βήμα, σαν να μιλάμε σε κάποιον που δεν έχει πολλές γνώσεις στον προγραμματισμό.

      Σκέψου ότι ένα αρχείο PDF είναι σαν ένα βιβλίο. Αυτό το βιβλίο έχει σελίδες, κείμενα, εικόνες, πίνακες και μερικές φορές ακόμα και “κρυφές” πληροφορίες, όπως ποιος το έγραψε, πότε γράφτηκε, και άλλα στοιχεία. Το iTextSharp είναι ένα εργαλείο που μας βοηθάει να ανοίξουμε αυτό το “βιβλίο” και να το εξερευνήσουμε.

      1. Εξαγωγή Κειμένου

      Τι είναι η εξαγωγή κειμένου;

      Φαντάσου ότι έχεις ένα PDF και θέλεις να πάρεις όλο το κείμενο από μέσα του, σαν να το αντιγράφεις από ένα βιβλίο. Το iTextSharp μπορεί να σου βοηθήσει να βρεις αυτό το κείμενο και να το “εξάγεις”, δηλαδή να το πάρεις έξω από το PDF.

      Παράδειγμα:

      Ας υποθέσουμε ότι έχουμε ένα PDF αρχείο και θέλουμε να διαβάσουμε το κείμενο από αυτό.

      using System;
      using System.IO;
      using iText.Kernel.Pdf;
      using iText.Kernel.Pdf.Canvas.Parser;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF εγγράφου
      string filePath = “example.pdf”;
      PdfReader reader = new PdfReader(filePath);
      PdfDocument pdfDoc = new PdfDocument(reader);

          // Ανάγνωση κειμένου από όλες τις σελίδες
          string extractedText = "";
          for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
          {
              extractedText += PdfTextExtractor.GetTextFromPage(pdfDoc.GetPage(i));
          }
      
          // Εμφάνιση του κειμένου
          Console.WriteLine("Κείμενο από το PDF:");
          Console.WriteLine(extractedText);
      
          // Κλείσιμο του PDF
          pdfDoc.Close();
      }

      }

      Τι συμβαίνει εδώ;

      Ανοίγουμε το PDF αρχείο με την εντολή PdfReader.
      Για κάθε σελίδα, το iTextSharp διαβάζει το κείμενο με την εντολή PdfTextExtractor.GetTextFromPage.
      Το κείμενο που βγάζουμε το εμφανίζουμε στην οθόνη.

      Αυτό μοιάζει σαν να ανοίγεις ένα βιβλίο και να αρχίζεις να διαβάζεις κάθε σελίδα και να γράφεις ό,τι βλέπεις.

      1. Ανάλυση PDF
        Τι είναι η ανάλυση PDF;

      Η ανάλυση PDF είναι σαν να κάνεις “ζουμ” σε ένα PDF και να κοιτάς λεπτομερώς τι υπάρχει μέσα. Δεν θέλεις απλώς να πάρεις το κείμενο. Θέλεις να δεις εικόνες, αντικείμενα, και άλλες πληροφορίες που υπάρχουν σε κάθε σελίδα.
      Παράδειγμα:

      Εδώ θα δούμε πώς μπορούμε να αναλύσουμε το περιεχόμενο ενός PDF για να εξάγουμε πιο περίπλοκα δεδομένα, όπως εικόνες.

      csharp

      using System;
      using System.IO;
      using iText.Kernel.Pdf;
      using iText.Kernel.Pdf.Canvas.Parser;
      using iText.Kernel.Pdf.Canvas.Parser.Listener;
      using iText.IO.Image;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF εγγράφου
      string filePath = “example.pdf”;
      PdfReader reader = new PdfReader(filePath);
      PdfDocument pdfDoc = new PdfDocument(reader);

          // Δημιουργία ενός listener για την ανάλυση του περιεχομένου
          IEventListener listener = new SimpleTextExtractionStrategy();
      
          // Για κάθε σελίδα στο PDF
          for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
          {
              // Ανάγνωση των δεδομένων της σελίδας
              PdfCanvasProcessor processor = new PdfCanvasProcessor(listener);
              processor.ProcessPageContent(pdfDoc.GetPage(i));
      
              // Εξαγωγή του κειμένου
              string pageText = listener.GetResultantText();
              Console.WriteLine("Κείμενο από σελίδα " + i + ":");
              Console.WriteLine(pageText);
      
              // Προσθήκη λογικής για ανάλυση εικόνων (αν υπάρχουν)
          }
      
          // Κλείσιμο του PDF
          pdfDoc.Close();
      }

      }

      Τι συμβαίνει εδώ;

      Ανοίγουμε το PDF και χρησιμοποιούμε έναν listener που "ακούει" τι περιεχόμενο υπάρχει στη σελίδα.
      Αυτός ο listener μπορεί να εξάγει κείμενο και να μας πει εάν υπάρχουν και άλλα στοιχεία, όπως εικόνες.

      Μπορούμε να φανταστούμε ότι ο listener είναι σαν έναν βοηθό που κοιτάζει κάθε σελίδα του βιβλίου και σου λέει: “Σε αυτή τη σελίδα βλέπω κείμενο, εικόνες, και άλλα αντικείμενα.”

      1. Πρόσβαση σε Μεταδεδομένα
        Τι είναι τα μεταδεδομένα;

      Τα μεταδεδομένα είναι οι “κρυφές πληροφορίες” που υπάρχουν σε ένα PDF αρχείο. Για παράδειγμα, ποιος το έγραψε, πότε το έγραψε, ποιο είναι το θέμα του αρχείου, κ.λπ. Είναι σαν τις πληροφορίες που βρίσκεις στο εξώφυλλο ενός βιβλίου ή στις σημειώσεις του συγγραφέα.
      Παράδειγμα:

      Ας δούμε πώς μπορούμε να πάρουμε αυτά τα μεταδεδομένα από ένα PDF.

      csharp

      using System;
      using iText.Kernel.Pdf;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF εγγράφου
      string filePath = “example.pdf”;
      PdfReader reader = new PdfReader(filePath);
      PdfDocument pdfDoc = new PdfDocument(reader);

          // Εξαγωγή μεταδεδομένων
          PdfDocumentInfo info = pdfDoc.GetDocumentInfo();
          Console.WriteLine("Τίτλος: " + info.GetTitle());
          Console.WriteLine("Συγγραφέας: " + info.GetAuthor());
          Console.WriteLine("Δημιουργός: " + info.GetCreator());
          Console.WriteLine("Λέξεις-κλειδιά: " + info.GetKeywords());
          Console.WriteLine("Θέμα: " + info.GetSubject());
      
          // Κλείσιμο του PDF
          pdfDoc.Close();
      }

      }

      Τι συμβαίνει εδώ;

      Ανοίγουμε το PDF και παίρνουμε τις πληροφορίες που έχουν αποθηκευτεί στο έγγραφο, όπως τον τίτλο, τον συγγραφέα και τις λέξεις-κλειδιά.
      Σκέψου ότι αυτά είναι σαν τις πληροφορίες που βρίσκεις στη "βιβλιοθήκη" για ένα βιβλίο – πληροφορίες που σε βοηθούν να το κατανοήσεις και να το ταξινομήσεις.

      Τι Μάθαμε;

      Εξαγωγή Κειμένου: Μπορούμε να διαβάσουμε το κείμενο από το PDF, σαν να το αντιγράφουμε από ένα βιβλίο.
      Ανάλυση PDF: Μπορούμε να κοιτάξουμε σε βάθος ένα PDF και να δούμε όλες τις λεπτομέρειες, όπως εικόνες και αντικείμενα.
      Μεταδεδομένα: Μπορούμε να πάρουμε τις πληροφορίες "πίσω από τις σελίδες" του PDF, όπως το ποιος το έγραψε και ποια είναι η σημασία του.

      Η διαδικασία ανάγνωσης και εξαγωγής δεδομένων από PDF μας επιτρέπει να “σπάσουμε” το PDF και να δούμε τι πραγματικά κρύβει μέσα του.

      Το iTextSharp προσφέρει ισχυρές δυνατότητες για την ανάγνωση και την εξαγωγή δεδομένων από PDF αρχεία, επιτρέποντάς σου να αναλύεις και να εξάγεις περιεχόμενο όπως κείμενα, εικόνες, μεταδεδομένα και φόρμες από ένα PDF. Παρακάτω παραθέτω παραδείγματα που καλύπτουν τις πιο βασικές και συνηθισμένες λειτουργίες ανάγνωσης και εξαγωγής δεδομένων από αρχεία PDF.

      Παράδειγμα 1: Ανάγνωση κειμένου από PDF

      Σε αυτό το παράδειγμα, θα διαβάσουμε το κείμενο από ένα PDF αρχείο και θα το εμφανίσουμε στην κονσόλα.

      using iTextSharp.text.pdf;
      using System;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF για ανάγνωση
      PdfReader reader = new PdfReader(“example.pdf”);

          // Εξαγωγή κειμένου από κάθε σελίδα
          for (int i = 1; i <= reader.NumberOfPages; i++)
          {
              string pageText = PdfTextExtractor.GetTextFromPage(reader, i);
              Console.WriteLine("Κείμενο από σελίδα " + i + ":");
              Console.WriteLine(pageText);
          }
      
          reader.Close(); // Κλείσιμο του PDF
      }

      }

      Αυτός ο κώδικας διαβάζει κάθε σελίδα ενός PDF και εξάγει το κείμενο από αυτή, το οποίο στη συνέχεια εμφανίζεται στην κονσόλα.

      Παράδειγμα 2: Εξαγωγή μεταδεδομένων από PDF

      Μπορείς να εξαγάγεις τα μεταδεδομένα από ένα PDF, όπως τον τίτλο, τον συγγραφέα, τη δημιουργία του αρχείου, κ.λπ.

      using iTextSharp.text.pdf;
      using System;
      using System.Collections.Generic;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF
      PdfReader reader = new PdfReader(“example.pdf”);

          // Εξαγωγή μεταδεδομένων
          Dictionary<string, string> info = reader.Info;
      
          Console.WriteLine("Μεταδεδομένα PDF:");
          foreach (var entry in info)
          {
              Console.WriteLine(entry.Key + ": " + entry.Value);
          }
      
          reader.Close(); // Κλείσιμο του PDF
      }

      }

      Αυτό το παράδειγμα εξάγει τα μεταδεδομένα του PDF, όπως τίτλος, συγγραφέας, ημερομηνία δημιουργίας κ.λπ., και τα εμφανίζει στην κονσόλα.

      Παράδειγμα 3: Εξαγωγή δεδομένων από φόρμες PDF (AcroForms)

      Μπορείς να εξαγάγεις δεδομένα από φόρμες PDF που έχουν συμπληρωθεί από χρήστες, όπως σε μια φόρμα αίτησης ή ένα ηλεκτρονικό τιμολόγιο.

      using iTextSharp.text.pdf;
      using System;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF
      PdfReader reader = new PdfReader(“form.pdf”);

          // Ανάγνωση των δεδομένων της φόρμας
          AcroFields formFields = reader.AcroFields;
          var fieldKeys = formFields.Fields.Keys;
      
          foreach (string key in fieldKeys)
          {
              string fieldValue = formFields.GetField(key);
              Console.WriteLine("Πεδίο: " + key + " = " + fieldValue);
          }
      
          reader.Close(); // Κλείσιμο του PDF
      }

      }

      Αυτός ο κώδικας διαβάζει τα πεδία μιας φόρμας PDF και εξάγει τις τιμές που έχει εισάγει ο χρήστης.

      Παράδειγμα 4: Εξαγωγή εικόνων από PDF

      Μπορείς να εξάγεις εικόνες που είναι ενσωματωμένες σε ένα PDF.

      using iTextSharp.text.pdf;
      using iTextSharp.text.pdf.parser;
      using System;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF
      PdfReader reader = new PdfReader(“example_with_images.pdf”);

          // Εξαγωγή εικόνων
          for (int i = 1; i <= reader.NumberOfPages; i++)
          {
              PdfDictionary pageDict = reader.GetPageN(i);
              PdfDictionary resources = (PdfDictionary)PdfReader.GetPdfObject(pageDict.Get(PdfName.RESOURCES));
              PdfDictionary xObject = (PdfDictionary)PdfReader.GetPdfObject(resources.Get(PdfName.XOBJECT));
      
              if (xObject != null)
              {
                  foreach (PdfName name in xObject.Keys)
                  {
                      PdfObject obj = xObject.Get(name);
                      if (obj.IsIndirect())
                      {
                          PdfDictionary imgObj = (PdfDictionary)PdfReader.GetPdfObject(obj);
                          PdfName subtype = (PdfName)PdfReader.GetPdfObject(imgObj.Get(PdfName.SUBTYPE));
                          if (PdfName.IMAGE.Equals(subtype))
                          {
                              int xrefIndex = ((PRIndirectReference)obj).Number;
                              PdfObject pdfObj = reader.GetPdfObject(xrefIndex);
                              PdfStream pdfStream = (PdfStream)pdfObj;
                              byte[] imgBytes = PdfReader.GetStreamBytesRaw((PRStream)pdfStream);
      
                              File.WriteAllBytes("image_from_pdf_" + i + ".jpg", imgBytes); // Αποθήκευση εικόνας
                          }
                      }
                  }
              }
          }
      
          reader.Close(); // Κλείσιμο του PDF
      }

      }

      Αυτό το παράδειγμα δείχνει πώς να εξάγεις εικόνες από ένα PDF και να τις αποθηκεύσεις σε αρχεία.

      Παράδειγμα 5: Εξαγωγή συγκεκριμένων λέξεων ή φράσεων από PDF

      Μπορείς να αναζητήσεις συγκεκριμένες λέξεις ή φράσεις μέσα στο κείμενο ενός PDF και να τις εξαγάγεις.

      using iTextSharp.text.pdf;
      using iTextSharp.text.pdf.parser;
      using System;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF
      PdfReader reader = new PdfReader(“example.pdf”);

          // Αναζήτηση λέξης σε κάθε σελίδα
          string searchWord = "Ενδιαφέρουσα";
          for (int i = 1; i <= reader.NumberOfPages; i++)
          {
              string pageText = PdfTextExtractor.GetTextFromPage(reader, i);
              if (pageText.Contains(searchWord))
              {
                  Console.WriteLine($"Η λέξη \"{searchWord}\" βρέθηκε στη σελίδα {i}");
              }
          }
      
          reader.Close(); // Κλείσιμο του PDF
      }

      }

      Αυτός ο κώδικας αναζητά μια συγκεκριμένη λέξη σε κάθε σελίδα ενός PDF και επιστρέφει τις σελίδες όπου βρέθηκε.

      Παράδειγμα 6: Ανάγνωση συνδέσμων (Hyperlinks) από PDF

      Μπορείς να εξάγεις τις πληροφορίες των υπερσυνδέσμων από ένα PDF.

      using iTextSharp.text.pdf;
      using iTextSharp.text.pdf.parser;
      using System;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF
      PdfReader reader = new PdfReader(“example_with_links.pdf”);

          // Εξαγωγή συνδέσμων από κάθε σελίδα
          for (int i = 1; i <= reader.NumberOfPages; i++)
          {
              PdfDictionary pageDict = reader.GetPageN(i);
              PdfArray annots = pageDict.GetAsArray(PdfName.ANNOTS);
      
              if (annots != null)
              {
                  foreach (PdfObject annot in annots.ArrayList)
                  {
                      PdfDictionary annotation = (PdfDictionary)PdfReader.GetPdfObject(annot);
                      PdfDictionary action = (PdfDictionary)PdfReader.GetPdfObject(annotation.Get(PdfName.A));
      
                      if (action != null)
                      {
                          PdfString uri = action.GetAsString(PdfName.URI);
                          if (uri != null)
                          {
                              Console.WriteLine("Σύνδεσμος στη σελίδα " + i + ": " + uri.ToString());
                          }
                      }
                  }
              }
          }
      
          reader.Close(); // Κλείσιμο του PDF
      }

      }

      Αυτό το παράδειγμα εξάγει τις διευθύνσεις URL από τους συνδέσμους (hyperlinks) που υπάρχουν σε κάθε σελίδα ενός PDF.

      Συμπέρασμα

      Το iTextSharp προσφέρει πολλές δυνατότητες για την ανάγνωση και εξαγωγή δεδομένων από αρχεία PDF. Μπορείς να εξάγεις κείμενα, εικόνες, μεταδεδομένα, συνδέσμους, δεδομένα από φόρμες, και να κάνεις αναζητήσεις μέσα στο περιεχόμενο. Αυτά τα εργαλεία είναι χρήσιμα για την ανάλυση και την επεξεργασία εγγράφων PDF.

      3. Επεξεργασία και μετατροπή PDF

      Το iTextSharp μπορεί να χρησιμοποιηθεί για να τροποποιήσει ή να μετατρέψει υπάρχοντα PDF αρχεία:

      • Συγχώνευση PDF: Μπορείς να συγχωνεύσεις πολλά αρχεία PDF σε ένα, είτε πλήρη έγγραφα είτε συγκεκριμένες σελίδες από αυτά.
      • Διαίρεση PDF: Το iTextSharp επιτρέπει να χωρίσεις ένα αρχείο PDF σε πολλά μικρότερα αρχεία, με βάση συγκεκριμένες σελίδες ή τμήματα.
      • Προσθήκη ή αφαίρεση σελίδων: Υποστηρίζει την προσθήκη νέων σελίδων ή την αφαίρεση υπαρχουσών από ένα PDF.
      • Μετατροπή HTML σε PDF: Υπάρχει η δυνατότητα μετατροπής αρχείων HTML σε PDF, συμπεριλαμβανομένης της υποστήριξης για CSS και σύνθετες μορφές HTML.
      • Προσθήκη υδατογραφημάτων: Μπορείς να προσθέσεις κείμενα ή εικόνες ως υδατογραφήματα (watermarks) στις σελίδες, είτε ως φόντο είτε πάνω από το περιεχόμενο.

      Το iTextSharp είναι ένα εξαιρετικό εργαλείο που επιτρέπει την επεξεργασία και τη μετατροπή των PDF αρχείων με διάφορους τρόπους, όπως η συγχώνευση, η διαίρεση, η προσθήκη ή αφαίρεση σελίδων, η μετατροπή HTML σε PDF και η προσθήκη υδατογραφημάτων. Ας δούμε αναλυτικά κάθε λειτουργία με απλά λόγια και παραδείγματα.

      1. Συγχώνευση PDF

      Τι είναι η συγχώνευση PDF;

      Η συγχώνευση PDF σημαίνει ότι παίρνεις πολλές διαφορετικές σελίδες ή ολόκληρα αρχεία PDF και τα “κολλάς” σε ένα νέο αρχείο PDF. Σκέψου το σαν να παίρνεις δύο ή περισσότερα βιβλία και να ενώνεις τις σελίδες τους σε ένα καινούργιο βιβλίο.

      Παράδειγμα:

      Ας υποθέσουμε ότι έχουμε δύο αρχεία PDF και θέλουμε να τα συγχωνεύσουμε σε ένα αρχείο.

      using System;
      using iText.Kernel.Pdf;
      using iText.Kernel.Utils;

      class Program
      {
      static void Main()
      {
      // Ορισμός των αρχείων PDF που θα συγχωνευτούν
      string[] pdfFiles = { “file1.pdf”, “file2.pdf” };

          // Δημιουργία του νέου αρχείου PDF που θα περιέχει τη συγχώνευση
          string mergedPdfPath = "merged_output.pdf";
          PdfDocument mergedPdf = new PdfDocument(new PdfWriter(mergedPdfPath));
      
          PdfMerger merger = new PdfMerger(mergedPdf);
      
          // Συγχώνευση των αρχείων PDF
          foreach (string file in pdfFiles)
          {
              PdfDocument pdf = new PdfDocument(new PdfReader(file));
              merger.Merge(pdf, 1, pdf.GetNumberOfPages());
              pdf.Close();
          }
      
          // Κλείσιμο του συγχωνευμένου PDF
          mergedPdf.Close();
      
          Console.WriteLine("Τα PDF συγχωνεύτηκαν επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Ανοίγουμε δύο PDF αρχεία και τα συγχωνεύουμε σε ένα νέο αρχείο.
      Η εντολή PdfMerger.Merge παίρνει τις σελίδες και τις ενώνει.
      1. Διαίρεση PDF
        Τι είναι η διαίρεση PDF;

      Η διαίρεση ενός PDF σημαίνει ότι παίρνεις ένα μεγάλο αρχείο PDF και το “σπας” σε μικρότερα αρχεία. Είναι σαν να παίρνεις ένα βιβλίο και να το χωρίζεις σε μικρότερα βιβλία, καθένα από τα οποία περιέχει κάποιες σελίδες.
      Παράδειγμα:

      Ας υποθέσουμε ότι έχουμε ένα PDF αρχείο και θέλουμε να το χωρίσουμε σε δύο αρχεία με βάση τις σελίδες.

      csharp

      using System;
      using iText.Kernel.Pdf;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του αρχικού PDF
      string originalPdfPath = “original.pdf”;
      PdfDocument originalPdf = new PdfDocument(new PdfReader(originalPdfPath));

          // Δημιουργία του πρώτου αρχείου με τις πρώτες 2 σελίδες
          PdfDocument splitPdf1 = new PdfDocument(new PdfWriter("split1.pdf"));
          originalPdf.CopyPagesTo(1, 2, splitPdf1);
          splitPdf1.Close();
      
          // Δημιουργία του δεύτερου αρχείου με τις υπόλοιπες σελίδες
          PdfDocument splitPdf2 = new PdfDocument(new PdfWriter("split2.pdf"));
          originalPdf.CopyPagesTo(3, originalPdf.GetNumberOfPages(), splitPdf2);
          splitPdf2.Close();
      
          // Κλείσιμο του αρχικού PDF
          originalPdf.Close();
      
          Console.WriteLine("Το PDF χωρίστηκε επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Ανοίγουμε το αρχικό PDF και δημιουργούμε δύο νέα PDF αρχεία, το καθένα περιέχει διαφορετικές σελίδες από το αρχικό.
      Χρησιμοποιούμε την εντολή CopyPagesTo για να αντιγράψουμε συγκεκριμένες σελίδες σε νέα αρχεία.
      1. Προσθήκη ή Αφαίρεση Σελίδων
        Τι είναι η προσθήκη ή αφαίρεση σελίδων;

      Η προσθήκη σελίδων σημαίνει ότι μπορείς να “κολλήσεις” μια νέα σελίδα σε ένα υπάρχον PDF, ενώ η αφαίρεση σελίδων σημαίνει ότι μπορείς να διαγράψεις μια συγκεκριμένη σελίδα από το PDF. Σκέψου ότι έχεις ένα βιβλίο και θέλεις να προσθέσεις ή να αφαιρέσεις κάποιες σελίδες.
      Παράδειγμα:

      Ας δούμε πώς μπορούμε να προσθέσουμε μια νέα σελίδα στο τέλος ενός PDF.

      csharp

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF για επεξεργασία
      string pdfPath = “existing.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfReader(pdfPath), new PdfWriter(“updated.pdf”));

          Document document = new Document(pdfDoc);
      
          // Προσθήκη νέας σελίδας
          pdfDoc.AddNewPage();
          document.Add(new Paragraph("Αυτή είναι μια νέα σελίδα που προστέθηκε στο PDF."));
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Η νέα σελίδα προστέθηκε επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Ανοίγουμε το αρχικό PDF και προσθέτουμε μια νέα σελίδα στο τέλος του με την εντολή AddNewPage.
      Στη νέα σελίδα προσθέτουμε κάποιο κείμενο.

      Για να αφαιρέσουμε μια σελίδα, θα μπορούσαμε να χρησιμοποιήσουμε την εντολή RemovePage:

      csharp

      pdfDoc.RemovePage(2); // Διαγραφή της σελίδας 2

      1. Μετατροπή HTML σε PDF
        Τι είναι η μετατροπή HTML σε PDF;

      Η μετατροπή HTML σε PDF σημαίνει ότι παίρνουμε έναν ιστότοπο (ή ένα αρχείο HTML) και τον μετατρέπουμε σε ένα PDF. Σκέψου το σαν να “φωτογραφίζεις” τον ιστότοπο και τον βάζεις σε ένα PDF αρχείο.
      Παράδειγμα:

      Ας υποθέσουμε ότι έχουμε ένα αρχείο HTML και θέλουμε να το μετατρέψουμε σε PDF.

      Για αυτό το παράδειγμα, χρειάζεται να χρησιμοποιήσεις τη βιβλιοθήκη iText7 και το πακέτο iText7.pdfhtml.

      csharp

      using System;
      using iText.Html2pdf;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου HTML και PDF
      string htmlPath = “example.html”;
      string pdfPath = “html_to_pdf_output.pdf”;

          // Μετατροπή HTML σε PDF
          HtmlConverter.ConvertToPdf(new FileStream(htmlPath, FileMode.Open), new FileStream(pdfPath, FileMode.Create));
      
          Console.WriteLine("Το HTML μετατράπηκε επιτυχώς σε PDF.");
      }

      }

      Τι συμβαίνει εδώ;

      Χρησιμοποιούμε τη μέθοδο HtmlConverter.ConvertToPdf για να μετατρέψουμε το αρχείο HTML σε PDF.
      1. Προσθήκη Υδατογραφημάτων
        Τι είναι το υδατογράφημα;

      Το υδατογράφημα είναι ένα κείμενο ή μια εικόνα που προστίθεται στο φόντο ενός PDF, ώστε να δείχνει ότι το έγγραφο είναι, για παράδειγμα, “εμπιστευτικό” ή “προσωπικό”. Είναι σαν το σφραγίδα που προσθέτουμε σε χαρτιά.
      Παράδειγμα:

      Ας προσθέσουμε ένα κείμενο ως υδατογράφημα σε όλες τις σελίδες ενός PDF.

      csharp

      using System;
      using iText.Kernel.Pdf;
      using iText.Kernel.Pdf.Canvas;
      using iText.Kernel.Colors;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF για επεξεργασία
      string pdfPath = “existing.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfReader(pdfPath), new PdfWriter(“watermarked_output.pdf”));

          // Προσθήκη υδατογραφήματος σε κάθε σελίδα
          for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
          {
              PdfPage page = pdfDoc.GetPage(i);
              PdfCanvas canvas = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
              canvas.SaveState();
              canvas.SetFillColor(ColorConstants.LIGHT_GRAY);
              canvas.BeginText();
              canvas.SetFontAndSize(PdfFontFactory.CreateFont(), 60);
              canvas.MoveText(200, 400);
              canvas.ShowText("CONFIDENTIAL");
              canvas.EndText();
              canvas.RestoreState();
          }
      
          // Κλείσιμο του PDF
          pdfDoc.Close();
      
          Console.WriteLine("Το υδατογράφημα προστέθηκε επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Ανοίγουμε το αρχικό PDF και προσθέτουμε ένα υδατογράφημα σε κάθε σελίδα χρησιμοποιώντας την εντολή PdfCanvas.
      Το υδατογράφημα τοποθετείται σε συγκεκριμένη θέση στη σελίδα και εμφανίζεται με γκρι χρώμα.

      Συμπεράσματα

      Συγχώνευση PDF: Μπορείς να ενώσεις πολλά αρχεία PDF σε ένα ενιαίο αρχείο.
      Διαίρεση PDF: Μπορείς να "σπάσεις" ένα PDF σε μικρότερα αρχεία με βάση τις σελίδες.
      Προσθήκη ή Αφαίρεση Σελίδων: Μπορείς να προσθέσεις νέες σελίδες ή να αφαιρέσεις σελίδες από ένα υπάρχον PDF.
      Μετατροπή HTML σε PDF: Μπορείς να μετατρέψεις HTML έγγραφα ή ιστοσελίδες σε PDF.
      Υδατογραφήματα: Μπορείς να προσθέσεις κείμενα ή εικόνες ως υδατογραφήματα σε PDF, για να δείξεις ότι το έγγραφο είναι εμπιστευτικό ή ανήκει σε κάποιον.

      Το iTextSharp επιτρέπει την επεξεργασία και τη μετατροπή PDF εγγράφων με πολλές δυνατότητες, όπως συγχώνευση, διαχωρισμός, προσθήκη/αφαίρεση σελίδων, προσθήκη υδατογραφημάτων, ψηφιακές υπογραφές, μετατροπή HTML σε PDF, και άλλα. Ας δούμε ολοκληρωμένα παραδείγματα για τις βασικές λειτουργίες επεξεργασίας και μετατροπής PDF.

      Παράδειγμα 1: Συγχώνευση πολλών PDF σε ένα αρχείο

      Αυτό το παράδειγμα δείχνει πώς να συγχωνεύσεις δύο ή περισσότερα αρχεία PDF σε ένα νέο αρχείο.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία του νέου PDF αρχείου
      Document doc = new Document();
      PdfCopy copy = new PdfCopy(doc, new FileStream(“Merged.pdf”, FileMode.Create));
      doc.Open();

          // Λίστα με τα αρχεία PDF προς συγχώνευση
          string[] pdfFiles = { "file1.pdf", "file2.pdf" };
      
          // Συγχώνευση των αρχείων
          foreach (string file in pdfFiles)
          {
              PdfReader reader = new PdfReader(file);
              int numPages = reader.NumberOfPages;
      
              for (int i = 1; i <= numPages; i++)
              {
                  copy.AddPage(copy.GetImportedPage(reader, i));
              }
      
              reader.Close();
          }
      
          doc.Close();
      }

      }

      Αυτός ο κώδικας συγχωνεύει δύο αρχεία PDF, το “file1.pdf” και το “file2.pdf”, σε ένα νέο αρχείο “Merged.pdf”.

      Παράδειγμα 2: Διαχωρισμός PDF σε πολλαπλά αρχεία

      Εδώ δείχνουμε πώς να διαχωρίσεις ένα PDF σε πολλά αρχεία, όπου κάθε αρχείο περιέχει μια συγκεκριμένη σελίδα.

      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF για διαχωρισμό
      PdfReader reader = new PdfReader(“example.pdf”);

          // Δημιουργία ξεχωριστών αρχείων για κάθε σελίδα
          for (int i = 1; i <= reader.NumberOfPages; i++)
          {
              Document doc = new Document();
              PdfCopy copy = new PdfCopy(doc, new FileStream("Page" + i + ".pdf", FileMode.Create));
              doc.Open();
              copy.AddPage(copy.GetImportedPage(reader, i));
              doc.Close();
          }
      
          reader.Close();
      }

      }

      Αυτός ο κώδικας δημιουργεί ξεχωριστά PDF αρχεία για κάθε σελίδα του αρχικού αρχείου “example.pdf”.

      Παράδειγμα 3: Προσθήκη νέων σελίδων σε υπάρχον PDF

      Μπορείς να προσθέσεις νέες σελίδες σε ένα PDF με περιεχόμενο που καθορίζεις.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF για επεξεργασία
      PdfReader reader = new PdfReader(“example.pdf”);
      PdfStamper stamper = new PdfStamper(reader, new FileStream(“Updated.pdf”, FileMode.Create));

          // Δημιουργία νέας σελίδας στο τέλος του αρχείου
          Document doc = new Document();
          PdfContentByte cb = stamper.GetOverContent(reader.NumberOfPages);
          PdfPTable table = new PdfPTable(1);
          table.AddCell("Αυτή είναι μια νέα σελίδα!");
          doc.Add(table);
      
          // Προσθήκη κενής σελίδας
          stamper.InsertPage(reader.NumberOfPages + 1, PageSize.A4);
      
          stamper.Close();
          reader.Close();
      }

      }

      Αυτός ο κώδικας προσθέτει μια κενή σελίδα στο τέλος ενός υπάρχοντος PDF και γράφει πάνω της κείμενο ή περιεχόμενο.

      Παράδειγμα 4: Προσθήκη υδατογραφήματος (watermark) σε PDF

      Μπορείς να προσθέσεις κείμενα ή εικόνες ως υδατογραφήματα σε PDF, για παράδειγμα για προστασία εγγράφων.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF για επεξεργασία
      PdfReader reader = new PdfReader(“example.pdf”);
      PdfStamper stamper = new PdfStamper(reader, new FileStream(“Watermarked.pdf”, FileMode.Create));

          // Προσθήκη υδατογραφήματος σε κάθε σελίδα
          for (int i = 1; i <= reader.NumberOfPages; i++)
          {
              PdfContentByte cb = stamper.GetUnderContent(i);
              cb.BeginText();
              BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
              cb.SetFontAndSize(bf, 50);
              cb.SetColorFill(BaseColor.LIGHT_GRAY);
              cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "WATERMARK", 298, 421, 45);
              cb.EndText();
          }
      
          stamper.Close();
          reader.Close();
      }

      }

      Αυτό το παράδειγμα προσθέτει ένα κείμενο “WATERMARK” ως υδατογράφημα σε κάθε σελίδα ενός PDF αρχείου.

      Παράδειγμα 5: Ψηφιακή υπογραφή σε PDF

      Η ψηφιακή υπογραφή εξασφαλίζει την αυθεντικότητα και την ακεραιότητα ενός PDF.

      using iTextSharp.text.pdf;
      using iTextSharp.text.pdf.security;
      using Org.BouncyCastle.X509;
      using System.IO;
      using System.Security.Cryptography.X509Certificates;

      class Program
      {
      static void Main()
      {
      // Φόρτωση πιστοποιητικού
      X509Certificate2 cert = new X509Certificate2(“certificate.pfx”, “password”);

          // Άνοιγμα του PDF για υπογραφή
          PdfReader reader = new PdfReader("example.pdf");
          FileStream signedPdf = new FileStream("Signed.pdf", FileMode.Create);
      
          // Προσθήκη ψηφιακής υπογραφής
          PdfStamper stamper = PdfStamper.CreateSignature(reader, signedPdf, '\0');
          PdfSignatureAppearance appearance = stamper.SignatureAppearance;
          appearance.Reason = "Digital Signature";
          appearance.Location = "Office";
          appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 200, 200), 1, "Signature");
      
          IExternalSignature pks = new X509Certificate2Signature(cert, "SHA-256");
          MakeSignature.SignDetached(appearance, pks, new X509Certificate[] { cert.Certificate }, null, null, null, 0, CryptoStandard.CMS);
      
          stamper.Close();
          reader.Close();
      }

      }

      Αυτός ο κώδικας προσθέτει ψηφιακή υπογραφή στο PDF χρησιμοποιώντας ένα πιστοποιητικό.

      Παράδειγμα 6: Μετατροπή HTML σε PDF

      Μπορείς να μετατρέψεις ένα αρχείο HTML σε PDF, διατηρώντας τη μορφοποίηση.

      using iTextSharp.text;
      using iTextSharp.text.html.simpleparser;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“FromHTML.pdf”, FileMode.Create));
      doc.Open();

          // Μετατροπή HTML σε PDF
          string htmlContent = "<h1>Κεφαλίδα</h1><p>Αυτό είναι ένα PDF δημιουργημένο από HTML!</p>";
          using (StringReader sr = new StringReader(htmlContent))
          {
              HTMLWorker htmlParser = new HTMLWorker(doc);
              htmlParser.Parse(sr);
          }
      
          doc.Close();
      }

      }

      Αυτός ο κώδικας μετατρέπει το HTML περιεχόμενο σε PDF και διατηρεί τη μορφοποίηση.

      Παράδειγμα 7: Αφαίρεση σελίδων από PDF

      Μπορείς να αφαιρέσεις συγκεκριμένες σελίδες από ένα PDF και να δημιουργήσεις ένα νέο αρχείο χωρίς αυτές τις σελίδες.

      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF για επεξεργασία
      PdfReader reader = new PdfReader(“example.pdf”);
      reader.SelectPages(“1-3, 5-10”); // Διατήρηση μόνο των σελίδων 1 έως 3 και 5 έως 10

          // Δημιουργία νέου αρχείου PDF χωρίς τις σελίδες που αφαιρέθηκαν
          PdfStamper stamper = new PdfStamper(reader, new FileStream("Reduced.pdf", FileMode.Create));
          stamper.Close();
          reader.Close();
      }

      }

      Αυτός ο κώδικας αφαιρεί συγκεκριμένες σελίδες από το αρχικό PDF αρχείο και δημιουργεί ένα νέο αρχείο με τις επιλεγμένες σελίδες.
      Συμπέρασμα

      Το iTextSharp προσφέρει μεγάλη ευελιξία για την επεξεργασία και μετατροπή PDF αρχείων. Μπορείς να συγχωνεύεις, να διαχωρίζεις, να προσθέτεις ή να αφαιρείς σελίδες, να προσθέτεις υδατογραφήματα, να μετατρέπεις HTML σε PDF και να προσθέτεις ψηφιακές υπογραφές. Αυτές οι δυνατότητες το καθιστούν ένα ισχυρό εργαλείο για τη διαχείριση PDF εγγράφων.

      4. Διαχείριση Δομής και Διάταξης PDF

      Η διαχείριση της δομής ενός PDF αρχείου γίνεται με πολύ ευέλικτο τρόπο:

      • Σελιδοδείκτες (Bookmarks): Δυνατότητα δημιουργίας και διαχείρισης σελιδοδεικτών για γρήγορη πλοήγηση στο PDF έγγραφο.
      • Hyperlinks: Μπορείς να προσθέσεις συνδέσμους που οδηγούν είτε σε άλλα τμήματα του ίδιου PDF (εσωτερικοί σύνδεσμοι) είτε σε εξωτερικούς πόρους.
      • Κεφαλίδες και Υποσέλιδα: Το iTextSharp επιτρέπει την προσθήκη κεφαλίδων (headers) και υποσέλιδων (footers) σε κάθε σελίδα του PDF.
      • Αρίθμηση σελίδων: Μπορείς να προσθέσεις αυτόματη αρίθμηση σελίδων σε συγκεκριμένη θέση ή μορφή.

      Η διαχείριση της δομής και διάταξης ενός PDF είναι εξαιρετικά σημαντική, διότι επιτρέπει την οργάνωση του περιεχομένου με τρόπο που κάνει το PDF πιο εύχρηστο και καλοσχεδιασμένο. Με το iTextSharp, μπορείς να διαχειριστείς σελιδοδείκτες, να προσθέσεις συνδέσμους (hyperlinks), να τοποθετήσεις κεφαλίδες και υποσέλιδα, και να εφαρμόσεις αρίθμηση σελίδων. Ας δούμε αυτά τα χαρακτηριστικά αναλυτικά με παραδείγματα.

      1. Σελιδοδείκτες (Bookmarks)

      Τι είναι οι σελιδοδείκτες;

      Οι σελιδοδείκτες είναι σαν τα “κεφάλαια” σε ένα βιβλίο. Κάθε σελιδοδείκτης οδηγεί τον χρήστη σε ένα συγκεκριμένο σημείο του PDF, κάνοντας εύκολη την πλοήγηση. Σκέψου το σαν έναν πίνακα περιεχομένων που σε κατευθύνει σε συγκεκριμένα σημεία του εγγράφου.

      Παράδειγμα:

      Ας προσθέσουμε σελιδοδείκτες σε ένα PDF αρχείο.

      using System;
      using iText.Kernel.Pdf;
      using iText.Kernel.Pdf.Navigation;
      using iText.Layout;
      using iText.Layout.Element;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      string filePath = “bookmarks_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filePath));
      Document document = new Document(pdfDoc);

          // Προσθήκη παραγράφων με κεφάλαια
          for (int i = 1; i <= 5; i++)
          {
              document.Add(new Paragraph("Κεφάλαιο " + i).SetFontSize(20));
              document.Add(new Paragraph("Αυτό είναι το περιεχόμενο του κεφαλαίου " + i));
      
              // Δημιουργία σελιδοδείκτη για κάθε κεφάλαιο
              PdfOutline outline = pdfDoc.GetOutlines(false).AddOutline("Κεφάλαιο " + i);
              outline.AddDestination(PdfDestination.MakeDestination(new PdfString(i.ToString())));
          }
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Σελιδοδείκτες προστέθηκαν επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Κάθε κεφάλαιο έχει έναν σελιδοδείκτη που επιτρέπει στον αναγνώστη να πλοηγηθεί εύκολα στο αντίστοιχο τμήμα του PDF.
      Χρησιμοποιούμε την κλάση PdfOutline για να δημιουργήσουμε τους σελιδοδείκτες και να ορίσουμε πού θα οδηγούν.
      1. Hyperlinks
        Τι είναι οι Hyperlinks;

      Οι Hyperlinks είναι σύνδεσμοι που μπορούν να οδηγούν είτε σε άλλα τμήματα του ίδιου PDF είτε σε εξωτερικές ιστοσελίδες. Σκέψου τους σαν συνδέσμους σε ιστοσελίδες που όταν τους κλικάρεις σε πηγαίνουν κάπου αλλού.
      Παράδειγμα:

      Ας προσθέσουμε έναν εξωτερικό σύνδεσμο σε μια ιστοσελίδα μέσα σε ένα PDF.

      csharp

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.Layout.Properties;
      using iText.Kernel.Pdf.Action;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      string filePath = “hyperlinks_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filePath));
      Document document = new Document(pdfDoc);

          // Δημιουργία ενός συνδέσμου προς έναν εξωτερικό ιστότοπο
          Link externalLink = new Link("Επίσκεψη στο Google", PdfAction.CreateURI("http://www.google.com"));
          Paragraph paragraph = new Paragraph("Κάντε κλικ εδώ για να επισκεφθείτε τον ").Add(externalLink);
      
          // Προσθήκη του παραγράφου στο έγγραφο
          document.Add(paragraph);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Το hyperlink προστέθηκε επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Προσθέτουμε έναν σύνδεσμο (hyperlink) που οδηγεί στο Google. Ο σύνδεσμος αυτός τοποθετείται σε ένα κείμενο και όταν ο χρήστης κλικάρει, θα οδηγηθεί στον εξωτερικό ιστότοπο.
      Χρησιμοποιούμε την κλάση Link για να δημιουργήσουμε τον σύνδεσμο.
      1. Κεφαλίδες και Υποσέλιδα
        Τι είναι οι κεφαλίδες και τα υποσέλιδα;

      Οι κεφαλίδες (headers) και τα υποσέλιδα (footers) είναι πληροφορίες που εμφανίζονται στο πάνω ή στο κάτω μέρος κάθε σελίδας του PDF, όπως ο τίτλος του εγγράφου ή ο αριθμός σελίδας. Σκέψου τα σαν σταθερές πληροφορίες που επαναλαμβάνονται σε κάθε σελίδα, όπως στο πάνω μέρος ενός βιβλίου όπου αναγράφεται το όνομα του κεφαλαίου.
      Παράδειγμα:

      Ας προσθέσουμε μια κεφαλίδα και ένα υποσέλιδο σε κάθε σελίδα του PDF.

      csharp

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.Kernel.Pdf.Canvas;
      using iText.Kernel.Colors;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      string filePath = “header_footer_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filePath));
      Document document = new Document(pdfDoc);

          // Προσθήκη περιεχομένου στο PDF
          for (int i = 1; i <= 5; i++)
          {
              document.Add(new Paragraph("Αυτή είναι η σελίδα " + i));
              pdfDoc.AddNewPage();
          }
      
          // Προσθήκη κεφαλίδας και υποσέλιδου σε κάθε σελίδα
          for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
          {
              PdfPage page = pdfDoc.GetPage(i);
              PdfCanvas canvas = new PdfCanvas(page);
      
              // Κεφαλίδα
              canvas.BeginText();
              canvas.SetFontAndSize(PdfFontFactory.CreateFont(), 12);
              canvas.MoveText(250, 800);  // Θέση κεφαλίδας
              canvas.ShowText("Κεφαλίδα - Σελίδα " + i);
              canvas.EndText();
      
              // Υποσέλιδο
              canvas.BeginText();
              canvas.MoveText(250, 20);  // Θέση υποσέλιδου
              canvas.ShowText("Υποσέλιδο - Σελίδα " + i);
              canvas.EndText();
          }
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Κεφαλίδες και υποσέλιδα προστέθηκαν επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Προσθέτουμε κείμενα σε κεφαλίδα (header) και υποσέλιδο (footer) σε κάθε σελίδα του PDF.
      Χρησιμοποιούμε την PdfCanvas για να τοποθετήσουμε τα κείμενα σε συγκεκριμένες θέσεις πάνω στη σελίδα.
      1. Αρίθμηση Σελίδων
        Τι είναι η αρίθμηση σελίδων;

      Η αρίθμηση σελίδων είναι μια λειτουργία που προσθέτει αριθμούς στις σελίδες του PDF, όπως συμβαίνει σε ένα βιβλίο που οι σελίδες είναι αριθμημένες. Αυτή η λειτουργία κάνει το PDF πιο οργανωμένο και ευκολοδιάβαστο.
      Παράδειγμα:

      Ας προσθέσουμε αυτόματη αρίθμηση σελίδων στο υποσέλιδο κάθε σελίδας.

      csharp

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.Kernel.Pdf.Canvas;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      string filePath = “page_numbers_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filePath));
      Document document = new Document(pdfDoc);

          // Προσθήκη περιεχομένου
          for (int i = 1; i <= 10; i++)
          {
              document.Add(new Paragraph("Αυτή είναι η σελίδα " + i));
              pdfDoc.AddNewPage();
          }
      
          // Προσθήκη αρίθμησης σελίδων σε κάθε σελίδα
          for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
          {
              PdfPage page = pdfDoc.GetPage(i);
              PdfCanvas canvas = new PdfCanvas(page);
      
              // Προσθήκη αριθμού σελίδας στο υποσέλιδο
              canvas.BeginText();
              canvas.SetFontAndSize(PdfFontFactory.CreateFont(), 12);
              canvas.MoveText(500, 20);  // Θέση για τον αριθμό σελίδας
              canvas.ShowText("Σελίδα " + i);
              canvas.EndText();
          }
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Αρίθμηση σελίδων προστέθηκε επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Προσθέτουμε αυτόματους αριθμούς σελίδων στο υποσέλιδο κάθε σελίδας.
      Οι αριθμοί τοποθετούνται σε συγκεκριμένη θέση στο κάτω μέρος της κάθε σελίδας με τη χρήση της PdfCanvas.

      Συμπεράσματα

      Σελιδοδείκτες (Bookmarks): Μπορούν να χρησιμοποιηθούν για γρήγορη πλοήγηση μέσα στο PDF, δημιουργώντας μια δομή που επιτρέπει στους αναγνώστες να πηγαίνουν απευθείας σε συγκεκριμένα τμήματα.
      Hyperlinks: Μπορείς να προσθέσεις συνδέσμους που οδηγούν σε άλλα σημεία του PDF ή σε εξωτερικές ιστοσελίδες, προσφέροντας πιο διαδραστική εμπειρία στον αναγνώστη.
      Κεφαλίδες και Υποσέλιδα: Αυτά επιτρέπουν την εμφάνιση επαναλαμβανόμενων πληροφοριών σε κάθε σελίδα, όπως τον τίτλο του εγγράφου ή την αρίθμηση των σελίδων.
      Αρίθμηση Σελίδων: Η αυτόματη αρίθμηση των σελίδων είναι μια απλή αλλά σημαντική λειτουργία που κάνει το PDF πιο οργανωμένο και ευανάγνωστο.

      Αυτές οι δυνατότητες κάνουν τη διαχείριση της δομής και της διάταξης του PDF πιο ευέλικτη και ισχυρή, δίνοντας στον προγραμματιστή πλήρη έλεγχο στη μορφοποίηση του PDF.

      Το iTextSharp παρέχει ισχυρά εργαλεία για τη διαχείριση της δομής και της διάταξης ενός PDF. Αυτό περιλαμβάνει τη δυνατότητα προσθήκης κεφαλίδων και υποσέλιδων, τη διαχείριση σελιδοδεικτών, τη δημιουργία υπερσυνδέσμων και τη στοίχιση του περιεχομένου. Ακολουθούν παραδείγματα που καλύπτουν τις βασικές λειτουργίες διαχείρισης δομής και διάταξης ενός PDF.

      Παράδειγμα 1: Προσθήκη κεφαλίδων και υποσέλιδων σε PDF

      Σε αυτό το παράδειγμα, προσθέτουμε μια κεφαλίδα και ένα υποσέλιδο σε κάθε σελίδα ενός PDF αρχείου.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program : PdfPageEventHelper
      {
      public override void OnEndPage(PdfWriter writer, Document document)
      {
      // Προσθήκη κεφαλίδας
      PdfContentByte cb = writer.DirectContent;
      BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
      cb.SetFontAndSize(bf, 12);
      cb.BeginText();
      cb.ShowTextAligned(Element.ALIGN_CENTER, “Κεφαλίδα”, 300, 800, 0); // Στο κέντρο πάνω
      cb.EndText();

          // Προσθήκη υποσέλιδου (αριθμός σελίδας)
          cb.BeginText();
          cb.ShowTextAligned(Element.ALIGN_CENTER, "Σελίδα " + writer.PageNumber, 300, 30, 0); // Στο κέντρο κάτω
          cb.EndText();
      }
      
      static void Main()
      {
          // Δημιουργία PDF
          Document doc = new Document();
          PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream("HeaderFooterExample.pdf", FileMode.Create));
      
          // Προσθήκη της κλάσης για κεφαλίδα και υποσέλιδο
          writer.PageEvent = new Program();
      
          doc.Open();
          doc.Add(new Paragraph("Αυτό είναι ένα PDF με κεφαλίδα και υποσέλιδο."));
          doc.NewPage(); // Προσθήκη νέας σελίδας
          doc.Add(new Paragraph("Αυτό είναι το περιεχόμενο της δεύτερης σελίδας."));
          doc.Close();
      }

      }

      Αυτός ο κώδικας προσθέτει μια σταθερή κεφαλίδα και αριθμούς σελίδων ως υποσέλιδο σε κάθε σελίδα του PDF.

      Παράδειγμα 2: Δημιουργία σελιδοδεικτών (Bookmarks)

      Οι σελιδοδείκτες διευκολύνουν την πλοήγηση μέσα σε μεγάλα αρχεία PDF. Σε αυτό το παράδειγμα, θα προσθέσουμε σελιδοδείκτες.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;
      using System.Collections.Generic;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(“BookmarksExample.pdf”, FileMode.Create));
      doc.Open();

          // Προσθήκη περιεχομένου
          doc.Add(new Paragraph("Κεφάλαιο 1"));
          doc.NewPage();
          doc.Add(new Paragraph("Κεφάλαιο 2"));
          doc.NewPage();
          doc.Add(new Paragraph("Κεφάλαιο 3"));
      
          // Προσθήκη σελιδοδεικτών
          List<Dictionary<string, object>> bookmarks = new List<Dictionary<string, object>>();
      
          Dictionary<string, object> bookmark1 = new Dictionary<string, object>
          {
              { "Title", "Κεφάλαιο 1" },
              { "Action", "GoTo" },
              { "Page", "1 Fit" }
          };
          bookmarks.Add(bookmark1);
      
          Dictionary<string, object> bookmark2 = new Dictionary<string, object>
          {
              { "Title", "Κεφάλαιο 2" },
              { "Action", "GoTo" },
              { "Page", "2 Fit" }
          };
          bookmarks.Add(bookmark2);
      
          Dictionary<string, object> bookmark3 = new Dictionary<string, object>
          {
              { "Title", "Κεφάλαιο 3" },
              { "Action", "GoTo" },
              { "Page", "3 Fit" }
          };
          bookmarks.Add(bookmark3);
      
          // Εισαγωγή σελιδοδεικτών στο PDF
          writer.Outlines = bookmarks;
      
          doc.Close();
      }

      }

      Αυτός ο κώδικας προσθέτει σελιδοδείκτες για τρία κεφάλαια στο PDF, επιτρέποντας τη γρήγορη πλοήγηση σε αυτά τα τμήματα.

      Παράδειγμα 3: Δημιουργία υπερσυνδέσμων (Hyperlinks)

      Μπορείς να προσθέσεις συνδέσμους μέσα στο PDF που οδηγούν σε ιστοσελίδες ή σε άλλες σελίδες του ίδιου PDF.
      Εξωτερικοί υπερσύνδεσμοι (σε ιστότοπο)

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“HyperlinkExample.pdf”, FileMode.Create));
      doc.Open();

          // Δημιουργία υπερσυνδέσμου σε ιστότοπο
          Anchor anchor = new Anchor("Κάντε κλικ εδώ για να επισκεφθείτε το Google.");
          anchor.Reference = "http://www.google.com";
          doc.Add(anchor);
      
          doc.Close();
      }

      }

      Αυτό το παράδειγμα προσθέτει έναν εξωτερικό σύνδεσμο που οδηγεί στο Google.
      Εσωτερικοί υπερσύνδεσμοι (σε άλλη σελίδα του PDF)

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“InternalHyperlinkExample.pdf”, FileMode.Create));
      doc.Open();

          // Δημιουργία υπερσυνδέσμου για να πηγαίνει στη σελίδα 2
          Anchor anchor = new Anchor("Πηγαίνετε στη Σελίδα 2");
          anchor.Reference = "#page2";
          doc.Add(anchor);
      
          doc.NewPage();
          doc.Add(new Paragraph("Αυτή είναι η σελίδα 2."));
          doc.Close();
      }

      }

      Αυτός ο κώδικας δημιουργεί έναν εσωτερικό σύνδεσμο που οδηγεί από την πρώτη σελίδα στη δεύτερη.

      Παράδειγμα 4: Στοίχιση κειμένου και στοιχείων

      Μπορείς να ορίσεις τη στοίχιση κειμένου και άλλων στοιχείων μέσα στο PDF, όπως στοίχιση στο κέντρο, δεξιά ή αριστερά.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“AlignmentExample.pdf”, FileMode.Create));
      doc.Open();

          // Προσθήκη κειμένου με αριστερή στοίχιση
          Paragraph leftAligned = new Paragraph("Αριστερή στοίχιση.");
          leftAligned.Alignment = Element.ALIGN_LEFT;
          doc.Add(leftAligned);
      
          // Προσθήκη κειμένου με κεντρική στοίχιση
          Paragraph centerAligned = new Paragraph("Κεντρική στοίχιση.");
          centerAligned.Alignment = Element.ALIGN_CENTER;
          doc.Add(centerAligned);
      
          // Προσθήκη κειμένου με δεξιά στοίχιση
          Paragraph rightAligned = new Paragraph("Δεξιά στοίχιση.");
          rightAligned.Alignment = Element.ALIGN_RIGHT;
          doc.Add(rightAligned);
      
          doc.Close();
      }

      }

      Αυτός ο κώδικας προσθέτει παραγράφους κειμένου με διαφορετική στοίχιση: αριστερή, κεντρική και δεξιά.

      Παράδειγμα 5: Διαχείριση περιθωρίων σε PDF

      Μπορείς να ορίσεις τα περιθώρια των σελίδων για να προσαρμόσεις τη διάταξη του περιεχομένου στο PDF.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF με προσαρμοσμένα περιθώρια (left, right, top, bottom)
      Document doc = new Document(PageSize.A4, 50, 50, 100, 50);
      PdfWriter.GetInstance(doc, new FileStream(“MarginsExample.pdf”, FileMode.Create));
      doc.Open();

          doc.Add(new Paragraph("Αυτό το PDF έχει προσαρμοσμένα περιθώρια."));
          doc.Close();
      }

      }

      Αυτός ο κώδικας δημιουργεί ένα PDF με περιθώρια 50 μονάδων αριστερά, δεξιά, και κάτω, και 100 μονάδων στην κορυφή της σελίδας.

      Παράδειγμα 6: Προσθήκη παραγράφων και διαχείριση αποστάσεων

      Μπορείς να προσθέσεις παραγράφους και να ορίσεις αποστάσεις μεταξύ τους για να δημιουργήσεις μια πιο επαγγελματική διάταξη.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“ParagraphSpacingExample.pdf”, FileMode.Create));
      doc.Open();

          // Προσθήκη παραγράφων με προσαρμοσμένες αποστάσεις
          Paragraph para1 = new Paragraph("Αυτή είναι η πρώτη παράγραφος.");
          para1.SpacingAfter = 20f; // Απόσταση μετά την παράγραφο
      
          Paragraph para2 = new Paragraph("Αυτή είναι η δεύτερη παράγραφος.");
          para2.SpacingBefore = 10f; // Απόσταση πριν την παράγραφο
      
          doc.Add(para1);
          doc.Add(para2);
      
          doc.Close();
      }

      }

      Αυτό το παράδειγμα δείχνει πώς να προσθέσεις παραγράφους με προσαρμοσμένες αποστάσεις πριν και μετά από αυτές.

      Παράδειγμα 7: Προσθήκη πλαισίου γύρω από το κείμενο

      Μπορείς να προσθέσεις πλαίσια γύρω από το κείμενο για να το κάνεις να ξεχωρίζει.

      using iTextSharp.text;
      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“TextBoxExample.pdf”, FileMode.Create));
      doc.Open();

          // Δημιουργία πλαισίου γύρω από κείμενο
          PdfPCell cell = new PdfPCell(new Phrase("Αυτό είναι κείμενο μέσα σε πλαίσιο."));
          cell.Border = PdfPCell.BOX;
          cell.Padding = 10f;
      
          // Δημιουργία πίνακα για προσθήκη του κελιού
          PdfPTable table = new PdfPTable(1);
          table.AddCell(cell);
      
          doc.Add(table);
          doc.Close();
      }

      }

      Αυτός ο κώδικας δημιουργεί ένα πλαίσιο γύρω από το κείμενο χρησιμοποιώντας ένα κελί πίνακα για να προσθέσει τα όρια

      5. Ασφάλεια και Κρυπτογράφηση PDF

      Το iTextSharp παρέχει πολλές επιλογές για την ασφάλεια των PDF αρχείων, όπως:

      • Κρυπτογράφηση: Υποστηρίζει κρυπτογράφηση αρχείων PDF με χρήση αλγορίθμων όπως AES ή RC4. Μπορείς να ορίσεις δικαιώματα ανάγνωσης ή επεξεργασίας, ζητώντας κωδικό πρόσβασης για πρόσβαση στο αρχείο.
      • Ψηφιακές υπογραφές: Υπάρχει υποστήριξη για ψηφιακές υπογραφές PDF, που εξασφαλίζουν την αυθεντικότητα και την ακεραιότητα του εγγράφου.
      • Δικαιώματα Χρήστη: Μπορείς να ορίσεις δικαιώματα χρήστη για να καθορίσεις αν επιτρέπεται η εκτύπωση, η τροποποίηση, η αντιγραφή κειμένου και άλλες ενέργειες.

      Η ασφάλεια και η κρυπτογράφηση ενός PDF αρχείου είναι πολύ σημαντικές, ειδικά όταν πρόκειται για ευαίσθητες πληροφορίες που θέλεις να προστατέψεις από μη εξουσιοδοτημένη πρόσβαση ή τροποποίηση. Το iTextSharp παρέχει εργαλεία για να κάνεις τα PDF ασφαλή μέσω κρυπτογράφησης, ψηφιακών υπογραφών και καθορισμού δικαιωμάτων χρήστη.

      Ας δούμε αναλυτικά κάθε μία από αυτές τις δυνατότητες, καθώς και παραδείγματα.

      1. Κρυπτογράφηση PDF

      Τι είναι η κρυπτογράφηση PDF;

      Η κρυπτογράφηση ενός PDF είναι σαν να βάζεις ένα “κλειδί” στο αρχείο, έτσι ώστε μόνο άτομα που γνωρίζουν τον κωδικό πρόσβασης να μπορούν να το διαβάσουν ή να το επεξεργαστούν. Μπορείς να ορίσεις κωδικό για την ανάγνωση του PDF ή για την επεξεργασία του, και να καθορίσεις ποια δικαιώματα έχει ο χρήστης (π.χ., να εκτυπώνει, να αντιγράφει περιεχόμενο).

      Παράδειγμα:

      Ας δούμε πώς μπορείς να κρυπτογραφήσεις ένα PDF με κωδικό πρόσβασης.

      using System;
      using iText.Kernel.Pdf;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF
      string inputFilePath = “unprotected.pdf”;
      string outputFilePath = “protected.pdf”;

          // Κρυπτογράφηση του PDF
          WriterProperties writerProps = new WriterProperties()
              .SetStandardEncryption(
                  "userpassword".GetBytes(),  // Κωδικός πρόσβασης χρήστη
                  "ownerpassword".GetBytes(),  // Κωδικός πρόσβασης ιδιοκτήτη
                  EncryptionConstants.ALLOW_PRINTING | EncryptionConstants.ALLOW_COPY,
                  EncryptionConstants.ENCRYPTION_AES_128);
      
          PdfWriter writer = new PdfWriter(outputFilePath, writerProps);
          PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputFilePath), writer);
      
          // Κλείσιμο του PDF
          pdfDoc.Close();
      
          Console.WriteLine("Το PDF κρυπτογραφήθηκε επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Το αρχείο PDF κρυπτογραφείται χρησιμοποιώντας AES 128-bit κρυπτογράφηση.
      Δύο κωδικοί πρόσβασης ορίζονται: ένας για τον χρήστη (user password) και ένας για τον ιδιοκτήτη (owner password). Ο κωδικός του ιδιοκτήτη επιτρέπει πλήρη πρόσβαση στο PDF.
      Ορίζουμε συγκεκριμένα δικαιώματα για τον χρήστη, όπως το δικαίωμα εκτύπωσης και αντιγραφής.
      1. Ψηφιακές Υπογραφές
        Τι είναι οι ψηφιακές υπογραφές;

      Η ψηφιακή υπογραφή είναι μια μέθοδος που επιβεβαιώνει την ταυτότητα του ατόμου που υπογράφει το PDF και εξασφαλίζει ότι το έγγραφο δεν έχει τροποποιηθεί από την υπογραφή του. Είναι σαν να “σφραγίζεις” το PDF για να εξασφαλίσεις την αυθεντικότητά του.
      Παράδειγμα:

      Ας προσθέσουμε μια ψηφιακή υπογραφή σε ένα PDF. Για αυτό το παράδειγμα, θα χρειαστείς ένα αρχείο πιστοποιητικού (.pfx).

      csharp

      using System;
      using System.IO;
      using iText.Signatures;
      using iText.Kernel.Pdf;
      using Org.BouncyCastle.Pkcs;
      using Org.BouncyCastle.Security;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείων PDF και πιστοποιητικού
      string inputFilePath = “unsigned.pdf”;
      string outputFilePath = “signed.pdf”;
      string certFilePath = “certificate.pfx”; // Το πιστοποιητικό σου
      string certPassword = “certpassword”; // Κωδικός πιστοποιητικού

          // Ανάγνωση του πιστοποιητικού
          Pkcs12Store pkcs12Store = new Pkcs12Store(new FileStream(certFilePath, FileMode.Open, FileAccess.Read), certPassword.ToCharArray());
          string alias = null;
          foreach (var entry in pkcs12Store.Aliases)
          {
              if (pkcs12Store.IsKeyEntry((string)entry))
              {
                  alias = (string)entry;
                  break;
              }
          }
      
          var pk = pkcs12Store.GetKey(alias).Key;
          var chain = pkcs12Store.GetCertificateChain(alias);
      
          // Δημιουργία του υπογεγραμμένου PDF
          PdfReader reader = new PdfReader(inputFilePath);
          PdfSigner signer = new PdfSigner(reader, new FileStream(outputFilePath, FileMode.Create), new StampingProperties());
      
          // Προσθήκη ψηφιακής υπογραφής
          IExternalSignature pks = new PrivateKeySignature(pk, DigestAlgorithms.SHA256);
          signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
      
          Console.WriteLine("Το PDF υπογράφηκε επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Χρησιμοποιούμε ένα αρχείο πιστοποιητικού (.pfx) για να προσθέσουμε μια ψηφιακή υπογραφή στο PDF.
      Η ψηφιακή υπογραφή εξασφαλίζει ότι το έγγραφο είναι αυθεντικό και δεν έχει αλλαχθεί μετά την υπογραφή του.
      1. Δικαιώματα Χρήστη
        Τι είναι τα δικαιώματα χρήστη;

      Τα δικαιώματα χρήστη είναι οι περιορισμοί που μπορείς να ορίσεις για το τι μπορεί να κάνει ο χρήστης με το PDF. Για παράδειγμα, μπορείς να ορίσεις εάν επιτρέπεται να εκτυπώνουν το PDF, να αντιγράφουν κείμενο από αυτό ή να το επεξεργάζονται.
      Παράδειγμα:

      Ας δούμε πώς μπορούμε να ορίσουμε συγκεκριμένα δικαιώματα σε ένα PDF.

      csharp

      using System;
      using iText.Kernel.Pdf;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF
      string inputFilePath = “unprotected.pdf”;
      string outputFilePath = “restricted.pdf”;

          // Ορισμός δικαιωμάτων και κρυπτογράφηση του PDF
          WriterProperties writerProps = new WriterProperties()
              .SetStandardEncryption(
                  "userpassword".GetBytes(),
                  "ownerpassword".GetBytes(),
                  EncryptionConstants.ALLOW_PRINTING,  // Μόνο εκτύπωση επιτρέπεται
                  EncryptionConstants.ENCRYPTION_AES_128);
      
          PdfWriter writer = new PdfWriter(outputFilePath, writerProps);
          PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputFilePath), writer);
      
          // Κλείσιμο του PDF
          pdfDoc.Close();
      
          Console.WriteLine("Ορισμένα δικαιώματα χρήστη προστέθηκαν επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Κρυπτογραφούμε το PDF και ορίζουμε ότι μόνο η εκτύπωση είναι επιτρεπτή, ενώ άλλες ενέργειες (όπως η αντιγραφή κειμένου) δεν επιτρέπονται.

      Συνοπτικά

      Κρυπτογράφηση: Μπορείς να προστατεύσεις το PDF με κωδικό πρόσβασης και να ορίσεις ποια δικαιώματα έχουν οι χρήστες (όπως εκτύπωση, αντιγραφή κειμένου κ.λπ.).
      Ψηφιακές Υπογραφές: Οι ψηφιακές υπογραφές εξασφαλίζουν την αυθεντικότητα του εγγράφου και προστατεύουν το PDF από μη εξουσιοδοτημένες τροποποιήσεις.
      Δικαιώματα Χρήστη: Ορίζεις ποια δικαιώματα έχει ο χρήστης στο PDF, όπως το εάν μπορεί να το εκτυπώσει, να αντιγράψει κείμενο ή να το επεξεργαστεί.

      Αυτές οι δυνατότητες εξασφαλίζουν την προστασία και την ακεραιότητα των PDF αρχείων, παρέχοντας πλήρη έλεγχο στο ποιος έχει πρόσβαση και τι μπορεί να κάνει με το έγγραφο.

      Το iTextSharp παρέχει ισχυρές δυνατότητες για την ασφάλεια και την κρυπτογράφηση PDF αρχείων, επιτρέποντάς σου να προστατεύεις τα έγγραφα με κωδικούς πρόσβασης, να καθορίζεις δικαιώματα πρόσβασης (π.χ. ανάγνωση, επεξεργασία, εκτύπωση), να προσθέτεις ψηφιακές υπογραφές και να επιβεβαιώνεις την αυθεντικότητα των εγγράφων. Ας δούμε αναλυτικά παραδείγματα για τις πιο συνηθισμένες λειτουργίες που αφορούν την ασφάλεια και την κρυπτογράφηση PDF.

      Παράδειγμα 1: Κρυπτογράφηση PDF με κωδικό πρόσβασης

      Μπορείς να κρυπτογραφήσεις ένα PDF ώστε να απαιτείται κωδικός για να ανοίξει ή να επεξεργαστεί το αρχείο.

      csharp

      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του αρχικού PDF
      PdfReader reader = new PdfReader(“example.pdf”);

          // Δημιουργία νέου PDF με κρυπτογράφηση
          PdfStamper stamper = new PdfStamper(reader, new FileStream("Encrypted.pdf", FileMode.Create));
      
          // Ορισμός κωδικών πρόσβασης (ιδιοκτήτης και χρήστης)
          string userPassword = "user123";
          string ownerPassword = "owner456";
      
          // Κρυπτογράφηση του PDF με δικαιώματα ανάγνωσης μόνο
          stamper.SetEncryption(userPassword.GetBytes(), ownerPassword.GetBytes(),
                                PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);
      
          stamper.Close();
          reader.Close();
      }

      }

      Σε αυτό το παράδειγμα, το αρχείο PDF θα απαιτεί κωδικό χρήστη (user123) για να ανοίξει και κωδικό ιδιοκτήτη (owner456) για να αλλάξει δικαιώματα ή να ξεκλειδωθεί πλήρως.

      Παράδειγμα 2: Προσθήκη δικαιωμάτων πρόσβασης στο PDF

      Μπορείς να καθορίσεις τι δικαιώματα έχει κάποιος όταν ανοίγει ένα PDF, όπως το αν μπορεί να το εκτυπώσει ή να το επεξεργαστεί.

      csharp

      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του αρχικού PDF
      PdfReader reader = new PdfReader(“example.pdf”);

          // Δημιουργία νέου PDF με καθορισμένα δικαιώματα
          PdfStamper stamper = new PdfStamper(reader, new FileStream("Restricted.pdf", FileMode.Create));
      
          // Ορισμός κωδικών πρόσβασης (χρήστης και ιδιοκτήτης)
          string userPassword = "user123";
          string ownerPassword = "owner456";
      
          // Κρυπτογράφηση και καθορισμός δικαιωμάτων: εκτύπωση και αντιγραφή επιτρέπονται, αλλά όχι επεξεργασία
          stamper.SetEncryption(userPassword.GetBytes(), ownerPassword.GetBytes(),
                                PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY,
                                PdfWriter.ENCRYPTION_AES_128);
      
          stamper.Close();
          reader.Close();
      }

      }

      Αυτός ο κώδικας δημιουργεί ένα PDF που επιτρέπει την εκτύπωση και την αντιγραφή περιεχομένου, αλλά όχι την επεξεργασία ή την προσθήκη σχολίων.

      Παράδειγμα 3: Προσθήκη ψηφιακής υπογραφής σε PDF

      Η ψηφιακή υπογραφή εξασφαλίζει την αυθεντικότητα και την ακεραιότητα του εγγράφου, επαληθεύοντας ότι το αρχείο δεν έχει τροποποιηθεί.

      using iTextSharp.text.pdf;
      using iTextSharp.text.pdf.security;
      using Org.BouncyCastle.X509;
      using System.IO;
      using System.Security.Cryptography.X509Certificates;

      class Program
      {
      static void Main()
      {
      // Φόρτωση του πιστοποιητικού
      X509Certificate2 cert = new X509Certificate2(“certificate.pfx”, “password”);

          // Άνοιγμα του PDF για υπογραφή
          PdfReader reader = new PdfReader("example.pdf");
          FileStream signedPdf = new FileStream("Signed.pdf", FileMode.Create);
      
          // Δημιουργία ψηφιακής υπογραφής
          PdfStamper stamper = PdfStamper.CreateSignature(reader, signedPdf, '\0');
          PdfSignatureAppearance appearance = stamper.SignatureAppearance;
          appearance.Reason = "Digital Signature Example";
          appearance.Location = "Greece";
          appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 200, 200), 1, "Signature");
      
          IExternalSignature pks = new X509Certificate2Signature(cert, "SHA-256");
          MakeSignature.SignDetached(appearance, pks, new X509Certificate[] { cert.Certificate }, null, null, null, 0, CryptoStandard.CMS);
      
          stamper.Close();
          reader.Close();
      }

      }

      Αυτός ο κώδικας προσθέτει μια ψηφιακή υπογραφή στο PDF χρησιμοποιώντας ένα ψηφιακό πιστοποιητικό. Η υπογραφή είναι ορατή σε συγκεκριμένη περιοχή του PDF.

      Παράδειγμα 4: Αφαίρεση κρυπτογράφησης από PDF

      Μπορείς να αφαιρέσεις την κρυπτογράφηση από ένα PDF αν έχεις τον κωδικό ιδιοκτήτη.

      using iTextSharp.text.pdf;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του PDF με τον κωδικό ιδιοκτήτη
      PdfReader reader = new PdfReader(“Encrypted.pdf”, new System.Text.ASCIIEncoding().GetBytes(“owner456”));

          // Δημιουργία νέου PDF χωρίς κρυπτογράφηση
          PdfStamper stamper = new PdfStamper(reader, new FileStream("Decrypted.pdf", FileMode.Create));
      
          // Αφαίρεση της κρυπτογράφησης
          stamper.RemoveField("Encryption");
      
          stamper.Close();
          reader.Close();
      }

      }

      Αυτός ο κώδικας αφαιρεί την κρυπτογράφηση από ένα PDF, δημιουργώντας ένα νέο αρχείο χωρίς περιορισμούς.

      Παράδειγμα 5: Προσθήκη ορατής ψηφιακής υπογραφής

      Εδώ δείχνουμε πώς να προσθέσεις μια ορατή ψηφιακή υπογραφή σε ένα συγκεκριμένο τμήμα του PDF.

      using iTextSharp.text.pdf;
      using iTextSharp.text.pdf.security;
      using Org.BouncyCastle.X509;
      using System.IO;
      using System.Security.Cryptography.X509Certificates;

      class Program
      {
      static void Main()
      {
      // Φόρτωση του πιστοποιητικού
      X509Certificate2 cert = new X509Certificate2(“certificate.pfx”, “password”);

          // Άνοιγμα του PDF για υπογραφή
          PdfReader reader = new PdfReader("example.pdf");
          FileStream signedPdf = new FileStream("VisiblySigned.pdf", FileMode.Create);
      
          // Δημιουργία ψηφιακής υπογραφής
          PdfStamper stamper = PdfStamper.CreateSignature(reader, signedPdf, '\0');
          PdfSignatureAppearance appearance = stamper.SignatureAppearance;
          appearance.Reason = "Ψηφιακή Υπογραφή";
          appearance.Location = "Αθήνα";
          appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 200, 150), 1, "Signature");
      
          IExternalSignature pks = new X509Certificate2Signature(cert, "SHA-256");
          MakeSignature.SignDetached(appearance, pks, new X509Certificate[] { cert.Certificate }, null, null, null, 0, CryptoStandard.CMS);
      
          stamper.Close();
          reader.Close();
      }

      }

      Αυτός ο κώδικας προσθέτει μια ορατή ψηφιακή υπογραφή σε συγκεκριμένη περιοχή του PDF (100,100 έως 200,150), με τη χρήση ενός ψηφιακού πιστοποιητικού.

      Παράδειγμα 6: Έλεγχος της ψηφιακής υπογραφής σε PDF

      Μπορείς να ελέγξεις αν ένα PDF έχει ψηφιακή υπογραφή και αν αυτή είναι έγκυρη.

      using iTextSharp.text.pdf;
      using iTextSharp.text.pdf.security;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα του υπογεγραμμένου PDF
      PdfReader reader = new PdfReader(“Signed.pdf”);

          // Έλεγχος για ψηφιακή υπογραφή
          AcroFields fields = reader.AcroFields;
          var signatures = fields.GetSignatureNames();
      
          foreach (string signature in signatures)
          {
              PdfPKCS7 pkcs7 = fields.VerifySignature(signature);
              bool validSignature = pkcs7.Verify();
      
              if (validSignature)
              {
                  System.Console.WriteLine("Η υπογραφή '" + signature + "' είναι έγκυρη.");
              }
              else
              {
                  System.Console.WriteLine("Η υπογραφή '" + signature + "' δεν είναι έγκυρη.");
              }
          }
      
          reader.Close();
      }

      }

      Αυτός ο κώδικας ελέγχει τις ψηφιακές υπογραφές σε ένα PDF και εμφανίζει αν είναι έγκυρες ή όχι.

      Παράδειγμα 7: Κρυπτογράφηση με πιστοποιητικά

      Εκτός από κωδικούς πρόσβασης, μπορείς να κρυπτογραφήσεις PDF χρησιμοποιώντας ψηφιακά πιστοποιητικά.

      using iTextSharp.text.pdf;
      using Org.BouncyCastle.X509;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Φόρτωση του πιστοποιητικού
      X509Certificate2 cert = new X509Certificate2(“certificate.cer”);

          // Άνοιγμα του αρχικού PDF
          PdfReader reader = new PdfReader("example.pdf");
      
          // Δημιουργία νέου PDF με κρυπτογράφηση πιστοποιητικού
          PdfStamper stamper = new PdfStamper(reader, new FileStream("CertificateEncrypted.pdf", FileMode.Create));
      
          // Κρυπτογράφηση με δημόσιο κλειδί (certificate-based encryption)
          stamper.SetEncryption(new X509Certificate[] { cert.Certificate }, null, PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_256);
      
          stamper.Close();
          reader.Close();
      }

      }

      Αυτό το παράδειγμα δείχνει πώς να κρυπτογραφήσεις ένα PDF χρησιμοποιώντας ένα ψηφιακό πιστοποιητικό για την κρυπτογράφηση.
      Συμπέρασμα

      Με το iTextSharp, μπορείς να εφαρμόσεις μια σειρά από ισχυρές δυνατότητες ασφάλειας και κρυπτογράφησης σε PDF αρχεία, όπως κρυπτογράφηση με κωδικούς πρόσβασης ή πιστοποιητικά, περιορισμός δικαιωμάτων, προσθήκη ψηφιακών υπογραφών και έλεγχος της αυθεντικότητας των εγγράφων. Αυτές οι λειτουργίες είναι ιδανικές για την προστασία ευαίσθητων δεδομένων και την επικύρωση της ακεραιότητας των PDF εγγράφων.

      6. Υποστήριξη για PDF Forms (AcroForms)

      Τα PDF Forms (AcroForms) είναι διαδραστικές φόρμες μέσα σε ένα PDF αρχείο, και το iTextSharp παρέχει πλήρη υποστήριξη για τη δημιουργία και διαχείρισή τους:

      • Δημιουργία φόρμας: Μπορείς να δημιουργήσεις πεδία φόρμας όπως πεδία κειμένου, πλαίσια επιλογής (checkboxes), κουμπιά και αναπτυσσόμενες λίστες (dropdowns).
      • Συμπλήρωση φόρμας: Η βιβλιοθήκη επιτρέπει τη συμπλήρωση των πεδίων μιας υπάρχουσας φόρμας μέσω προγραμματισμού και αποθήκευση του συμπληρωμένου εγγράφου.
      • Εξαγωγή δεδομένων φόρμας: Υπάρχει δυνατότητα εξαγωγής δεδομένων από συμπληρωμένα PDF forms σε μορφές όπως XML ή CSV.

      Τα PDF Forms (AcroForms) είναι μια ισχυρή δυνατότητα των αρχείων PDF που επιτρέπει στους χρήστες να συμπληρώνουν φόρμες απευθείας μέσα στο έγγραφο. Αυτά τα διαδραστικά στοιχεία, όπως πεδία κειμένου, πλαίσια επιλογής (checkboxes), κουμπιά και λίστες, μπορούν να δημιουργηθούν, να συμπληρωθούν και να εξάγουν δεδομένα με τη χρήση του iTextSharp. Ας δούμε πώς γίνεται αυτό.

      1. Δημιουργία Φόρμας (PDF Form)

      Τι σημαίνει “Δημιουργία Φόρμας” σε ένα PDF;

      Η δημιουργία μιας φόρμας σε ένα PDF σημαίνει ότι προσθέτεις διαδραστικά πεδία, όπως πεδία κειμένου, κουμπιά επιλογής, κουμπιά υποβολής και αναπτυσσόμενες λίστες. Σκέψου το σαν ένα έντυπο που θα συμπλήρωνες με το χέρι, αλλά αυτή τη φορά το κάνεις απευθείας στον υπολογιστή.

      Παράδειγμα:

      Ας δημιουργήσουμε μια απλή φόρμα PDF με ένα πεδίο κειμένου και ένα κουμπί.

      using System;
      using iText.Kernel.Pdf;
      using iText.Forms;
      using iText.Forms.Fields;
      using iText.Kernel.Geom;
      using iText.Layout;
      using iText.Layout.Element;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      string filePath = “form_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filePath));
      Document document = new Document(pdfDoc);

          // Δημιουργία φόρμας
          PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);
      
          // Δημιουργία πεδίου κειμένου
          PdfTextFormField nameField = PdfFormField.CreateText(pdfDoc, new Rectangle(100, 750, 200, 20), "name", "Εισάγετε το όνομά σας");
          form.AddField(nameField);
      
          // Δημιουργία κουμπιού υποβολής
          PdfButtonFormField submitButton = PdfFormField.CreatePushButton(pdfDoc, new Rectangle(100, 700, 200, 20), "submit", "Υποβολή");
          form.AddField(submitButton);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Η φόρμα PDF δημιουργήθηκε επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Δημιουργούμε ένα PDF με ένα πεδίο κειμένου και ένα κουμπί.
      Το πεδίο κειμένου εμφανίζει την ένδειξη "Εισάγετε το όνομά σας".
      Το κουμπί υποβολής προστίθεται αλλά δεν έχει συνδεδεμένη κάποια ενέργεια (όπως υποβολή σε κάποιον server).
      1. Συμπλήρωση Φόρμας
        Τι είναι η συμπλήρωση μιας φόρμας PDF;

      Η συμπλήρωση μιας φόρμας σημαίνει ότι μπορούμε προγραμματιστικά να “γεμίσουμε” τα πεδία μιας φόρμας με δεδομένα. Είναι σαν να συμπληρώνεις τα στοιχεία σου σε μια φόρμα στον υπολογιστή χωρίς να το κάνεις χειροκίνητα.
      Παράδειγμα:

      Ας δούμε πώς μπορούμε να συμπληρώσουμε μια υπάρχουσα φόρμα PDF.

      csharp

      using System;
      using iText.Kernel.Pdf;
      using iText.Forms;
      using iText.Forms.Fields;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα της υπάρχουσας φόρμας PDF
      string filePath = “form_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfReader(filePath), new PdfWriter(“filled_form_example.pdf”));

          // Πρόσβαση στη φόρμα
          PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);
      
          // Συμπλήρωση του πεδίου κειμένου με το όνομα
          PdfFormField nameField = form.GetField("name");
          nameField.SetValue("Γιάννης");
      
          // Συμπλήρωση του κουμπιού υποβολής
          PdfFormField submitButton = form.GetField("submit");
          submitButton.SetValue("Υποβολή");
      
          // Κλείσιμο του PDF
          pdfDoc.Close();
      
          Console.WriteLine("Η φόρμα PDF συμπληρώθηκε επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Ανοίγουμε ένα PDF που περιέχει μια φόρμα.
      Συμπληρώνουμε το πεδίο του ονόματος με την τιμή "Γιάννης".
      Το κουμπί υποβολής δεν αλλάζει τη συμπεριφορά του, αλλά ενημερώνεται το κείμενο του κουμπιού.
      1. Εξαγωγή Δεδομένων Φόρμας
        Τι είναι η εξαγωγή δεδομένων από φόρμα PDF;

      Η εξαγωγή δεδομένων σημαίνει ότι παίρνεις τις τιμές που συμπλήρωσε ο χρήστης στα πεδία της φόρμας και τις αποθηκεύεις σε μορφή όπως XML ή CSV, ώστε να μπορείς να τις επεξεργαστείς ή να τις χρησιμοποιήσεις αλλού.
      Παράδειγμα:

      Ας εξάγουμε τα δεδομένα από μια συμπληρωμένη φόρμα PDF σε ένα αρχείο XML.

      csharp

      using System;
      using System.IO;
      using iText.Kernel.Pdf;
      using iText.Forms;

      class Program
      {
      static void Main()
      {
      // Άνοιγμα της φόρμας PDF
      string filePath = “filled_form_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfReader(filePath));

          // Πρόσβαση στη φόρμα
          PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);
      
          // Εξαγωγή των δεδομένων της φόρμας σε XML
          string xmlOutputPath = "form_data.xml";
          using (FileStream fs = new FileStream(xmlOutputPath, FileMode.Create))
          {
              form.ExportAsFdf(fs);
          }
      
          // Κλείσιμο του PDF
          pdfDoc.Close();
      
          Console.WriteLine("Τα δεδομένα της φόρμας εξήχθησαν επιτυχώς σε XML.");
      }

      }

      Τι συμβαίνει εδώ;

      Ανοίγουμε το συμπληρωμένο PDF και εξάγουμε τα δεδομένα της φόρμας σε ένα αρχείο XML χρησιμοποιώντας τη μέθοδο ExportAsFdf.
      Το αρχείο XML μπορεί να χρησιμοποιηθεί για να δούμε τι συμπληρώθηκε στη φόρμα.

      Συνοπτικά

      Δημιουργία Φόρμας: Μπορείς να προσθέσεις διαδραστικά στοιχεία όπως πεδία κειμένου, κουμπιά και λίστες σε ένα PDF, επιτρέποντας στους χρήστες να συμπληρώνουν φόρμες.
      Συμπλήρωση Φόρμας: Μπορείς να συμπληρώσεις προγραμματιστικά τα πεδία μιας υπάρχουσας φόρμας, εισάγοντας δεδομένα χωρίς χειροκίνητη παρέμβαση.
      Εξαγωγή Δεδομένων Φόρμας: Μπορείς να εξάγεις δεδομένα που έχουν εισαχθεί σε μια φόρμα σε μορφή XML ή CSV, ώστε να τα χρησιμοποιήσεις για περαιτέρω επεξεργασία ή αποθήκευση.

      Αυτές οι δυνατότητες καθιστούν το iTextSharp ένα ισχυρό εργαλείο για τη διαχείριση PDF Forms, προσφέροντας μεγάλη ευελιξία στη δημιουργία, τη συμπλήρωση και την εξαγωγή δεδομένων από διαδραστικές φόρμες.

      Η δημιουργία και η διαχείριση PDF Forms (AcroForms) στη γλώσσα προγραμματισμού C# μπορεί να γίνει με τη χρήση βιβλιοθηκών τρίτων, όπως η iTextSharp και η PdfSharp. Αυτές οι βιβλιοθήκες επιτρέπουν την προσθήκη, την ανάγνωση και την επεξεργασία φορμών μέσα σε PDF αρχεία.

      Παρακάτω είναι δύο παραδείγματα που δείχνουν πώς να δημιουργήσεις και να επεξεργαστείς PDF Forms με τη βιβλιοθήκη iTextSharp.

      Παράδειγμα 1: Δημιουργία PDF Form με iTextSharp

      Αρχικά, θα χρειαστεί να εγκαταστήσεις τη βιβλιοθήκη iTextSharp μέσω NuGet.

      Άνοιξε το Visual Studio και δημιούργησε ένα νέο Project.
      Κάνε εγκατάσταση του iTextSharp μέσω NuGet με την ακόλουθη εντολή:

      mathematica

      Install-Package itext7

      Δημιούργησε ένα νέο PDF με πεδία φόρμας:

      using System;
      using System.IO;
      using iText.Kernel.Pdf;
      using iText.Forms;
      using iText.Forms.Fields;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF
      string filePath = “form_example.pdf”;

          // Δημιουργία PDF εγγράφου
          PdfWriter writer = new PdfWriter(filePath);
          PdfDocument pdfDoc = new PdfDocument(writer);
      
          // Δημιουργία ενός νέου εντύπου
          PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);
      
          // Δημιουργία ενός κειμενικού πεδίου
          PdfTextFormField nameField = PdfFormField.CreateText(pdfDoc, new iText.Kernel.Geom.Rectangle(100, 700, 200, 20), "name", "");
          form.AddField(nameField);
      
          // Δημιουργία ενός κουμπιού
          PdfButtonFormField button = PdfFormField.CreatePushButton(pdfDoc, new iText.Kernel.Geom.Rectangle(100, 650, 200, 20), "submit", "Submit");
          form.AddField(button);
      
          // Κλείσιμο του PDF
          pdfDoc.Close();
      
          Console.WriteLine("PDF Form created successfully.");
      }

      }

      Παράδειγμα 2: Ανάγνωση και επεξεργασία πεδίων από PDF Form με iTextSharp

      Αυτό το παράδειγμα δείχνει πώς μπορείς να διαβάσεις τα δεδομένα από ένα υπάρχον PDF Form και να επεξεργαστείς τα πεδία του.

      using System;
      using System.IO;
      using iText.Kernel.Pdf;
      using iText.Forms;
      using iText.Forms.Fields;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF
      string filePath = “form_example.pdf”;

          // Ανάγνωση του PDF εγγράφου
          PdfReader reader = new PdfReader(filePath);
          PdfDocument pdfDoc = new PdfDocument(reader, new PdfWriter("filled_form_example.pdf"));
      
          // Πρόσβαση στη φόρμα
          PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);
      
          // Ανάγνωση και ενημέρωση πεδίων
          PdfFormField nameField = form.GetField("name");
          nameField.SetValue("John Doe");
      
          PdfFormField submitButton = form.GetField("submit");
          submitButton.SetVisibility(PdfFormField.HIDDEN);
      
          // Κλείσιμο του PDF
          pdfDoc.Close();
      
          Console.WriteLine("PDF Form updated successfully.");
      }

      }

      Επεξήγηση Παραδειγμάτων

      Στο Παράδειγμα 1, δημιουργούμε ένα νέο PDF με πεδία φόρμας χρησιμοποιώντας τη βιβλιοθήκη iTextSharp. Προσθέτουμε ένα κειμενικό πεδίο και ένα κουμπί.
      Στο Παράδειγμα 2, ανοίγουμε ένα υπάρχον PDF με φόρμα και ενημερώνουμε τα πεδία του. Εδώ αλλάζουμε την τιμή του πεδίου "name" και κρύβουμε το κουμπί υποβολής.

      Εγκατάσταση βιβλιοθηκών

      Αντί να χρησιμοποιήσεις το iTextSharp, μπορείς επίσης να εξετάσεις τη χρήση άλλων βιβλιοθηκών όπως η PdfSharp ή Aspose.PDF, οι οποίες προσφέρουν παρόμοιες δυνατότητες για επεξεργασία PDF αρχείων.

      Αυτά τα παραδείγματα δείχνουν πώς να ξεκινήσεις με την υποστήριξη PDF Forms στην C#. Μπορείς να τα επεκτείνεις για να προσθέσεις περισσότερα πεδία, όπως πλαίσια ελέγχου, κουμπιά επιλογής και λίστες.

      7. Διαχείριση Γραμματοσειρών και Εικόνων

      • Ενσωμάτωση γραμματοσειρών: Υποστηρίζει ενσωμάτωση εξειδικευμένων γραμματοσειρών (TrueType, Type1), ακόμα και Unicode γραμματοσειρών για διαφορετικές γλώσσες και σύμβολα.
      • Διαχείριση εικόνων: Επιτρέπει την τοποθέτηση εικόνων στις σελίδες, την αλλαγή μεγέθους τους και την τοποθέτησή τους με απόλυτη ακρίβεια.

      Η διαχείριση γραμματοσειρών και εικόνων σε PDF αρχεία μέσω του iTextSharp είναι μια σημαντική λειτουργία που επιτρέπει στους χρήστες να δημιουργούν επαγγελματικά έγγραφα με προσαρμοσμένη εμφάνιση. Αυτό περιλαμβάνει την ενσωμάτωση προσαρμοσμένων γραμματοσειρών για διαφορετικές γλώσσες και την ακριβή τοποθέτηση εικόνων μέσα σε ένα PDF.

      1. Ενσωμάτωση Γραμματοσειρών

      Τι σημαίνει η ενσωμάτωση γραμματοσειρών;

      Η ενσωμάτωση γραμματοσειρών σημαίνει ότι μπορείς να χρησιμοποιήσεις ειδικές γραμματοσειρές (όπως TrueType ή Type1) σε ένα PDF, και αυτές οι γραμματοσειρές θα είναι ενσωματωμένες στο αρχείο PDF, ώστε να εμφανίζονται σωστά ακόμα και αν ο χρήστης που ανοίγει το PDF δεν έχει εγκαταστήσει αυτή τη γραμματοσειρά στον υπολογιστή του. Είναι επίσης απαραίτητο όταν δουλεύεις με διαφορετικές γλώσσες ή σύμβολα (π.χ., ελληνικά, κινέζικα).

      Παράδειγμα:

      Ας δούμε πώς μπορείς να χρησιμοποιήσεις μια προσαρμοσμένη γραμματοσειρά σε ένα PDF και να την ενσωματώσεις στο αρχείο.

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.IO.Font;
      using iText.Kernel.Font;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      string filePath = “font_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filePath));
      Document document = new Document(pdfDoc);

          // Ενσωμάτωση προσαρμοσμένης γραμματοσειράς
          string fontPath = "path_to_font/arial.ttf";  // Αντικατάστησε με τη διαδρομή της γραμματοσειράς σου
          PdfFont font = PdfFontFactory.CreateFont(fontPath, PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
      
          // Προσθήκη κειμένου με την προσαρμοσμένη γραμματοσειρά
          document.Add(new Paragraph("Αυτό είναι ένα κείμενο με την ενσωματωμένη γραμματοσειρά Arial.").SetFont(font));
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Το PDF με την ενσωματωμένη γραμματοσειρά δημιουργήθηκε επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Χρησιμοποιούμε τη μέθοδο PdfFontFactory.CreateFont για να φορτώσουμε μια γραμματοσειρά TrueType (TTF) από το σύστημα και να την ενσωματώσουμε στο PDF.
      Το PdfEncodings.IDENTITY_H εξασφαλίζει ότι η γραμματοσειρά υποστηρίζει Unicode, επιτρέποντας την χρήση διαφορετικών γλωσσών.
      1. Διαχείριση Εικόνων
        Τι είναι η διαχείριση εικόνων;

      Η διαχείριση εικόνων αφορά την προσθήκη εικόνων μέσα σε ένα PDF, όπως λογότυπα, φωτογραφίες, ή διαγράμματα. Μπορείς να τοποθετήσεις τις εικόνες σε συγκεκριμένες θέσεις, να αλλάξεις το μέγεθός τους ή να τις περιστρέψεις ανάλογα με τις ανάγκες σου.
      Παράδειγμα:

      Ας δούμε πώς μπορούμε να προσθέσουμε μια εικόνα σε ένα PDF και να την τοποθετήσουμε με ακρίβεια.

      csharp

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.IO.Image;
      using iText.Kernel.Geom;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      string filePath = “image_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filePath));
      Document document = new Document(pdfDoc);

          // Φόρτωση εικόνας
          string imagePath = "path_to_image/logo.png";  // Αντικατάστησε με τη διαδρομή της εικόνας σου
          ImageData imageData = ImageDataFactory.Create(imagePath);
          Image image = new Image(imageData);
      
          // Αλλαγή μεγέθους της εικόνας
          image.ScaleToFit(200, 100);
      
          // Τοποθέτηση της εικόνας σε συγκεκριμένη θέση
          image.SetFixedPosition(100, 700);
      
          // Προσθήκη της εικόνας στο έγγραφο
          document.Add(image);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Η εικόνα προστέθηκε επιτυχώς στο PDF.");
      }

      }

      Τι συμβαίνει εδώ;

      Φορτώνουμε μια εικόνα από το σύστημα και την προσθέτουμε στο PDF.
      Η εικόνα τοποθετείται με ακρίβεια σε συγκεκριμένη θέση (100, 700) και προσαρμόζεται το μέγεθός της έτσι ώστε να μην υπερβαίνει τα 200x100 pixels.

      Συνδυασμός Εικόνων και Γραμματοσειρών
      Παράδειγμα:

      Ας συνδυάσουμε τη χρήση γραμματοσειρών και εικόνων σε ένα PDF.

      csharp

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.IO.Font;
      using iText.Kernel.Font;
      using iText.IO.Image;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      string filePath = “combined_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filePath));
      Document document = new Document(pdfDoc);

          // Ενσωμάτωση γραμματοσειράς
          string fontPath = "path_to_font/arial.ttf";  // Αντικατάστησε με τη διαδρομή της γραμματοσειράς
          PdfFont font = PdfFontFactory.CreateFont(fontPath, PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
      
          // Προσθήκη κειμένου με γραμματοσειρά
          document.Add(new Paragraph("Αυτό είναι ένα παράδειγμα με κείμενο και εικόνα.").SetFont(font));
      
          // Φόρτωση και προσθήκη εικόνας
          string imagePath = "path_to_image/logo.png";  // Αντικατάστησε με τη διαδρομή της εικόνας
          ImageData imageData = ImageDataFactory.Create(imagePath);
          Image image = new Image(imageData);
          image.ScaleToFit(200, 100);
          image.SetFixedPosition(100, 600);
          document.Add(image);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Το PDF με γραμματοσειρά και εικόνα δημιουργήθηκε επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Ενσωματώνουμε μια γραμματοσειρά και προσθέτουμε κείμενο στο PDF.
      Προσθέτουμε μια εικόνα και την τοποθετούμε σε μια συγκεκριμένη θέση μέσα στο έγγραφο.

      Συνοπτικά

      Ενσωμάτωση Γραμματοσειρών: Μπορείς να ενσωματώσεις προσαρμοσμένες γραμματοσειρές όπως TrueType ή Type1 και να εξασφαλίσεις την υποστήριξη πολλών γλωσσών ή ειδικών συμβόλων μέσω της κωδικοποίησης Unicode.
      Διαχείριση Εικόνων: Μπορείς να προσθέσεις εικόνες σε PDF, να προσαρμόσεις το μέγεθός τους και να τις τοποθετήσεις με ακρίβεια σε συγκεκριμένες θέσεις στις σελίδες του PDF.

      Αυτές οι δυνατότητες του iTextSharp προσφέρουν ευελιξία στη δημιουργία επαγγελματικών PDF αρχείων, εξασφαλίζοντας την καλή εμφάνιση και την σωστή απόδοση των εγγράφων σε οποιοδήποτε περιβάλλον.

      Για τη διαχείριση γραμματοσειρών και εικόνων σε PDF αρχεία μέσω της γλώσσας προγραμματισμού C# μπορείς να χρησιμοποιήσεις την iTextSharp βιβλιοθήκη. Παρακάτω θα σου δείξω δύο παραδείγματα για το πώς να ενσωματώσεις εικόνες και γραμματοσειρές σε ένα PDF αρχείο.

      Παράδειγμα 1: Προσθήκη Εικόνας σε PDF με iTextSharp

      Αρχικά, εγκατέστησε τη βιβλιοθήκη iTextSharp μέσω NuGet όπως και προηγουμένως.
      
      Κώδικας για την προσθήκη εικόνας σε PDF:

      using System;
      using System.IO;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.IO.Image;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF
      string filePath = “image_example.pdf”;

          // Δημιουργία PDF εγγράφου
          PdfWriter writer = new PdfWriter(filePath);
          PdfDocument pdfDoc = new PdfDocument(writer);
          Document document = new Document(pdfDoc);
      
          // Φόρτωση εικόνας
          string imagePath = "path_to_image.jpg";  // Αντικατάστησε με τη διαδρομή της εικόνας σου
          ImageData imageData = ImageDataFactory.Create(imagePath);
      
          // Δημιουργία αντικειμένου εικόνας
          Image image = new Image(imageData);
      
          // Προσθήκη εικόνας στο έγγραφο
          document.Add(image);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Image added successfully to the PDF.");
      }

      }

      Επεξήγηση:

      Χρησιμοποιούμε τη μέθοδο ImageDataFactory.Create για να φορτώσουμε μια εικόνα και έπειτα προσθέτουμε την εικόνα στο PDF έγγραφο με την εντολή document.Add(image).

      Παράδειγμα 2: Προσθήκη Γραμματοσειράς σε PDF με iTextSharp

      Εκτός από τις εικόνες, μπορείς να προσθέσεις και προσαρμοσμένες γραμματοσειρές στο PDF. Αυτό το παράδειγμα δείχνει πώς μπορείς να προσθέσεις κείμενο με μια συγκεκριμένη γραμματοσειρά.

      using System;
      using System.IO;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.IO.Font;
      using iText.Kernel.Font;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF
      string filePath = “font_example.pdf”;

          // Δημιουργία PDF εγγράφου
          PdfWriter writer = new PdfWriter(filePath);
          PdfDocument pdfDoc = new PdfDocument(writer);
          Document document = new Document(pdfDoc);
      
          // Φόρτωση γραμματοσειράς
          string fontPath = "path_to_font.ttf";  // Αντικατάστησε με τη διαδρομή της γραμματοσειράς σου
          PdfFont font = PdfFontFactory.CreateFont(fontPath, PdfEncodings.IDENTITY_H);
      
          // Δημιουργία παραγράφου με τη γραμματοσειρά
          Paragraph paragraph = new Paragraph("Αυτό είναι ένα κείμενο με προσαρμοσμένη γραμματοσειρά.")
              .SetFont(font)
              .SetFontSize(12);
      
          // Προσθήκη παραγράφου στο έγγραφο
          document.Add(paragraph);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Custom font text added successfully to the PDF.");
      }

      }

      Επεξήγηση:

      Χρησιμοποιούμε τη μέθοδο PdfFontFactory.CreateFont για να φορτώσουμε μια προσαρμοσμένη γραμματοσειρά από ένα αρχείο TTF.
      Το PdfEncodings.IDENTITY_H επιτρέπει την υποστήριξη Unicode χαρακτήρων (π.χ. ελληνικών).

      Παράδειγμα 3: Συνδυασμός Εικόνων και Γραμματοσειρών

      Μπορείς εύκολα να συνδυάσεις την προσθήκη εικόνων και γραμματοσειρών σε ένα ενιαίο PDF αρχείο. Παρακάτω είναι ένα πλήρες παράδειγμα που δείχνει πώς μπορείς να προσθέσεις τόσο κείμενο με μια προσαρμοσμένη γραμματοσειρά όσο και εικόνα σε ένα PDF:

      using System;
      using System.IO;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.IO.Image;
      using iText.IO.Font;
      using iText.Kernel.Font;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF
      string filePath = “image_and_font_example.pdf”;

          // Δημιουργία PDF εγγράφου
          PdfWriter writer = new PdfWriter(filePath);
          PdfDocument pdfDoc = new PdfDocument(writer);
          Document document = new Document(pdfDoc);
      
          // Φόρτωση εικόνας
          string imagePath = "path_to_image.jpg";  // Αντικατάστησε με τη διαδρομή της εικόνας σου
          ImageData imageData = ImageDataFactory.Create(imagePath);
          Image image = new Image(imageData);
      
          // Προσθήκη εικόνας στο έγγραφο
          document.Add(image);
      
          // Φόρτωση γραμματοσειράς
          string fontPath = "path_to_font.ttf";  // Αντικατάστησε με τη διαδρομή της γραμματοσειράς σου
          PdfFont font = PdfFontFactory.CreateFont(fontPath, PdfEncodings.IDENTITY_H);
      
          // Δημιουργία παραγράφου με τη γραμματοσειρά
          Paragraph paragraph = new Paragraph("Αυτό είναι ένα κείμενο με προσαρμοσμένη γραμματοσειρά κάτω από την εικόνα.")
              .SetFont(font)
              .SetFontSize(12);
      
          // Προσθήκη παραγράφου στο έγγραφο
          document.Add(paragraph);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Image and custom font added successfully to the PDF.");
      }

      }

      Επεξήγηση:

      Αρχικά προσθέτουμε την εικόνα στο έγγραφο και στη συνέχεια προσθέτουμε το κείμενο με την προσαρμοσμένη γραμματοσειρά κάτω από την εικόνα.

      Συμπεράσματα

      Με τη χρήση της βιβλιοθήκης iTextSharp, μπορείς να χειριστείς με ευκολία τις εικόνες και τις γραμματοσειρές σε PDF αρχεία. Τα παραδείγματα που σου έδωσα δείχνουν τις βασικές λειτουργίες για την ενσωμάτωση εικόνων και γραμματοσειρών σε PDF, τα οποία μπορούν να επεκταθούν για πιο περίπλοκες ανάγκες (π.χ. περισσότερες εικόνες, σύνθετα κείμενα με διαφορετικά στυλ).

      8. Υποστήριξη Διαφάνειας και Στρωμάτων (Layers)

      Το iTextSharp παρέχει υποστήριξη για διαφάνεια και στρώματα:

      • Διαφάνειες: Μπορείς να καθορίσεις το επίπεδο διαφάνειας των αντικειμένων που τοποθετούνται στο PDF.
      • Στρώματα (OCG – Optional Content Groups): Υποστήριξη για στρώματα που μπορούν να ενεργοποιούνται ή να απενεργοποιούνται στο PDF αρχείο, επιτρέποντας την προβολή διαφορετικών επιπέδων περιεχομένου.

      Το iTextSharp προσφέρει δυνατότητες για τη διαχείριση διαφάνειας και στρωμάτων (OCG – Optional Content Groups) στα PDF αρχεία. Αυτές οι δυνατότητες μπορούν να κάνουν το PDF πιο διαδραστικό και ευέλικτο, επιτρέποντας την εμφάνιση αντικειμένων με διαφορετικά επίπεδα διαφάνειας ή την οργάνωση του περιεχομένου σε στρώματα που ο χρήστης μπορεί να ενεργοποιεί ή να απενεργοποιεί.

      1. Υποστήριξη Διαφάνειας

      Τι είναι η διαφάνεια;

      Η διαφάνεια επιτρέπει τη ρύθμιση της αδιαφάνειας (opacity) των αντικειμένων σε ένα PDF. Αυτό σημαίνει ότι μπορείς να κάνεις ένα αντικείμενο, όπως μια εικόνα ή κείμενο, να εμφανίζεται διαφανές, ώστε να μπορείς να δεις τι υπάρχει από πίσω του.

      Παράδειγμα:

      Ας δούμε πώς μπορείς να προσθέσεις κείμενο και εικόνες με διαφάνεια σε ένα PDF.

      using System;
      using iText.Kernel.Pdf;
      using iText.Kernel.Colors;
      using iText.Kernel.Pdf.Extgstate;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.IO.Image;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      string filePath = “transparency_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filePath));
      Document document = new Document(pdfDoc);

          // Προσθήκη κειμένου με διαφάνεια 50%
          PdfExtGState transparentTextState = new PdfExtGState().SetFillOpacity(0.5f);
          Paragraph transparentText = new Paragraph("Αυτό είναι ένα κείμενο με διαφάνεια.")
              .SetFontSize(24)
              .SetFontColor(ColorConstants.BLUE)
              .SetProperty(iText.Kernel.Pdf.PdfName.ExtGState, transparentTextState);
          document.Add(transparentText);
      
          // Προσθήκη εικόνας με διαφάνεια 30%
          string imagePath = "path_to_image/logo.png";  // Αντικατάστησε με τη διαδρομή της εικόνας σου
          ImageData imageData = ImageDataFactory.Create(imagePath);
          Image image = new Image(imageData);
      
          PdfExtGState transparentImageState = new PdfExtGState().SetFillOpacity(0.3f);
          image.SetProperty(iText.Kernel.Pdf.PdfName.ExtGState, transparentImageState);
          document.Add(image);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Διαφάνεια προστέθηκε στο PDF επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Προσθέτουμε κείμενο και εικόνα με διαφάνεια στο PDF. Το κείμενο έχει 50% διαφάνεια, και η εικόνα 30% διαφάνεια.
      Η μέθοδος SetFillOpacity χρησιμοποιείται για τον καθορισμό της διαφάνειας των αντικειμένων.
      1. Υποστήριξη Στρωμάτων (OCG – Optional Content Groups)
        Τι είναι τα στρώματα (OCG);

      Τα στρώματα (Optional Content Groups) σου επιτρέπουν να οργανώσεις το περιεχόμενο σε “επίπεδα” που μπορούν να ενεργοποιούνται ή να απενεργοποιούνται από τον χρήστη. Σκέψου το σαν διάφορα διαφανή επίπεδα που τοποθετούνται το ένα πάνω στο άλλο, και μπορείς να τα βλέπεις ή να τα κρύβεις ανάλογα με τις ανάγκες σου.
      Παράδειγμα:

      Ας δημιουργήσουμε ένα PDF που έχει δύο στρώματα, το καθένα με διαφορετικό περιεχόμενο.

      csharp

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.Kernel.Pdf.Layer;
      using iText.IO.Image;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      string filePath = “layers_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filePath));
      Document document = new Document(pdfDoc);

          // Δημιουργία στρώματος (Layer 1)
          PdfLayer layer1 = new PdfLayer("Text Layer", pdfDoc);
          layer1.SetOnPanel(true);  // Εμφάνιση στο panel στρωμάτων
          Paragraph layer1Text = new Paragraph("Αυτό είναι το κείμενο στο Layer 1.")
              .SetFontSize(16)
              .SetFontColor(iText.Kernel.Colors.ColorConstants.RED);
          layer1Text.SetLayer(layer1);  // Προσθήκη του κειμένου στο Layer 1
          document.Add(layer1Text);
      
          // Δημιουργία στρώματος (Layer 2)
          PdfLayer layer2 = new PdfLayer("Image Layer", pdfDoc);
          layer2.SetOnPanel(true);  // Εμφάνιση στο panel στρωμάτων
      
          // Προσθήκη εικόνας στο Layer 2
          string imagePath = "path_to_image/logo.png";  // Αντικατάστησε με τη διαδρομή της εικόνας σου
          ImageData imageData = ImageDataFactory.Create(imagePath);
          Image image = new Image(imageData);
          image.SetLayer(layer2);  // Προσθήκη της εικόνας στο Layer 2
          document.Add(image);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Τα στρώματα προστέθηκαν στο PDF επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Δημιουργούμε δύο στρώματα: το ένα περιέχει κείμενο και το άλλο εικόνα.
      Οι χρήστες μπορούν να ενεργοποιούν ή να απενεργοποιούν τα στρώματα μέσω του panel στρωμάτων σε προγράμματα ανάγνωσης PDF, όπως το Adobe Acrobat.
      Η μέθοδος SetLayer ορίζει ποιο περιεχόμενο ανήκει σε ποιο στρώμα.

      Συνδυασμός Διαφάνειας και Στρωμάτων

      Μπορούμε επίσης να συνδυάσουμε διαφάνεια και στρώματα για να δημιουργήσουμε πιο περίπλοκα έγγραφα. Ας δούμε πώς μπορούμε να συνδυάσουμε τις δύο δυνατότητες.

      csharp

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.Kernel.Pdf.Layer;
      using iText.Kernel.Pdf.Extgstate;
      using iText.IO.Image;

      class Program
      {
      static void Main()
      {
      // Δημιουργία PDF
      string filePath = “transparency_and_layers_example.pdf”;
      PdfDocument pdfDoc = new PdfDocument(new PdfWriter(filePath));
      Document document = new Document(pdfDoc);

          // Δημιουργία στρώματος με κείμενο και διαφάνεια
          PdfLayer textLayer = new PdfLayer("Transparent Text Layer", pdfDoc);
          textLayer.SetOnPanel(true);
          PdfExtGState transparentState = new PdfExtGState().SetFillOpacity(0.5f);
      
          Paragraph transparentText = new Paragraph("Αυτό είναι κείμενο με διαφάνεια στο Layer 1.")
              .SetFontSize(24)
              .SetFontColor(iText.Kernel.Colors.ColorConstants.BLUE)
              .SetProperty(iText.Kernel.Pdf.PdfName.ExtGState, transparentState);
          transparentText.SetLayer(textLayer);
          document.Add(transparentText);
      
          // Δημιουργία στρώματος με εικόνα
          PdfLayer imageLayer = new PdfLayer("Image Layer", pdfDoc);
          imageLayer.SetOnPanel(true);
      
          // Προσθήκη εικόνας στο δεύτερο στρώμα
          string imagePath = "path_to_image/logo.png";  // Αντικατάστησε με τη διαδρομή της εικόνας
          ImageData imageData = ImageDataFactory.Create(imagePath);
          Image image = new Image(imageData);
          image.SetLayer(imageLayer);
          document.Add(image);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Στρώματα και διαφάνειες προστέθηκαν στο PDF επιτυχώς.");
      }

      }

      Τι συμβαίνει εδώ;

      Δημιουργούμε ένα στρώμα με κείμενο που έχει διαφάνεια 50%.
      Προσθέτουμε επίσης ένα στρώμα με εικόνα που μπορεί να ενεργοποιηθεί ή να απενεργοποιηθεί.
      Ο συνδυασμός των δύο χαρακτηριστικών καθιστά το PDF πιο δυναμικό και προσαρμόσιμο.

      Συνοπτικά

      Διαφάνειες: Μπορείς να καθορίσεις το επίπεδο διαφάνειας των αντικειμένων στο PDF, όπως κείμενα ή εικόνες, κάνοντάς τα να φαίνονται λιγότερο ή περισσότερο διαφανή.
      Στρώματα (OCG): Τα στρώματα (layers) επιτρέπουν την οργάνωση του περιεχομένου σε επίπεδα που μπορεί να ενεργοποιούνται ή να απενεργοποιούνται από τον χρήστη, δίνοντας ευελιξία     στον τρόπο προβολής του περιεχομένου.

      Αυτές οι δυνατότητες καθιστούν το iTextSharp ένα πανίσχυρο εργαλείο για τη δημιουργία πολύπλοκων και διαδραστικών PDF εγγράφων με διαφάνεια και στρώματα, επιτρέποντας την πλήρη ευελιξία στη μορφοποίηση και την παρουσίαση του περιεχομένου.

      Για την υποστήριξη διαφάνειας (transparency) και τη διαχείριση στρωμάτων (layers) σε PDF αρχεία με τη γλώσσα προγραμματισμού C# χρησιμοποιώντας τη βιβλιοθήκη iTextSharp, μπορείς να αξιοποιήσεις διάφορες δυνατότητες της βιβλιοθήκης που επιτρέπουν τη διαχείριση ορατότητας περιεχομένου και τη δημιουργία Ομάδων Ορατότητας Περιεχομένου (Optional Content Groups – OCGs).

      Παρακάτω ακολουθούν δύο παραδείγματα για το πώς να δουλέψεις με διαφάνεια και στρώματα (layers).

      Παράδειγμα 1: Υποστήριξη Διαφάνειας σε PDF με iTextSharp

      Αυτό το παράδειγμα δείχνει πώς να προσθέσεις ένα αντικείμενο με διαφάνεια (π.χ. μια εικόνα ή ένα κείμενο) σε ένα PDF αρχείο.

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.IO.Image;
      using iText.Kernel.Colors;
      using iText.Kernel.Pdf.Extgstate;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF
      string filePath = “transparency_example.pdf”;

          // Δημιουργία PDF εγγράφου
          PdfWriter writer = new PdfWriter(filePath);
          PdfDocument pdfDoc = new PdfDocument(writer);
          Document document = new Document(pdfDoc);
      
          // Προσθήκη εικόνας
          string imagePath = "path_to_image.jpg";  // Αντικατάστησε με τη διαδρομή της εικόνας σου
          ImageData imageData = ImageDataFactory.Create(imagePath);
          Image image = new Image(imageData);
      
          // Ρύθμιση διαφάνειας
          PdfExtGState transparencyState = new PdfExtGState().SetFillOpacity(0.5f);
          image.SetProperty(PdfName.ExtGState, transparencyState);
      
          // Προσθήκη εικόνας με διαφάνεια στο έγγραφο
          document.Add(image);
      
          // Προσθήκη κειμένου με διαφάνεια
          PdfExtGState transparentTextState = new PdfExtGState().SetFillOpacity(0.3f);
          document.Add(new Paragraph("Αυτό το κείμενο έχει διαφάνεια.")
              .SetFontSize(24)
              .SetFontColor(ColorConstants.RED)
              .SetProperty(PdfName.ExtGState, transparentTextState));
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("Transparency added successfully to the PDF.");
      }

      }

      Επεξήγηση:

      Χρησιμοποιούμε το PdfExtGState για να ορίσουμε το επίπεδο διαφάνειας (opacity) για την εικόνα ή το κείμενο. Στο παράδειγμα αυτό, η εικόνα έχει διαφάνεια 50% και το κείμενο 30%.
      Το opacity καθορίζεται μέσω της μεθόδου SetFillOpacity.

      Παράδειγμα 2: Δημιουργία Στρωμάτων (Layers) σε PDF με iTextSharp

      Τα στρώματα (layers) στο PDF μπορούν να χρησιμοποιηθούν για την προσθήκη αντικειμένων που μπορούν να ενεργοποιηθούν ή να απενεργοποιηθούν ανάλογα με την ανάγκη. Αυτό επιτυγχάνεται μέσω των Optional Content Groups (OCGs).

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.Kernel.Pdf.Layer;
      using iText.IO.Image;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF
      string filePath = “layers_example.pdf”;

          // Δημιουργία PDF εγγράφου
          PdfWriter writer = new PdfWriter(filePath);
          PdfDocument pdfDoc = new PdfDocument(writer);
          Document document = new Document(pdfDoc);
      
          // Δημιουργία του πρώτου στρώματος
          PdfLayer layer1 = new PdfLayer("Layer 1", pdfDoc);
          layer1.SetOnPanel(true); // Εμφάνιση στο panel στρωμάτων
          document.Add(new Paragraph("Κείμενο στο Layer 1").SetLayer(layer1));
      
          // Δημιουργία του δεύτερου στρώματος
          PdfLayer layer2 = new PdfLayer("Layer 2", pdfDoc);
          layer2.SetOnPanel(true);
      
          // Προσθήκη εικόνας στο Layer 2
          string imagePath = "path_to_image.jpg";  // Αντικατάστησε με τη διαδρομή της εικόνας σου
          ImageData imageData = ImageDataFactory.Create(imagePath);
          Image image = new Image(imageData);
          image.SetLayer(layer2); // Ορισμός της εικόνας στο Layer 2
          document.Add(image);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("PDF with layers created successfully.");
      }

      }

      Επεξήγηση:

      Τα στρώματα δημιουργούνται χρησιμοποιώντας την κλάση PdfLayer. Σε αυτό το παράδειγμα δημιουργούμε δύο στρώματα.
      Το πρώτο στρώμα περιέχει ένα κείμενο, ενώ το δεύτερο περιέχει μια εικόνα.
      Με τη μέθοδο SetOnPanel(true) ενεργοποιούμε την εμφάνιση του στρώματος στο panel των στρωμάτων που υποστηρίζεται από προγράμματα ανάγνωσης PDF όπως το Adobe Acrobat.

      Παράδειγμα 3: Συνδυασμός Διαφάνειας και Στρωμάτων

      Μπορείς επίσης να συνδυάσεις τη διαφάνεια και τα στρώματα για να έχεις καλύτερο έλεγχο στο PDF αρχείο σου. Παρακάτω είναι ένα παράδειγμα που συνδυάζει και τα δύο.

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.Kernel.Pdf.Layer;
      using iText.IO.Image;
      using iText.Kernel.Pdf.Extgstate;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF
      string filePath = “transparency_and_layers_example.pdf”;

          // Δημιουργία PDF εγγράφου
          PdfWriter writer = new PdfWriter(filePath);
          PdfDocument pdfDoc = new PdfDocument(writer);
          Document document = new Document(pdfDoc);
      
          // Δημιουργία Layer 1
          PdfLayer layer1 = new PdfLayer("Transparent Layer", pdfDoc);
          layer1.SetOnPanel(true);
      
          // Προσθήκη κειμένου με διαφάνεια στο Layer 1
          PdfExtGState transparentTextState = new PdfExtGState().SetFillOpacity(0.5f);
          Paragraph paragraph = new Paragraph("Κείμενο με διαφάνεια στο Layer 1.")
              .SetFontSize(24)
              .SetFontColor(iText.Kernel.Colors.ColorConstants.BLUE)
              .SetProperty(iText.Kernel.Pdf.PdfName.ExtGState, transparentTextState);
          paragraph.SetLayer(layer1);
          document.Add(paragraph);
      
          // Δημιουργία Layer 2
          PdfLayer layer2 = new PdfLayer("Image Layer", pdfDoc);
          layer2.SetOnPanel(true);
      
          // Προσθήκη εικόνας στο Layer 2
          string imagePath = "path_to_image.jpg";  // Αντικατάστησε με τη διαδρομή της εικόνας σου
          ImageData imageData = ImageDataFactory.Create(imagePath);
          Image image = new Image(imageData);
          image.SetLayer(layer2); // Ορισμός της εικόνας στο Layer 2
          document.Add(image);
      
          // Κλείσιμο του PDF
          document.Close();
      
          Console.WriteLine("PDF with transparency and layers created successfully.");
      }

      }

      Επεξήγηση:

      Το πρώτο στρώμα περιέχει κείμενο με διαφάνεια 50%, ενώ το δεύτερο στρώμα περιέχει μια εικόνα χωρίς διαφάνεια.
      Κάθε στοιχείο ορίζεται στο αντίστοιχο στρώμα (layer), έτσι ώστε να μπορείς να ενεργοποιήσεις/απενεργοποιήσεις ολόκληρα κομμάτια του περιεχομένου του PDF.

      Συμπεράσματα

      Με την iTextSharp, μπορείς να διαχειριστείς εύκολα διαφάνειες και στρώματα (layers) στα PDF αρχεία σου. Τα στρώματα μπορούν να χρησιμοποιηθούν για να διαχωρίσεις διάφορα κομμάτια του περιεχομένου που μπορεί να ενεργοποιούνται ή απενεργοποιούνται από τον χρήστη. Ταυτόχρονα, η διαφάνεια σου επιτρέπει να δημιουργήσεις οπτικά εφέ μέσα στο έγγραφο.

      9. Δημιουργία PDF/A και PDF/UA

      Το iTextSharp υποστηρίζει τη δημιουργία συμβατών PDF αρχείων με τα πρότυπα PDF/A (για αρχειοθέτηση) και PDF/UA (για προσβασιμότητα σε άτομα με αναπηρίες), εξασφαλίζοντας συμμόρφωση με διεθνή πρότυπα για την αποθήκευση και προβολή PDF εγγράφων.

      Το iTextSharp υποστηρίζει τη δημιουργία αρχείων PDF που συμμορφώνονται με τα πρότυπα PDF/A (για μακροπρόθεσμη αποθήκευση) και PDF/UA (για προσβασιμότητα σε άτομα με αναπηρίες). Αυτά τα πρότυπα διασφαλίζουν ότι τα PDF έγγραφα είναι κατάλληλα για αρχειοθέτηση και προσβάσιμα σύμφωνα με διεθνή πρότυπα.

      1. Δημιουργία PDF/A

      Τι είναι το PDF/A;

      Το PDF/A είναι ένα πρότυπο για αρχειοθέτηση εγγράφων σε μορφή PDF, που διασφαλίζει ότι τα αρχεία μπορούν να αποθηκευτούν μακροπρόθεσμα χωρίς να εξαρτώνται από εξωτερικούς πόρους, όπως γραμματοσειρές ή χρώματα. Το PDF/A απαγορεύει τη χρήση δυναμικού περιεχομένου (όπως JavaScript) και απαιτεί την ενσωμάτωση όλων των γραμματοσειρών.

      Παράδειγμα:

      Ας δημιουργήσουμε ένα PDF/A-1b, που είναι μια από τις πιο κοινές υποκατηγορίες του PDF/A.

      using System;
      using System.IO;
      using iText.Kernel.Pdf;
      using iText.Kernel.Pdf.Xmp;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.Kernel.Pdf.Annot;
      using iText.Kernel.Font;
      using iText.IO.Font;
      using iText.Kernel.Pdf.Canvas;
      using iText.Kernel.Pdf.Canvas.Parser;
      
      class Program
      {
          static void Main()
          {
              // Δημιουργία PDF με PDF/A προδιαγραφές
              string filePath = "pdf_a_example.pdf";
              PdfWriter writer = new PdfWriter(filePath);
              PdfADocument pdfDoc = new PdfADocument(writer, PdfAConformanceLevel.PDF_A_1B);
      
              Document document = new Document(pdfDoc);
      
              // Ορισμός μεταδεδομένων PDF/A
              PdfDocumentInfo info = pdfDoc.GetDocumentInfo();
              info.SetTitle("Παράδειγμα PDF/A-1b");
              info.SetAuthor("iTextSharp");
              info.SetCreator("C# PDF Generator");
              info.SetSubject("Δημιουργία PDF/A-1b με iTextSharp");
      
              // Προσθήκη ICC προφίλ χρωμάτων για συμβατότητα με PDF/A
              string iccProfilePath = "path_to_sRGB_icc_profile.icc";  // Αντικατάστησε με τη διαδρομή του ICC προφίλ σου
              FileStream iccStream = new FileStream(iccProfilePath, FileMode.Open, FileAccess.Read);
              PdfOutputIntent outputIntent = new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB", iccStream);
              pdfDoc.GetCatalog().AddOutputIntent(outputIntent);
      
              // Ενσωμάτωση γραμματοσειράς
              PdfFont font = PdfFontFactory.CreateFont("path_to_font/arial.ttf", PdfEncodings.WINANSI, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
      
              // Προσθήκη περιεχομένου
              document.Add(new Paragraph("Αυτό είναι ένα παράδειγμα εγγράφου PDF/A-1b.").SetFont(font));
      
              // Κλείσιμο του PDF
              document.Close();
      
              Console.WriteLine("Το PDF/A-1b δημιουργήθηκε επιτυχώς.");
          }
      }
      

      Τι συμβαίνει εδώ;

      • Χρησιμοποιούμε το PdfADocument για να δημιουργήσουμε ένα PDF που συμμορφώνεται με τις προδιαγραφές PDF/A-1b.
      • Προσθέτουμε ICC προφίλ χρωμάτων για τη διαχείριση χρώματος και ενσωματώνουμε όλες τις γραμματοσειρές, κάτι που απαιτείται από το PDF/A.

      2. Δημιουργία PDF/UA

      Τι είναι το PDF/UA;

      Το PDF/UA είναι ένα πρότυπο που εξασφαλίζει ότι τα PDF αρχεία είναι προσβάσιμα σε άτομα με αναπηρίες, ειδικά όσον αφορά τη χρήση βοηθητικών τεχνολογιών όπως οι οθόνες Braille και τα προγράμματα ανάγνωσης οθόνης. Απαιτείται η προσθήκη ετικετών (tags) που βοηθούν στη δομημένη παρουσίαση του περιεχομένου.

      Παράδειγμα:

      Ας δημιουργήσουμε ένα PDF που συμμορφώνεται με το PDF/UA πρότυπο.

      csharp

      C# με τη βιβλιοθήκη iTextSharp, θα πρέπει να ακολουθήσεις συγκεκριμένες προδιαγραφές για κάθε τύπο PDF. Τα PDF/A είναι αρχεία ειδικά διαμορφωμένα για μακροπρόθεσμη αποθήκευση, ενώ τα PDF/UA επικεντρώνονται στην προσβασιμότητα (accessibility) για άτομα με αναπηρίες.

      Παρακάτω παρουσιάζονται παραδείγματα για τη δημιουργία PDF/A και PDF/UA.

      Παράδειγμα 1: Δημιουργία PDF/A με iTextSharp

      Το PDF/A είναι μια ειδική μορφή PDF που απαιτεί συγκεκριμένες ρυθμίσεις. Το PDF/A-1b είναι μια από τις πιο συνηθισμένες υποκατηγορίες του PDF/A.

      Για να δημιουργήσεις ένα αρχείο PDF/A-1b, θα πρέπει να προσθέσεις μεταδεδομένα, να ενσωματώσεις όλες τις γραμματοσειρές και να αποφύγεις τη χρήση δυναμικού περιεχομένου (π.χ., JavaScript).

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.Kernel.Pdf.Xmp;
      using iText.Kernel.Pdf.Annot;
      using iText.Kernel.Font;
      using iText.IO.Font;
      using iText.Kernel.Pdf.Canvas;
      using iText.Kernel.Pdf.Canvas.Parser;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF/A
      string filePath = “pdf_a_example.pdf”;

          // Ορισμός προδιαγραφών PDF/A
          PdfWriter writer = new PdfWriter(filePath);
          PdfDocument pdfDoc = new PdfDocument(writer);
          pdfDoc.SetTagged();
      
          // Ορισμός προδιαγραφής PDF/A-1b
          pdfDoc.GetCatalog().SetPdfVersion(PdfVersion.PDF_1_4);
          pdfDoc.GetCatalog().SetViewerPreferences(new PdfViewerPreferences().SetDisplayDocTitle(true));
      
          // Προσθήκη μεταδεδομένων για PDF/A
          PdfDocumentInfo info = pdfDoc.GetDocumentInfo();
          info.SetTitle("Παράδειγμα PDF/A-1b");
          info.SetAuthor("iTextSharp");
          info.SetCreator("C# PDF Generator");
          info.SetKeywords("PDF/A, long-term preservation");
          info.SetSubject("Δημιουργία PDF/A-1b με iTextSharp");
      
          // Ορισμός του ICC προφίλ χρωμάτων για PDF/A
          string iccProfilePath = "sRGB.icm";  // Παράδειγμα με ICC προφίλ
          PdfOutputIntent outputIntent = new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB", new FileStream(iccProfilePath, FileMode.Open, FileAccess.Read));
          pdfDoc.GetCatalog().AddOutputIntent(outputIntent);
      
          Document document = new Document(pdfDoc);
      
          // Ενσωμάτωση γραμματοσειράς
          PdfFont font = PdfFontFactory.CreateFont("Arial", PdfEncodings.WINANSI, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
      
          // Προσθήκη κειμένου
          Paragraph paragraph = new Paragraph("Αυτό είναι ένα παράδειγμα εγγράφου PDF/A-1b.")
              .SetFont(font)
              .SetFontSize(12);
          document.Add(paragraph);
      
          // Κλείσιμο του εγγράφου
          document.Close();
      
          Console.WriteLine("PDF/A-1b created successfully.");
      }

      }

      Επεξήγηση:

      Το PdfAWriter ρυθμίζει το αρχείο ώστε να είναι συμβατό με PDF/A-1b.
      Προσθέτουμε μεταδεδομένα όπως τίτλο, συγγραφέα και προφίλ ICC (χρωματικό προφίλ) που απαιτείται για τα PDF/A.
      Όλες οι γραμματοσειρές πρέπει να είναι ενσωματωμένες στο PDF (embedding), κάτι που επιτυγχάνεται με την παράμετρο PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED.

      Παράδειγμα 2: Δημιουργία PDF/UA με iTextSharp

      Τα PDF/UA (Universal Accessibility) επικεντρώνονται στην προσβασιμότητα, και είναι σημαντικό να χρησιμοποιήσεις τη σήμανση (tagging) και να βεβαιωθείς ότι το έγγραφο είναι δομημένο κατάλληλα για άτομα με αναπηρίες.

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.Kernel.Pdf.Tagging;
      using iText.Kernel.Pdf.Annot;
      using iText.Kernel.Font;
      using iText.IO.Font;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF/UA
      string filePath = “pdf_ua_example.pdf”;

          // Δημιουργία PDF εγγράφου με δυνατότητα tagging για PDF/UA
          PdfWriter writer = new PdfWriter(filePath);
          PdfDocument pdfDoc = new PdfDocument(writer);
          pdfDoc.SetTagged();
      
          Document document = new Document(pdfDoc);
      
          // Προσθήκη μεταδεδομένων για PDF/UA
          PdfDocumentInfo info = pdfDoc.GetDocumentInfo();
          info.SetTitle("Παράδειγμα PDF/UA");
          info.SetAuthor("iTextSharp");
          info.SetCreator("C# PDF Generator");
          info.SetKeywords("PDF/UA, accessibility");
          info.SetSubject("Δημιουργία PDF/UA με iTextSharp");
      
          // Ενσωμάτωση γραμματοσειράς
          PdfFont font = PdfFontFactory.CreateFont("Arial", PdfEncodings.WINANSI, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
      
          // Δημιουργία στοιχείων με tagging για προσβασιμότητα
          Paragraph paragraph = new Paragraph("Αυτό είναι ένα παράδειγμα εγγράφου PDF/UA.")
              .SetFont(font)
              .SetFontSize(12);
          document.Add(paragraph);
      
          // Προσθήκη ετικετών (tags) για προσβασιμότητα
          PdfTag tag = new PdfTag(PdfName.Document);
          pdfDoc.GetCatalog().SetLang(new PdfString("en-US"));
          pdfDoc.GetTagStructureContext().GetRootTag().SetRole(PdfName.Document);
      
          // Προσθήκη ενός ετικετοποιημένου (tagged) στοιχείου με σημασιολογική σήμανση
          Paragraph taggedParagraph = new Paragraph("Αυτό είναι ένα κείμενο με tagging.")
              .SetFont(font)
              .SetFontSize(12);
          taggedParagraph.GetAccessibilityProperties().SetRole(PdfName.P);
          document.Add(taggedParagraph);
      
          // Κλείσιμο του εγγράφου
          document.Close();
      
          Console.WriteLine("PDF/UA created successfully.");
      }

      }

      Επεξήγηση:

      Χρησιμοποιούμε τη μέθοδο SetTagged για να ενεργοποιήσουμε το tagging, το οποίο είναι απαραίτητο για τα PDF/UA.
      Προσθέτουμε τις απαραίτητες μεταδεδομένες πληροφορίες για την προσβασιμότητα και χρησιμοποιούμε ετικέτες (tags) στα στοιχεία του εγγράφου για να βοηθήσουμε τα βοηθητικά προγράμματα ανάγνωσης.
      Οι ετικετοποιημένες παραγράφοι πρέπει να ορίζονται με ρόλους (roles), όπως PdfName.P για παραγράφους.
      
      
      Παράδειγμα 3: Συνδυασμός PDF/A και PDF/UA

      Μπορείς επίσης να συνδυάσεις τις προδιαγραφές PDF/A και PDF/UA σε ένα αρχείο, δημιουργώντας ένα PDF που είναι κατάλληλο τόσο για μακροπρόθεσμη αποθήκευση όσο και για προσβασιμότητα.

      using System;
      using iText.Kernel.Pdf;
      using iText.Layout;
      using iText.Layout.Element;
      using iText.Kernel.Pdf.Xmp;
      using iText.Kernel.Pdf.Annot;
      using iText.Kernel.Font;
      using iText.IO.Font;
      using iText.Kernel.Pdf.Canvas;
      using iText.Kernel.Pdf.Tagging;
      using iText.Kernel.Pdf.Canvas.Parser;
      using iText.Kernel.Pdf.Canvas.Parser.Listener;
      using System.IO;

      class Program
      {
      static void Main()
      {
      // Ορισμός αρχείου PDF/A και PDF/UA
      string filePath = “pdf_a_ua_example.pdf”;

          // Δημιουργία PDF εγγράφου με δυνατότητα tagging και προδιαγραφές PDF/A
          PdfWriter writer = new PdfWriter(filePath);
          PdfDocument pdfDoc = new PdfDocument(writer);
          pdfDoc.SetTagged();
      
          // Ορισμός προδιαγραφών PDF/A-1b
          pdfDoc.GetCatalog().SetPdfVersion(PdfVersion.PDF_1_4);
          pdfDoc.GetCatalog().SetViewerPreferences(new PdfViewerPreferences().SetDisplayDocTitle(true));
      
          // Προσθήκη μεταδεδομένων για PDF/A και PDF/UA
          PdfDocumentInfo info = pdfDoc.GetDocumentInfo();
          info.SetTitle("Παράδειγμα PDF/A και PDF/UA");
          info.SetAuthor("iTextSharp");
          info.SetCreator("C# PDF Generator");
          info.SetKeywords("PDF/A, PDF/UA, long-term preservation, accessibility");
          info.SetSubject("Δημιουργία PDF/A και PDF/UA με iTextSharp");
      
          // Προσθήκη του ICC προφίλ χρωμάτων για PDF/A
          string iccProfilePath = "sRGB.icm";  // Παράδειγμα με ICC προφίλ
          PdfOutputIntent outputIntent = new PdfOutputIntent("Custom", "", "http://www.color.org", "sRGB", new FileStream(iccProfilePath, FileMode.Open, FileAccess.Read));
          pdfDoc.GetCatalog().AddOutputIntent(outputIntent);
      
          Document document = new Document(pdfDoc);
      
          // Ενσωμάτωση γραμματοσειράς
          PdfFont font = PdfFontFactory.CreateFont("Arial", PdfEncodings.WINANSI, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
      
          // Προσθήκη στοιχείων για PDF/A και PDF/UA
          Paragraph paragraph = new Paragraph("Αυτό είναι ένα παράδειγμα εγγράφου PDF/A και PDF/UA.")
              .SetFont(font)
              .SetFontSize(12);
          document.Add(paragraph);
      
          // Ορισμός ετικετών για PDF/UA
          PdfTag tag = new PdfTag(PdfName.Document);
          pdfDoc.GetCatalog().SetLang(new PdfString("en-US"));
          pdfDoc.GetTagStructureContext().GetRootTag().SetRole(PdfName.Document);
      
          // Προσθήκη ετικετοποιημένων στοιχείων
          Paragraph taggedParagraph = new Paragraph("Αυτό είναι ένα κείμενο με tagging για προσβασιμότητα.")
              .SetFont(font)
              .SetFontSize(12);
          taggedParagraph.GetAccessibilityProperties().SetRole(PdfName.P);
          document.Add(taggedParagraph);
      
          // Κλείσιμο του εγγράφου
          document.Close();
      
          Console.WriteLine("PDF/A and PDF/UA created successfully.");
      }

      }

      Επεξήγηση:

      Αυτό το παράδειγμα συνδυάζει τις προδιαγραφές PDF/A-1b για μακροπρόθεσμη αποθήκευση και PDF/UA για προσβασιμότητα.
      Περιλαμβάνει μεταδεδομένα και ICC προφίλ για το PDF/A και ετικετοποιημένα στοιχεία για την προσβασιμότητα PDF/UA.

      Συμπεράσματα

      Η δημιουργία PDF/A και PDF/UA απαιτεί την προσθήκη συγκεκριμένων μεταδεδομένων, τη σήμανση (tagging) των στοιχείων του PDF και την ενσωμάτωση όλων των γραμματοσειρών. Η iTextSharp προσφέρει τις κατάλληλες δυνατότητες για να διαμορφώσεις τα αρχεία PDF σου σύμφωνα με τις προδιαγραφές για αρχειοθέτηση και προσβασιμότητα.

      Παράδειγμα χρήσης της βιβλιοθήκης:

      // Δημιουργία ενός αρχείου PDF με πίνακα
      Document doc = new Document();
      PdfWriter.GetInstance(doc, new FileStream(“TableExample.pdf”, FileMode.Create));
      doc.Open();

      PdfPTable table = new PdfPTable(3); // Δημιουργία πί