1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.black);
int fontHeight = g2.getFontMetrics().getHeight();
int fontDescent = g2.getFontMetrics().getDescent();
// Laisser de l'espace pour le numero de page
double pageHeight = pageFormat.getImageableHeight() - (3*fontHeight);
double pageWidth = pageFormat.getImageableWidth();
double tableWidth = tableToPrint.getColumnModel().getTotalColumnWidth();
double scale = 1;
if (tableWidth >= pageWidth) {
scale = pageWidth / tableWidth;
}
double headerHeightOnPage = tableToPrint.getTableHeader().getHeight() * scale;
double tableWidthOnPage = tableWidth * scale;
double oneRowHeight = (tableToPrint.getRowHeight() + tableToPrint.getRowMargin()) * scale;
int numRowsOnAPage = (int) ((pageHeight - headerHeightOnPage) / oneRowHeight);
double pageHeightForTable = oneRowHeight * numRowsOnAPage;
int totalNumPages = (int) Math.ceil(((double) tableToPrint.getRowCount()) / numRowsOnAPage);
if (pageIndex >= totalNumPages)
return NO_SUCH_PAGE;
g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
// en bas au centre Pied de page
g2.drawString("Page : " + (pageIndex + 1), (int) pageWidth / 2 - 35, (int) (pageHeight
+ fontHeight - fontDescent));
g2.translate(0f, headerHeightOnPage);
g2.translate(0f, -pageIndex * pageHeightForTable);
// si cette partie de la page est plus petite
// que la taille disponible, alors découper les contours appropriés
if (pageIndex + 1 == totalNumPages) {
int lastRowPrinted = numRowsOnAPage * pageIndex;
int numRowsLeft = tableToPrint.getRowCount() - lastRowPrinted;
g2.setClip(0, (int) (pageHeightForTable * pageIndex), (int) Math.ceil(tableWidthOnPage),
(int) Math.ceil(oneRowHeight * numRowsLeft));
}
// sinon découper la zone disponible toute entière
else {
g2.setClip(0, (int) (pageHeightForTable * pageIndex), (int) Math.ceil(tableWidthOnPage),
(int) Math.ceil(pageHeightForTable));
}
g2.scale(scale, scale);
tableToPrint.paint(g2);
// dessiner les entêtes des colonnes en haut.
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);
tableToPrint.getTableHeader().paint(g2);
// Ca c'est moi qui l'ai rajouté et biensur cela ne fonctionne pas....
g2.translate(0f, headerHeightOnPage);
g2.translate(0f, -pageIndex * pageHeightForTable);
// en haut au centre
g2.drawString("EN-TETE ", (int) pageWidth / 2 - 35, fontHeight);
return Printable.PAGE_EXISTS; |
Partager