Imprimer avec une résolution autre que 72dpi
Bonjour,
après un mois de recherche :roll:, je n'arrive toujours pas à imprimer une image en 150dpi.
Es-ce possible en JAVA, d'avoir autre chose que du 72dpi ?
Oui j'ai lu le document de Bruno RICHETON. Merci à lui pour cette étude. Mais je ne cherche pas à imprimer un rectangle, mais une image.
Mon programme arrive à faire cracher mon imprimante, 2 types d'image:
- une image en 150dpi... mais que dans le quart supérieur gauche de la feuille
- une image en 300 dpi qui occupe le quart supérieur gauche de la feuille.
J'en conclus qu'il y a quelque chose qui limite la zone d'impression...mais quoi ? Un peu de code pour vous expliquer mon problème:
* Dans la classe pricipale:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
private PrinterJob imprimeurPage = PrinterJob.getPrinterJob();;
private GMO_ImprimeImage gemoImprimePanel = new GMO_ImprimeImage();
// C'est ma classe qui s'occupe de l'impression d'une BufferedImage
/.../
public void imprimeBImage( BufferedImage imageImprimable )
{
PrintRequestAttributeSet optionsImpression;
gemoImprimePanel.metImagelImpression( imageImprimable ); // Transmets l'image qu'il va falloir imprimer
imprimeurPage.setPrintable( gemoImprimePanel ); // Déclare ma classe d'impression au PrinterJob
optionsImpression = new HashPrintRequestAttributeSet();
optionsImpression.add( new PrinterResolution( 150, 150, PrinterResolution.DPI ));
try { imprimeurPage.print( optionsImpression ); }
catch ( Exception pE )
{ SystemOut( pE.getMessage()); } |
* Ma classe de gestion de l'impression:
Code:
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
| public class GMO_ImprimeImage implements Printable
{
/.../
@Override
public int print( Graphics gContexte, PageFormat pageJava, int index_page ) throws PrinterException
{
Graphics2D g2D;
Rectangle limitesContexte;
int y_pix_doc, x_pix_doc, y0_doc, x0_doc, y_pix_imprimable, x_pix_imprimable;
double ratio;
if( index_page > 0 || bImageImpression == null ) // bImageImpression correspond à la BufferedImage à imprimer, transmise à la classe
return Printable.NO_SUCH_PAGE; // Plus rien à imprimer
y_pix_doc = bImageImpression.getHeight(); // Nombre de pixels du document à imprimer
x_pix_doc = bImageImpression.getWidth();
/.../
// Création du contexte graphique à imprimer:
g2D = (Graphics2D)gContexte;
// Si je mets les 2 lignes suivantes, j'ai toute l'image mais en 300dpi
ratio = pageJava.getImageableHeight() / y_pix_doc;
g2D.scale( ratio, ratio );
g2D.translate( 150, 150 ); // Translation du graphique vers la zone imprimable
g2D.drawImage( bImageImpression, 0, 0, null );
} |
Quelques dimensions:
- L'image à imprimer fait 939 px de large, 1440 px de haut, ce qui correspond à 6,25 pouces x 9,6 pouces en 150dpi
- PageFormat pageJava indique pour un PrinterJob à 150 dpi:
1239 px de large, 1753 px de haut, auxquelles il faut retirer les marges.
En tout cas, c'est suffisant pour contenir l'image.
Quelqu'un a-t-il une idée sur le sujet ?
Merci.