Grafik zeichen und mit iText in ein PDF einfügen

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:
public static void myPaintFunction(Graphics g){
		g.drawOval(10, 10, 190, 190);
	}
2. Grafik als JPEG speichern
Code:
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:
....
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:
Image img = Image.getInstance(new myPaintFunction())
document.add(img);
 
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:
    /**
     * 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
 

Neue Beiträge

Zurück