# PDF mit Java?



## TinyTim (28. Dez 2006)

Hallo,

ich habe ein Programm geschrieben, dass ein mathematisches Problem löst... z.B. quadratische Gleichungen. Das Ergebnis mit dem Lösungsweg habe ich in einem String gespeichert. So weit so gut.

Als EndErgebnis hätte ich gerne eine nette Seite die ausdruckbar und abheftbar ist... also mit Titel, Planskizze (wenn nötig), Aufgabenstellung, Lösungsweg und Lösung.

Besteht irgendwie eine Möglichkeit den einzelne Stringteile und JPegs mit Java auf einer A4 Seite zu plazieren und zu formatieren, sodass ich nur noch die Aufgabe eingeben muss und als Ergebnis eine neue Datei (z.B. PDF) bekomme, die auch noch hübsch aussieht? Mit ner Textdatei funktioniert das wunderbar, aber das sieht halt sehr bescheiden aus 

Hat jemand ne Idee?


----------



## Wildcard (28. Dez 2006)

iText


----------



## André Uhres (28. Dez 2006)

Wenn's nicht unbedingt pdf sein muss, dann könntest du vielleicht auch einfach alles 
auf ein BufferedImage setzen. Das kannst du dann anzeigen und als Bilddatei (jpg) abspeichern.


----------



## TinyTim (28. Dez 2006)

iText hab ich gefudnen, aber irgendwie nicht kappiert. Hat jemand ein Beispiel?

Wie funktioniert das mit dem bufferedimage? Hast du ein codefragment, anhand dem ich sehen kann wie man auf ein bufferedimage schreibt (zeichnet) und wie ich es als jpg speichere?

Wie funktioniert das dann mit der Auflösung... also, wenn ich es z. B. in A4 mit 150dpi drucken möchte, welche Größe müsste das Image dann haben?


----------



## Oni (28. Dez 2006)

itext hat eigentlich ganz gute tutorial auf der seite.
du findest immer einen beispiel code und dann noch eine pdf-datei wie das ergebnis aussieht.

itext tutorial

guck dir einfach mal das helloworld an, sind ja nur ein paar zeilen code.


----------



## André Uhres (28. Dez 2006)

TinyTim hat gesagt.:
			
		

> ..Wie funktioniert das mit dem bufferedimage? Hast du ein codefragment, anhand dem ich sehen kann wie man auf ein bufferedimage schreibt (zeichnet) und wie ich es als jpg speichere?
> 
> Wie funktioniert das dann mit der Auflösung... also, wenn ich es z. B. in A4 mit 150dpi drucken möchte, welche Größe müsste das Image dann haben?




```
package paint;
/*
 * ImageDemo.java
 */
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
public class ImageDemo extends JFrame {
    private JButton btAnzeigen, btSpeichern;
    private JToolBar toolbar;
    private Bild bild;
    private Graphics2D g2d;
    private BufferedImage image;
    private File file;
    public ImageDemo() {
        super("Image Demo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400,300);
        setLocationRelativeTo(null);
        toolbar = new JToolBar();
        btAnzeigen = new JButton("Bild anzeigen");
        btSpeichern = new JButton("Bild speichern");
        bild = new Bild();
        file = new File("c:\\ImageDemoBild.jpg");
        toolbar.add(btAnzeigen);
        toolbar.add(btSpeichern);
        getContentPane().add(toolbar, BorderLayout.PAGE_START);
        getContentPane().add(bild, BorderLayout.CENTER);
        btAnzeigen.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent evt) {
                btAnzeigenActionPerformed(evt);
            }
        });
        btSpeichern.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent evt) {
                btSpeichernActionPerformed(evt);
            }
        });
    }
    private void btSpeichernActionPerformed(final ActionEvent evt) {
        try {
            ImageIO.write(image, "jpg", file);
            JOptionPane.showMessageDialog(this, file.getPath());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    private void btAnzeigenActionPerformed(final ActionEvent evt) {
        bildMalen();
        bild.repaint();
    }
    private void bildMalen(){
        g2d.setFont(g2d.getFont().deriveFont(20f));
        g2d.drawString("Dies ist ein",100,30);
        g2d.setColor(Color.BLUE);
        g2d.setFont(g2d.getFont().deriveFont(30f));
        g2d.drawString("Test",100,60);
        g2d.setStroke(new BasicStroke(5f));
        g2d.setColor(Color.GREEN);
        g2d.drawLine(100,90,300,90);
    }
    public static void main(final String args[]) {new ImageDemo().setVisible(true);}
    class Bild extends JPanel{
        protected void paintComponent(final Graphics g) {
            super.paintComponent(g);
            if(image == null){
                image = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
                g2d = (Graphics2D)image.getGraphics();
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
                g2d.setColor(Color.white);
                g2d.fillRect(0, 0, getWidth(), getHeight());
                g2d.setColor(Color.black);
            }
            Rectangle r = g.getClipBounds();
            g.drawImage(image, r.x, r.y, r.width+r.x, r.height+r.y,
                    r.x, r.y, r.width+r.x, r.height+r.y, null);
        }
    }
}
```
Was die Größe betrifft, das dürfte eigentlich kein Problem sein weil es ja nur ein Bild ist. 
Mit irgendeinem Bildeditor kann man die Größe nachträglich anpassen.


----------

