J
Jub
Gast
Hallo,
ich habe ein Problem beim Drucken eines Labels. Dieses tritt je nach Länge des Textes, Anzahl der Leerzeichen, usw. bei unterschiedlichen Schriftarten/-größen und -stilen auf. Das folgende Beispiel zeigt das Problem bei Arial, Fett, Größe 22: die Leerzeichen verschwinden. Verändere ich den Text, tritt das bei anderen Schriftgrößen auf. Ach so, im Frame stellt er es richtig dar, aber nach dem Druck sind die Leerzeichen erst verschwunden.
Ich verwende Windows XP, 64 bit, JDK 7. Gleiches Problem auf Windows 7, 32 bit, 64 bit, JDK 6, ...
Unter JDK 5 keine Probleme.
Kann das Problem jemand bestätigen?
ich habe ein Problem beim Drucken eines Labels. Dieses tritt je nach Länge des Textes, Anzahl der Leerzeichen, usw. bei unterschiedlichen Schriftarten/-größen und -stilen auf. Das folgende Beispiel zeigt das Problem bei Arial, Fett, Größe 22: die Leerzeichen verschwinden. Verändere ich den Text, tritt das bei anderen Schriftgrößen auf. Ach so, im Frame stellt er es richtig dar, aber nach dem Druck sind die Leerzeichen erst verschwunden.
Ich verwende Windows XP, 64 bit, JDK 7. Gleiches Problem auf Windows 7, 32 bit, 64 bit, JDK 6, ...
Unter JDK 5 keine Probleme.
Kann das Problem jemand bestätigen?
Java:
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.util.Vector;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class PrintTest extends JFrame {
private PrintPanel panel;
public static void main(String[] args) {
PrintTest frame = new PrintTest();
frame.pack();
frame.setVisible(true);
frame.print();
}
public PrintTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new PrintPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
Vector<Font> fonts = new Vector<Font>();
String fontName = "Arial";
for (int i = 18; i < 29; i++) {
fonts.add(new Font(fontName, Font.PLAIN, i));
fonts.add(new Font(fontName, Font.BOLD, i));
}
for (int i = 0; i < fonts.size(); i++) {
JLabel label = new JLabel();
label.setText("IYBN Isakjfgsdulgflwehflet flr asdf. Msjahfuhuihsdilf");
label.setFont(fonts.get(i));
panel.add(label);
}
add(panel);
}
private void print() {
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(panel);
if(pj.printDialog()){
try {
pj.print();
} catch (PrinterException e) {
e.printStackTrace();
}
}
}
class PrintPanel extends JPanel implements Printable {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {
if(pageIndex>0){
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
double scale = pageFormat.getImageableWidth()/getWidth();
// g2d.scale(scale, scale);
this.paint(g2d);
return PAGE_EXISTS;
}
}
}