Programmer une impression en java (ac saut de ligne)

Programmer une impression en java (ac saut de ligne) - Java - Programmation

Marsh Posté le 02-12-2009 à 19:49:18    

Bonjour,
 
Je suis en train de programmer une fonction impression dans le cadre d'un projet d'école. Elle marche mais l'impression ne prend pas en compte les passages à la ligne...
Sauriez vous me dire pourquoi ?
 
Voilà le code :
 

Code :
  1. import java.awt.font.*;
  2. import java.awt.geom.Point2D;
  3. import java.awt.print.*;
  4. import java.awt.*;
  5. import java.text.*;
  6. class imprimable implements Printable
  7. {
  8. private String texte;
  9. private AttributedString mStyledText;
  10. public imprimable(boolean option,String texte)
  11. {
  12. this.texte = texte;
  13. mStyledText = new AttributedString(texte);
  14. }
  15. public void imprimer()
  16. {
  17. PrinterJob pj = PrinterJob.getPrinterJob();
  18. PageFormat pf = new PageFormat();
  19. Book book = new Book();
  20. pf = pj.pageDialog(pf);
  21. book.append(new imprimable(false, texte),pf);
  22. pj.setPageable(book);
  23. if(pj.printDialog())
  24. {
  25. try
  26. {
  27. pj.print();
  28. }
  29. catch(Exception e)
  30. {
  31. System.out.println(e);
  32. }
  33. }
  34. }
  35. public int print(Graphics g, PageFormat format, int pageIndex)
  36. {
  37. Graphics2D g2d = (Graphics2D)g;
  38. g2d.translate(format.getImageableX(),format.getImageableY());
  39. g2d.setPaint(Color.black);
  40. Point2D.Float pen = new Point2D.Float();
  41. AttributedCharacterIterator charIterator = mStyledText.getIterator();
  42. LineBreakMeasurer measurer=new LineBreakMeasurer(charIterator,g2d.getFontRenderContext());
  43. float wrappingWidth = (float) format.getImageableWidth();
  44. while (measurer.getPosition() < charIterator.getEndIndex())
  45. {
  46. TextLayout layout = measurer.nextLayout(wrappingWidth);
  47. pen.y += layout.getAscent();
  48. float dx = layout.isLeftToRight()? 0 : (wrappingWidth - layout.getAdvance());
  49. layout.draw(g2d,pen.x+dx,pen.y);
  50. pen.y += layout.getDescent()+layout.getLeading();
  51. }
  52. return Printable.PAGE_EXISTS;
  53. }
  54. }


Et la classe d'éxécution :

Code :
  1. public class testmodif_texte
  2. {
  3. public static void main(String[] args)
  4. {
  5. lireFichier lis=new lireFichier(); //une classe qui me permet de passer le contenu de mon fichier texte en String
  6. String fichiertxt=lis.lirefichier("D:\\test\\imptemporaire.txt" );
  7. test p = new test(false,fichiertxt);
  8. p.imprimer();
  9. }
  10. }


 
A ce que j'ai compris le passage à la ligne se programme grâce à l'instruction LineBreakMeasurer. Pourtant même en programmant cette instruction, rien ne change, tout les lignes sont imprimées à la suite.
Donc voilà le code ça pourra toujours servir à quelqu'un et peut être que par chance une personne trouvera le hic ^^.
 
Merci d'avance !

Reply

Marsh Posté le 02-12-2009 à 19:49:18   

Reply

Marsh Posté le 03-12-2009 à 10:49:48    

Surement une étourderie mais ta classe d'exécution n'utilise pas la classe imprimable mais test
 
PS : il serait préférable de renommer tes classes en les faisant commencer par une majuscule, tu verras, le code est beaucoup plus facile à lire (surtout si tu as des méthodes qui ont le même nom)

Reply

Marsh Posté le 03-12-2009 à 11:39:41    

Bidem a écrit :

Surement une étourderie mais ta classe d'exécution n'utilise pas la classe imprimable mais test
 
PS : il serait préférable de renommer tes classes en les faisant commencer par une majuscule, tu verras, le code est beaucoup plus facile à lire (surtout si tu as des méthodes qui ont le même nom)


 
Oui pardon j'ai mal recopié mon code la bonne instruction est bien : imprimable p = new imprimable(false,fichiertxt);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed