String-Printer

Sprache: 
Java
import java.awt.*; import java.awt.print.*; import java.io.*; import java.util.Hashtable; import java.util.StringTokenizer; public class StringPrinter implements Printable { public static final int DIALOG_MODUS = 0; public static final int HIDDEN_MODUS = 1; private static final int RESMUL = 4; private PrinterJob druckJob; private PageFormat seitenFormat; private int seitenanzahl = 0; private Hashtable<Integer, String> seiten = new Hashtable<Integer, String>(); private String titel = ""; public StringPrinter(String text,int zeilen, String titel) { this.druckJob = PrinterJob.getPrinterJob(); this.seitenBilden(text,zeilen); this.titel = titel; } private void seitenBilden(String text,int zeilen) { StringTokenizer st = new StringTokenizer(text,"\n"); int aktSeite = 0; int aktZeilen = 0; String seite = ""; while(st.hasMoreElements()) { if (aktZeilen <= zeilen) { seite += st.nextElement(); seite += "\n"; aktZeilen++; } else { seiten.put(new Integer(aktSeite), seite); seite = ""; aktSeite++; aktZeilen = 0; } } if (aktZeilen > 0) { seiten.put(new Integer(aktSeite), seite); aktSeite++; } this.seitenanzahl = aktSeite; } private void setupSeitenFormat() { seitenFormat = druckJob.defaultPage(); druckJob.setPrintable(this, this.seitenFormat); } private boolean setupSeitenFormatDialog() { PageFormat defaultPF = druckJob.defaultPage(); this.seitenFormat = druckJob.pageDialog(defaultPF); druckJob.setPrintable(this, this.seitenFormat); return (this.seitenFormat != defaultPF); } private boolean setupJobOptionen() { return druckJob.printDialog(); } public void printText(int modus) throws PrinterException { if (modus == StringPrinter.DIALOG_MODUS) { if (this.setupSeitenFormatDialog()) { if (this.setupJobOptionen()) { druckJob.print(); } } } else { this.setupSeitenFormat(); druckJob.print(); } } public int print(Graphics g, PageFormat pf, int page) { int ret = PAGE_EXISTS; String line = null; String seite = null; if (!seiten.containsKey(new Integer(page))) { ret = NO_SUCH_PAGE; } else { seite = seiten.get(new Integer(page)); StringTokenizer st = new StringTokenizer(seite,"\n"); if (ret == PAGE_EXISTS) { Graphics2D g2 = (Graphics2D)g; g2.scale(1.0 / RESMUL, 1.0 / RESMUL); int ypos = (int)pf.getImageableY() * RESMUL; int xpos = ((int)pf.getImageableX() + 2) * RESMUL; int yd = 12 * RESMUL; int ymax = ypos + (int)pf.getImageableHeight() * RESMUL - yd; if (this.titel != null) { ypos += yd; g2.setColor(Color.black); g2.setFont(new Font("Monospaced", Font.BOLD, 10 * RESMUL)); g.drawString(titel, xpos, ypos); g.drawString(" Seite " + (page + 1) + " / " + seitenanzahl, (xpos + (int)pf.getImageableWidth() * RESMUL) - 60 * RESMUL, ypos); g.drawLine( xpos, ypos + 6 * RESMUL, xpos + (int)pf.getImageableWidth() * RESMUL, ypos + 6 * RESMUL ); ypos += 2 * yd; } g2.setColor(new Color(0, 0, 127)); g2.setFont(new Font("Monospaced", Font.PLAIN, 9 * RESMUL)); while (st.hasMoreTokens()) { g.drawString(st.nextToken(), xpos, ypos); ypos += yd; if (ypos >= ymax) { break; } } } } return ret; } }
Beschreibung: 

Eine Klasse zum mehrseitigen Drucken von Strings.