tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
3012
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Christian030783 Christian030783 ist offline Mitglied Bronze
    Registriert seit
    May 2009
    Beiträge
    36
    Hallo zusammen!

    Ich erzeuge in meinem Programm einige Grafiken und möchte diese in ein PDF mit Hilfe von iText einfügen.

    Momentan mache ich das folgendermaßen(Habe den Code etwas vereinfacht):

    1. Grafik zeichnen (Graphics g)
    Code :
    1
    2
    3
    
    public static void myPaintFunction(Graphics g){
            g.drawOval(10, 10, 190, 190);
        }
    2. Grafik als JPEG speichern
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    public static void store(int iWidth, int iHeight, String sImgFilename){
            BufferedImage img = new BufferedImage(iWidth,iHeight, BufferedImage.TYPE_INT_ARGB);
            myPaintFunction(img.createGraphics());
            try{
                FileOutputStream out = new FileOutputStream( new File( sImgFilename ) );
                 JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder( out );
                 JPEGEncodeParam  prm = enc.getDefaultJPEGEncodeParam( img );
                 prm.setQuality( 1.0f, false );
                 enc.setJPEGEncodeParam( prm );
                 enc.encode( img );
            } catch(Exception ex){
                
            }
            
        }
    3. Grafik in PDF einfügen
    Code :
    1
    2
    3
    4
    
    ....
    Image img = Image.getInstance("nw.jpg");
    document.add(img);
    ...



    Geht das vielleicht irgendwie ohne dieses "Zwischenspeichern" in Schritt 2?

    z.B. so etwas wie
    Code :
    1
    2
    
    Image img = Image.getInstance(new myPaintFunction())
    document.add(img);
     

  2. #2
    Kryptaesthesie Kryptaesthesie ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    127.0.0.1
    Beiträge
    189
    Guten Morgen,

    ja, das ist möglich, ohne das Zwischenspeichern.
    Schau dir dazu mal an, wie du Dokumente auf dem Drucker ausgeben kannst. Wenn du das hinbekommen hast, wird später anstelle eines Druckers in ein PDF "gedruckt". Im folgenden Code-Auszug ist das die Zeile: liste.getListe((Graphics) g2d, pidx + 1);.

    Hier mal ein Code-Auszug:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
        /**
         * Führt die Konvertierung ins PDF-Format durch.
         */
        public void convertToPdf() {
            Document document = createDocumentWithOrientation();
            
            if(os != null) {
              try {
                  PdfWriter writer = PdfWriter.getInstance(document, this.os);
                  document.open();
                  
                  PdfContentByte cb;
                  PdfTemplate tp;
                  Graphics2D g2d = null;
                  
                  try {
                      int pidx = 0;
                      while(liste.nextPage()) {   // die Druck-Version wird in ListeDrucken.java in der Methode print() erstellt
                            document.newPage();
                            cb = writer.getDirectContent();
                            tp = createPdfTemplateWithOrientation(cb); //cb.createTemplate(PageSize.A4.getHeight(), PageSize.A4.getWidth());
                            g2d = createGraphics2DWithOrientation(tp); //tp.createGraphics(PageSize.A4.getHeight(), PageSize.A4.getWidth());
                            g2d.translate(39.89, 38.54);
                            
                            logger.debug("zeichne PDF-Seite " + (pidx+1));
                            liste.getListe((Graphics) g2d, pidx + 1);
                            
                            g2d.dispose();
                            cb.addTemplate(tp, 0, 0);
                            
                            pidx++;
                        }
                        
                    }
                    catch(Throwable t) {
                        logger.error("", t);
                    }
              }
              catch(DocumentException de) {
                  logger.error(de);
              }
            }
          
          document.close();
      }
    Da musst dir mal rausziehen, was du gebrauchen kannst. Interessant dürfte der Part in der while-Schleife sein.

    Gruß
    Gerrit
     

Ähnliche Themen

  1. Grafik in Grafik einfügen
    Von Alice im Forum PHP
    Antworten: 10
    Letzter Beitrag: 14.12.10, 16:07
  2. Antworten: 3
    Letzter Beitrag: 12.08.07, 22:52
  3. nach 2 Zeichen ein Zeichen einfügen
    Von Gutschu im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 13.09.04, 17:44
  4. Grafik einfügen
    Von calippo im Forum Flash Plattform
    Antworten: 3
    Letzter Beitrag: 08.08.04, 13:45
  5. Antworten: 6
    Letzter Beitrag: 05.02.04, 08:44

Stichworte