aus meiner (mittlerweilen vor 3 Jahren) Erfahrung... JA (kA ob mit Java6 oder so mal was akzeptables gibt)Hallo,
ist es denn wirklich so schwer, mit Java mehseitig zu drucken???
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class DruckerTest {
private ArrayList<String> inhalt;
private PrinterJob pjob;
private int counter = 0;
public static void main(String[] args) {
new DruckerTest();
}
public DruckerTest() {
inhalt = new ArrayList<String>();
for (int i = 0; i < 200; i++) {
String test = "Zeile: " + i;
inhalt.add(test);
}
System.out.println("inhalt" + inhalt.size());
try {
counter = 0;
getPrinter();
}
catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Keine Verbindung zum Drucker", "Fehler", JOptionPane.ERROR_MESSAGE);
}
}
private void getPrinter() throws PrinterException {
pjob = PrinterJob.getPrinterJob();
Paper a4Paper = new Paper();
PageFormat pf = new PageFormat();
double paperWidth = 8.26;
double paperHeight = 11.69;
double leftMargin = 0.30;
double rightMargin = 0.30;
double topMargin = 0.30;
double bottomMargin = 0.30;
a4Paper.setSize(paperWidth * 72.0, paperHeight * 72.0);
a4Paper.setImageableArea(leftMargin * 72.0, topMargin * 72.0, (paperWidth - leftMargin - rightMargin) * 72.0,
(paperHeight - topMargin - bottomMargin) * 72.0);
pf.setPaper(a4Paper);
Book book = new Book();
book.append(new TextPrintable(), pf);
pjob.setPageable(book);
if (pjob.printDialog()) {
try {
pjob.print();
}
catch (Exception PrintException) {
PrintException.printStackTrace();
}
}
else {
System.out.println("Printing aborted...");
}
}
class TextPrintable implements Printable {
Font headerfont = new Font("Times", Font.BOLD, 20);
Font textfont = new Font("Times", Font.PLAIN, 12);
public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
int x = 0;
int y = (int) pjob.defaultPage().getImageableY();
String text = "Test für mehrseitigen Druck";
g.setFont(headerfont);
FontMetrics fm = g.getFontMetrics();
int laenge = fm.stringWidth(text);
int hoehe = fm.getHeight();
x += (((int) pjob.defaultPage().getWidth() - laenge) / 2);
g.drawString(text, x, y);
x = (int) pjob.defaultPage().getImageableX();
y += hoehe + 15;
for (int i = counter; i < inhalt.size(); i++) {
x = (int) pjob.defaultPage().getImageableX();
g.setFont(textfont);
g.drawString(inhalt.get(i), x, y);
y += fm.getHeight() / 2;
counter++;
if (y > pjob.defaultPage().getImageableHeight()) {
System.out.println("break");
break;
}
}
return Printable.PAGE_EXISTS;
}
}
}
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class DruckerTest {
private ArrayList<String> inhalt;
private PrinterJob pjob;
private Font headerfont = new Font("Times", Font.BOLD, 20);
private Font textfont = new Font("Times", Font.PLAIN, 12);
private int counter = 0;
public static void main(String[] args) {
new DruckerTest();
}
public DruckerTest() {
inhalt = new ArrayList<String>();
for (int i = 0; i < 200; i++) {
String test = "Zeile: " + i;
inhalt.add(test);
}
System.out.println("inhalt" + inhalt.size());
try {
getPrinter();
}
catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Keine Verbindung zum Drucker", "Fehler", JOptionPane.ERROR_MESSAGE);
}
}
private void getPrinter() throws PrinterException {
pjob = PrinterJob.getPrinterJob();
Paper a4Paper = new Paper();
PageFormat pf = new PageFormat();
double paperWidth = 8.26;
double paperHeight = 11.69;
double leftMargin = 0.30;
double rightMargin = 0.30;
double topMargin = 0.30;
double bottomMargin = 0.30;
a4Paper.setSize(paperWidth * 72.0, paperHeight * 72.0);
a4Paper.setImageableArea(leftMargin * 72.0, topMargin * 72.0, (paperWidth - leftMargin - rightMargin) * 72.0,
(paperHeight - topMargin - bottomMargin) * 72.0);
pf.setPaper(a4Paper);
Book book = new Book();
ArrayList<String> temp = new ArrayList<String>();
for (int i = 0; i < inhalt.size(); i++) {
if (i != 0 && i % 40 != 0 && i != inhalt.size() - 1) {
temp.add(inhalt.get(i));
}
else if (i == 0) {
temp.add(inhalt.get(i));
}
else if (i == inhalt.size() - 1) {
temp.add(inhalt.get(i));
counter = 0;
book.append(new TextPrintable(temp), pf);
temp = new ArrayList<String>();
}
else {
counter = 0;
book.append(new TextPrintable(temp), pf);
temp = new ArrayList<String>();
}
}
pjob.setPageable(book);
if (pjob.printDialog()) {
try {
pjob.print();
}
catch (Exception PrintException) {
PrintException.printStackTrace();
}
}
else {
System.out.println("Printing aborted...");
}
}
class TextPrintable implements Printable {
ArrayList<String> list;
public TextPrintable(ArrayList<String> list) {
this.list = list;
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
int x = 0;
int y = (int) pjob.defaultPage().getImageableY();
String text = "Test für mehrseitigen Druck";
g.setFont(headerfont);
FontMetrics fm = g.getFontMetrics();
int laenge = fm.stringWidth(text);
int hoehe = fm.getHeight();
x += (((int) pjob.defaultPage().getWidth() - laenge) / 2);
g.drawString(text, x, y);
x = (int) pjob.defaultPage().getImageableX();
y += hoehe + 15;
for (int i = 0; i < list.size(); i++) {
x = (int) pjob.defaultPage().getImageableX();
g.setFont(textfont);
System.out.println(list.get(i));
g.drawString(list.get(i), x, y);
y += fm.getHeight() / 2;
counter++;
// if (y > pjob.defaultPage().getImageableHeight()) {
// System.out.println("break");
// break;
// }
}
return Printable.PAGE_EXISTS;
}
}
}
na dann tu ich es mal fuer dich:Hm. Wie ich ja schon in mehreren Threads beschrieben habe, komme ich ja aus der C# - Ecke. Da ist das halt ein Zweizeiler.
Gibt es wirklich nirgends nen Codeschnipsel? Es kann doch nicht sein, dass ich der einzige mit diesem Problem bin?
Grüße Oli