Dringende Java-Dau-Probs...
Geizhals » Forum » Programmierung » Dringende Java-Dau-Probs... (9 Beiträge, 139 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
..
Re(2): Dringende Java-Dau-Probs...
29.11.2006, 16:41:13
Hi Nagelfar !

Auf Dich habe ich eh gehofft ;-).

ad 1: YUP, das wars... Danke.
Was ist eigentlich die Default DefaulClosingOperation ? HIDE_ON_CLOSE ?
Super jedenfalls!!!! DANKE!!!

ad 2:
Ziel ist jedenfalls diverse Etikettendrucker anzusteuern.
Ich habe mir das so gedacht:

public class EtikettenDruck implements Printable {
	
	private static PrinterJob printerJob = PrinterJob.getPrinterJob();
	private static PageFormat pageFormat = printerJob.defaultPage();

	private static final int ETIKETT_FONTSIZE=14;
	
	private static int jobNr = 0;
....

	
	public static void showPrinterDialog() {
		printerJob.printDialog();
	}

	public static void showPageDialog() {
		pageFormat = printerJob.pageDialog(pageFormat);
	}

	public static void setzePaperNachEtikettenFormat()
	{
		Paper paper = pageFormat.getPaper();
		EtikettenFormat etikettenFormat = Zustaende.getEtikettenFormat();
		
		paper.setImageableArea(
				etikettenFormat.getEtikettLinkerRandInPoints(), 
				etikettenFormat.getEtikettObererRandInPoints(),
				etikettenFormat.getEtikettBreiteInPoints(),
				etikettenFormat.getEtikettHoeheInPoints()
				);
		pageFormat.setPaper(paper);
	}	
...
	public int print(Graphics g, PageFormat pageformat, int page)
	{
		float wrappingWidth;
		EtikettenFormat etikettenFormat = Zustaende.getEtikettenFormat();
			
		if ( page >= seitenanzahl)
			return Printable.NO_SUCH_PAGE;
					
		Point2D point = new Point2D.Float();
		Font boldFont = new Font("Monospaced", Font.BOLD, ETIKETT_FONTSIZE);
		Font normFont = new Font("Monospaced", Font.PLAIN, ETIKETT_FONTSIZE);
		
		wrappingWidth = etikettenFormat.getEtikettBreiteInPoints();
				
		point.setLocation(etikettenFormat.getEtikettLinkerRandInPoints(),etikettenFormat.getEtikettObererRandInPoints());
		
		Graphics2D g2d = (Graphics2D) g;
		
		g2d.setColor(Color.BLACK);
		
		g2d.setFont(boldFont);
		schreibWrappedText(this.plz + "-" + this.ort + " " + this.tour, g2d, (Point2D.Float) point, wrappingWidth);
		
		g2d.setFont(normFont);
		schreibWrappedText(this.firma, g2d, (Point2D.Float) point, wrappingWidth);
		schreibWrappedText(this.adresse, g2d, (Point2D.Float) point, wrappingWidth);

		ZeichneBarcode.zeichne(g2d, this.sendungsnummer,(int)point.getX(), (int) point.getY(), normFont.getSize()*2); 

		/*
		 * Barcode draufklatschen
		 */
		//ZeichneBarcode.zeichne(g, this.sendungsnummer,xpos,ypos);
		
		//return Printable.PAGE_EXISTS;
		return PAGE_EXISTS;
	}
	private void schreibWrappedText(String text, Graphics2D g2d, Point2D.Float point, float wrappingWidth)	
	{	
		AttributedString as = new AttributedString(text);
		as.addAttribute(TextAttribute.FONT, g2d.getFont());
		AttributedCharacterIterator styledText = as.getIterator();
		LineBreakMeasurer measurer = new LineBreakMeasurer(styledText, g2d.getFontRenderContext());
		
		float x = (float) point.getX();
		float y = (float) point.getY();
		
		while (measurer.getPosition() < styledText.getEndIndex()) {
	    	TextLayout layout = measurer.nextLayout(wrappingWidth);

	         y += (layout.getAscent());
	         float dx = layout.isLeftToRight() ?
	             0 : (wrappingWidth - layout.getAdvance());

	         layout.draw(g2d, x + dx, y);
	         y += layout.getDescent() + layout.getLeading();
	     }
		point.setLocation(x,y);		
	}
}


Grundsätzlich startet die App (natürlich parametrisierbar) mit dem Standarddrucker und einem Etikettenformat - und ruft setzePaperNachEtikettenFormat() auf.

Ich konnte das Problem mal wie folgt einschränken:

Das Umsetzen des Etikettenformats klappt mal soweit - selbst wenn ich in meinen Etikettenformaten nur 1mm Randabstand habe...

AAAABER:
Wenn man das ganze über showPageDialog macht - klappts nicht.
Wenn man dort 1mm "manuell" einstellt - und es nochmal aufruft - kommen wieder 10mm... ARGH!
Ist das nur ein Problem von dem Systemabhängigen Userinterface ???


Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung