Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [java] problema stampa

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813

    [java] problema stampa

    ciao a tutti,
    sto facendo un modulo di stampa per fatture. Tutto funziona bene fino alla stampa.
    Ho creato un file png che è delle dimensioni di un A4 e vorrei che questo venisse messo nell'angolino in alto a sinistra della pagina.
    Quando stampo, invece, tutto viene spostato in un'area più interna della pagina, tagliando tutto.
    Speravo che su pageFormat ci stava qualcosa relativo ai marigini, ma non riesco a risolvere il problema.

    cosa posso fare affinché possa risolvere questo problema?

    vi ringrazio anticipatamente

    ps.: per non sprecare carta, sto stampando in pdf, credo che non sia questo il problema.
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    fornendoci prima una sferda di cristallo.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    Originariamente inviato da Andrea1979
    fornendoci prima una sferda di cristallo.
    se questa tua ironia è per intendere "mostra quel cavolo di codice" ecco qua, ma non è un granché.

    Quando si preme il tasto "Stampa"

    codice:
    public void actionPerformed(ActionEvent event)
    	{		
    		PrinterJob job = PrinterJob.getPrinterJob();
    		job.setPrintable(report);
    		
    		boolean print = job.printDialog();
    		
    		if (print)
    		{
    			try
    			{
    				job.print();
    			}
    			catch (PrinterException e)
    			{
    				JOptionPane.showMessageDialog(null, "Error", e.getMessage(), JOptionPane.ERROR_MESSAGE);
    			}
    		}
    	}
    report è un'instanza della classe Report (da me creata) che non fa altro che renderizzare tutto il suo contenuto a in cascata in questo modo:

    codice:
    @Override
    	public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
    			throws PrinterException
    	{
    		//graphics.translate((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY());
    		graphics.drawImage(render(), 0, 0, null);
    		
    		return pageIndex==0?(PAGE_EXISTS):NO_SUCH_PAGE;
    	}
    render restituisce solamente un'immagine. Non ha importanza come essa viene fatta, visto che l'anteprima di stampa è magnifica...
    ho messo quel commento su translate con la speranza che l'immagine venissa piazzata in alto a destra del foglio senza alcun padding/margine, ma non è suffiicente. Vorrei evitare di mettere coordinate negative. Anche perché l'immagine viene tagliata sui quattro lati
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Hysoka
    render restituisce solamente un'immagine. Non ha importanza come essa viene fatta, visto che l'anteprima di stampa è magnifica...
    ho messo quel commento su translate con la speranza che l'immagine venissa piazzata in alto a destra del foglio senza alcun padding/margine, ma non è suffiicente. Vorrei evitare di mettere coordinate negative. Anche perché l'immagine viene tagliata sui quattro lati
    Innanzitutto ora si sa, perlomeno, di che cosa stavi parlando, ovvero della Printing API di Java (nel tuo primo post questo non era chiaro ... tu potevi aver usato un altro framework specifico per stampa/reportistica).

    Per il fatto del translate, è corretto farlo. Cioè nel senso che se vuoi spostare gli assi in modo che (0,0) sia l'angolo alto/sinistro "stampabile" (considerando appunto i margini) allora certo che è corretto farlo.

    Nota solo una cosa: hai messo dei cast a int. Usa il graphics come Graphics2D che ha il translate(double, double), che è più appropriato in questo caso.

    Inoltre devi considerare una cosa importante. L'unità di misura predefinita (cioè per come è impostato il graphics per default) è 1/72 di pollice. Quindi se la tua immagine fosse larga es. 100 pixel, in stampa sarebbe larga circa 35,28 millimetri.

    Se vuoi che la immagine sia allineata al margine destro, allora tramite getImageableWidth() di PageFormat ti fai qualche calcolo per determinare il x da usare per disegnare la immagine allineata a destra.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    siamo d'accordo sulle unità di misure e tutto il resto. Il codice sopra genera esattamente questo (a parte i blur)


    [/URL]

    come potete bene vedere, lungo TUTTI i bordi l'immagine renderizzata è tagliata...Come posso azzerare tutti (eventuali) margini?
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Hysoka
    Come posso azzerare tutti (eventuali) margini?
    Scusa, non vorrei sembrare scortese ma a questo punto faccio una premessa che magari per te è banale: se stai facendo un layout grafico di stampa ben preciso dove loghi/testi devono stare in posizioni ben precise oppure "ancorati" ad un tot dai margini, in sostanza i margini del tuo layout li puoi imporre tu.
    Chiaramente le stampanti hanno dei margini "fisici" oltre cui non sono in grado materialmente di stampare. Ma in genere, specialmente per la parte in alto, sono margini piccoli, di pochi millimetri (ad esempio la mia HP 1022nw ha il margine fisico superiore di circa 4mm).
    Quindi se si stabilisce un buon margine per la tua grafica si può essere ragionevolmente certi che non sarà tagliata.

    Supponiamo che tu voglia disegnare la tua immagine nella parte in alto/destra a 10 millimetri dal bordo superiore e dal bordo destro.
    Innanzitutto calcoli i margini per avere i 'pt' (1/72 di pollice). 10 millimetri sono circa 28,35 pt. Quindi per disegnare la tua immagine passerai:

    codice:
    double x = pageFormat.getWidth() - puntiImmagine - 28.35;
    double y = 28.35;
    
    g2d.drawImage(img, x, y, null);
    dove puntiImmagine è la dimensione in pixel della tua immagine (se ti va bene l'equivalenza 1 pixel = 1/72 pollice)

    E nota, senza traslare gli assi, così (0,0) è proprio l'angolo in alto/sinistra del foglio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    Originariamente inviato da andbin
    Scusa, non vorrei sembrare scortese ma a questo punto faccio una premessa che magari per te è banale: se stai facendo un layout grafico di stampa ben preciso dove loghi/testi devono stare in posizioni ben precise oppure "ancorati" ad un tot dai margini, in sostanza i margini del tuo layout li puoi imporre tu.
    Chiaramente le stampanti hanno dei margini "fisici" oltre cui non sono in grado materialmente di stampare. Ma in genere, specialmente per la parte in alto, sono margini piccoli, di pochi millimetri (ad esempio la mia HP 1022nw ha il margine fisico superiore di circa 4mm).
    Quindi se si stabilisce un buon margine per la tua grafica si può essere ragionevolmente certi che non sarà tagliata.

    Supponiamo che tu voglia disegnare la tua immagine nella parte in alto/destra a 10 millimetri dal bordo superiore e dal bordo destro.
    Innanzitutto calcoli i margini per avere i 'pt' (1/72 di pollice). 10 millimetri sono circa 28,35 pt. Quindi per disegnare la tua immagine passerai:

    codice:
    double x = pageFormat.getWidth() - puntiImmagine - 28.35;
    double y = 28.35;
    
    g2d.drawImage(img, x, y, null);
    dove puntiImmagine è la dimensione in pixel della tua immagine (se ti va bene l'equivalenza 1 pixel = 1/72 pollice)

    E nota, senza traslare gli assi, così (0,0) è proprio l'angolo in alto/sinistra del foglio.
    non centra assolutamente quello che stai dicendo
    li ci mancano due dita a girare, altro che pochi millimetri

    Comunque ho risolto creando una nuova istanza della classe Paper

    grazie a tutti per la collaborazione
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Hysoka
    non centra assolutamente quello che stai dicendo
    Rispondo purtroppo solo ora. Sì in effetti il mio discorso, pur essendo corretto, non rispondeva alla tua questione. Ma dopotutto non potevo avere bene idea di come gestivi le "proprietà" di stampa (anzi, a vedere il codice che avevi postato posso/potevo pensare innanzitutto che usa il formato predefinito per la stampante selezionata, che quindi ... dipende).

    Mi spiace di non esserti stato particolarmente di aiuto.
    Saluti a tutti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.