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.