PDA

Visualizza la versione completa : [JAVA] Stampa di un documento


newtel
01-03-2005, 18:09
Ciao ragazzi...
...ho delle difficoltà nell' implementare una classe che mi dia la possibilità di stampare il contenuto di una tabella in modo dinamico...

Ho letto diversi articoli che parlavano della classe java.awt.print
ma sono un pochino confuso ????...

...devo almeno sapere quali sono i passi fondamentali da seguire...
...un' esempietto...un' aiutino...ufff...

Dovrei arrivare ad avere un' oggettino che esegue la qry che gli passo, e stampa direttamente (stampa a modulo continuo...come faccio????)...
...aspetto con fiducia...ciao ciao...

newtel
02-03-2005, 10:20
...dai ragazzi nessuna idea???

mcolombara
02-03-2005, 17:47
tutorial / esempio semplice:

http://mindflavor.altervista.org/articles/ita/javaprint/javaprint.html

Andrea1979
02-03-2005, 17:57
http://java.sun.com/developer/onlineTraining/Programming/JDCBook/advprint.html#pe

superpelo
04-12-2005, 20:31
Seguendo il tutorial java ho implementato una classe che estende la JTable ed è stampabile; ho però un inconveniente: mentre tento di lanciare la stampa il pc si impalla e il metodo print() entra in un ciclo infinito.

Se cambio il metodo print con un altro di test invece riesco a stampare una stringa, quindi il problema non risiede nell'errata invocazione del metodo.

Sapete come risolvere questo maledetto problema? :dhò: :dhò:

Ecco il codice della classe (il metodo print è copiato direttamente dal tutorial consigliato nel post precedente):


import javax.swing.table.*;
import javax.swing.*;

//Per Stampa
import java.awt.print.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.Dimension;

public class ClientiJTable extends JTable implements Printable{
public ClientiJTable(){
TableModel dataModel = new AbstractTableModel(){
public int getColumnCount(){
return 5;
}
public int getRowCount(){
return 100;
}
public Object getValueAt(int row, int col){
return new Integer(row*col);
}
};
this.setModel(dataModel);

RepaintManager.currentManager(this).setDoubleBuffe ringEnabled(false);
}


public int print(Graphics g, PageFormat pageFormat,int pageIndex) throws PrinterException {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.black);
int fontHeight=g2.getFontMetrics().getHeight();
int fontDesent=g2.getFontMetrics().getDescent();

//leave room for page number
double pageHeight = pageFormat.getImageableHeight()-fontHeight;
double pageWidth = pageFormat.getImageableWidth();
double tableWidth = (double)this.getColumnModel().getTotalColumnWidth( );
double scale = 1;
if (tableWidth >= pageWidth) {
scale = pageWidth / tableWidth;
}

double headerHeightOnPage = this.getTableHeader().getHeight()*scale;
double tableWidthOnPage = tableWidth*scale;
double oneRowHeight = (this.getRowHeight()+this.getRowMargin())*scale;
int numRowsOnAPage = (int)((pageHeight-headerHeightOnPage)/oneRowHeight);
double pageHeightForTable=oneRowHeight*numRowsOnAPage;
int totalNumPages = (int)Math.ceil(((double)this.getRowCount())/numRowsOnAPage);
if(pageIndex>=totalNumPages) {
return NO_SUCH_PAGE;
}

g2.translate(pageFormat.getImageableX(),pageFormat .getImageableY());

//bottom center
g2.drawString("Page: "+(pageIndex+1),(int)pageWidth/2-35,(int)(pageHeight+fontHeight-fontDesent));
g2.translate(0f,headerHeightOnPage);
g2.translate(0f,-pageIndex*pageHeightForTable);

//If this piece of the table is smaller
//than the size available,
//clip to the appropriate bounds.
if (pageIndex + 1 == totalNumPages) {
int lastRowPrinted = numRowsOnAPage * pageIndex;
int numRowsLeft = this.getRowCount() - lastRowPrinted;
g2.setClip(0,(int)(pageHeightForTable * pageIndex),(int) Math.ceil(tableWidthOnPage),(int) Math.ceil(oneRowHeight*numRowsLeft));
}
//else clip to the entire area available.
else{
g2.setClip(0,(int)(pageHeightForTable*pageIndex),( int) Math.ceil(tableWidthOnPage),(int) Math.ceil(pageHeightForTable));
}

g2.scale(scale,scale);
this.paint(g2);
g2.scale(1/scale,1/scale);
g2.translate(0f,pageIndex*pageHeightForTable);
g2.translate(0f, -headerHeightOnPage);
g2.setClip(0, 0, (int) Math.ceil(tableWidthOnPage), (int)Math.ceil(headerHeightOnPage));
g2.scale(scale,scale);
this.getTableHeader().paint(g2);
//paint header at top

return Printable.PAGE_EXISTS;
}

/*
public int print(Graphics grap,PageFormat pageFormat, int pageIndex) throws PrinterException{
if(pageIndex > 0)
return NO_SUCH_PAGE;
grap.drawString("Prova di stampa!", (int)pageFormat.getImageableX(),(int)pageFormat.ge tImageableY()+5);
grap.setColor(Color.blue);
grap.drawLine((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY(),(int)pageFormat.ge tImageableWidth(),(int)pageFormat.getImageableHeig ht());
return PAGE_EXISTS;
}
*/
}


:cry:

superpelo
06-12-2005, 13:03
Vorrei riuscire a stampare una JTable.. nessuno sa come si fa?

:dhò:

Loading