Announcement

Collapse
No announcement yet.

Beispiele zur iText API

Collapse
This is a sticky topic.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Beispiele zur iText API

    Die IText-API dient zur Erstellung von PDF-Documenten. Der Umgang mit dieser Bibliothek ist recht einfach.

    Zunächst sind die erforderlichen Bibliotheken dem Projekt hinzuzufügen. Die eigentliche iText Lib ist hier erhältlich, die benötigten Zusatzbibliotheken findet man hier

    Die Bibliothek steht auch für C# zur Verfügung

    Zur Erstellung eines PDFs werden unterschiedliche Elemente benötigt. Für den Anfang sind das

    - Chunk
    - Phrase
    - Paragraph

    Unter einem Chunk versteht man die kleinste textuelle Einheit die eigene Attribute wie Farbe, Background und Font besitzen kann.

    Eine Phrase ist eine Liste von Elemente. Sie kann mehrere Elemente enthalten, die dann nacheinander dargestellt werden.

    Ein Paragraph umgibt ein Element wie beispielsweise einen Chunk oder eine Phrase mit einem Absatz.

    Ein Beispiel zu Ausgabe eines Textes mit unterschiedlichen Attributen:

    Die benötigten Fonts sollten für den einfacheren Zugriff als Klassenvariablen definiert werden. Zu beachten ist, dass die Klasse Font aus der iText-Bibliothek zu nutzen ist (com.itextpdf.text.Font):

    Code:
    private static final Font NORMAL_FONT=new Font(Font.FontFamily.TIMES_ROMAN,12,Font.NORMAL);
    private static final Font NORMAL_BOLD_FONT=new Font(Font.FontFamily.TIMES_ROMAN,12,Font.BOLD);
    private static final Font NORMAL_FONT_RED=new Font(Font.FontFamily.TIMES_ROMAN,12,Font.NORMAL,Ba seColor.RED);
    Zunächst wird das Doument (com.itextpdf.text.Document) erstellt

    Code:
    Document doc=new Document(PageSize.A4,50,30,50,30);
    Wir legen eine Größe von DIN A4 fest. Die übrigen Parameter legen das Margin der Seite fest.

    Code:
    PdfWriter writer=PdfWriter.getInstance(doc,new FileOutputStream(new File("g:\\test.pdf")));
    Im nächsten Schritt holen wir uns die Instanz des PDFWriters, weisen diesem das Document zu und den OutputStream, in dem das PDF erzeugt wird. In diesem Fall eine Datei im Filesystem. Ohne weiteres kann die Ausgabe in einem Browser erfolgen.
    Code:
    doc.open();
    Nun erst wird das Dokument geöffnet

    Code:
    Phrase textblock=new Phrase();
    
    Chunk chunk=new Chunk("Das ist ein erster Text.",NORMAL_FONT);
    textblock.add(chunk);
    
    chunk=new Chunk("Das ist ein zweiter Text.",NORMAL_BOLD_FONT);
    textblock.add(chunk);
    
    chunk=new Chunk("Das ist ein dritter Text.",NORMAL_FONT_RED);
    chunk.setBackground(BaseColor.GREEN);
    textblock.add(chunk);
    
    textblock.add(Chunk.NEWLINE);
    textblock.add(Chunk.NEWLINE);
    
    chunk=new Chunk("Das ist ein vierter Text.",NORMAL_FONT);
    textblock.add(chunk);
    Wir erstellen mehrere Texte und fügen diese einer Phrase zu

    Code:
    doc.add(new Paragraph(textblock));
    Die erstelle Phrase wird einem Paragraph zugeordnet und dieser nunmehr dem zu erstellenden Document hinzugefügt.

    Code:
    doc.addTitle("iText Test");
    doc.addAuthor("wer auch immer");
    doc.addCreationDate();
    doc.addSubject("Hello World");
    Die Eigenschaften des Documentes können ergänzt werden.


    Code:
    doc.close();
    writer.close();
    Das Document und er Writer werden geschlossen.


    Code:
    if(Desktop.isDesktopSupported())
    {
    Desktop desktop=Desktop.getDesktop();
    if(desktop.isSupported(Desktop.Action.OPEN))
    {
    desktop.open(new File("g:\\test.pdf"));
    }
    }
    Um das Ergebnis zu sehen, öffnen wir das PDF.

    Hier die komplette Klasse

    Code:
    public class Demo
    {
    private static final Font NORMAL_FONT=new Font(Font.FontFamily.TIMES_ROMAN,12,Font.NORMAL);
    private static final Font NORMAL_FONT_RED=new Font(Font.FontFamily.TIMES_ROMAN,12,Font.NORMAL,Ba seColor.RED);
    private static final Font NORMAL_BOLD_FONT=new Font(Font.FontFamily.TIMES_ROMAN,12,Font.BOLD);
    
    public static void main(String[] args) throws DocumentException,FileNotFoundException,IOExceptio n
    {
    
    Document doc=new Document(PageSize.A4,50,30,50,30);
    PdfWriter writer=PdfWriter.getInstance(doc,new FileOutputStream(new File("g:\\test.pdf")));
    doc.open();
    Phrase textblock=new Phrase();
    
    Chunk chunk=new Chunk("Das ist ein erster Text.",NORMAL_FONT);
    textblock.add(chunk);
    
    chunk=new Chunk("Das ist ein zweiter Text.",NORMAL_BOLD_FONT);
    textblock.add(chunk);
    
    chunk=new Chunk("Das ist ein dritter Text.",NORMAL_FONT_RED);
    chunk.setBackground(BaseColor.GREEN);
    textblock.add(chunk);
    
    textblock.add(Chunk.NEWLINE);
    textblock.add(Chunk.NEWLINE);
    
    chunk=new Chunk("Das ist ein vierter Text.",NORMAL_FONT);
    textblock.add(chunk);
    
    doc.add(new Paragraph(textblock));
    
    doc.addTitle("iText Test");
    doc.addAuthor("wer auch immer");
    doc.addCreationDate();
    doc.addSubject("Hello World");
    
    doc.close();
    writer.close();
    
    if(Desktop.isDesktopSupported())
    {
    Desktop desktop=Desktop.getDesktop();
    if(desktop.isSupported(Desktop.Action.OPEN))
    {
    desktop.open(new File("g:\\test.pdf"));
    }
    }
    
    }
    
    }
    Weitere Themen wären, die Erstellung von Tabellen, veränderbare Felder, DirectContent u.a.
    Wer weitere Beispiele möchte.....
    Zuletzt editiert von Christian Marquardt; 31.10.2021, 20:18.
    Christian

  • #2
    Seiten aus einem PDF-Dokument löschen

    Code:
    /**
    *
    * @param orgFile - Pfad und Name zum PDF-Dokument
    * @param delPages - Liste von Integers, die die gelöschten Seiten enthalten
    * @param backup - soll ein Backup gemacht werden
    * @return - erfolgreich
    */
    public static boolean deletePages(String orgFile,ArrayList<Integer> delPages,boolean backup)
    {
    String destFile;
    try
    {
    PdfReader reader=new PdfReader(orgFile);
    Document document=new Document(reader.getPageSizeWithRotation(1));
    destFile=orgFile.replaceAll("\\.pdf","_del.pdf");
    PdfCopy copy=new PdfCopy(document,new FileOutputStream(destFile));
    document.open();
    for(int pageNumber=1;pageNumber<=reader.getNumberOfPages() ;pageNumber++)
    {
    if(!delPages.contains(pageNumber))
    {
    copy.addPage(copy.getImportedPage(reader,pageNumbe r));
    }
    }
    document.close();
    }
    catch(IOException|DocumentException e)
    {
    return false;
    }
    
    if(!backup)
    {
    File org=new File(orgFile);
    if(org.delete())
    {
    File dst=new File(destFile);
    dst.renameTo(org);
    }
    }
    return true;
    }
    Zuletzt editiert von Christian Marquardt; 31.10.2021, 20:12.
    Christian

    Comment


    • #3
      PDFs zusammenfügen:

      Code:
      /**
      *
      * @param fileListe - Liste mit File-Objekten, die die zusammenzuführenden PDFs enthalten
      * @param destFile - Pfad und Name der Zieldatei
      * @return erfolgreich
      *
      */
      public static boolean concatPDFFiles(ArrayList<File> fileListe,File destFile)
      {
      Document document=new Document();
      try
      {
      PdfWriter writer=PdfWriter.getInstance(document,new FileOutputStream(destFile));
      document.open();
      PdfImportedPage page;
      PdfContentByte cb=writer.getDirectContent();
      for(File file:fileListe)
      {
      PdfReader reader=new PdfReader(new FileInputStream(file));
      for(int i=1;i<=reader.getNumberOfPages();i++)
      {
      document.newPage();
      page=writer.getImportedPage(reader,i);
      cb.addTemplate(page,0,0);
      }
      }
      }
      catch(DocumentException|IOException ex)
      {
      return false;
      }
      document.close();
      return true;
      }
      Zuletzt editiert von Christian Marquardt; 31.10.2021, 20:11.
      Christian

      Comment

      Working...
      X