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 :
 - import java.awt.font.*;
 - import java.awt.geom.Point2D;
 - import java.awt.print.*;
 - import java.awt.*;
 - import java.text.*;
 - class imprimable implements Printable
 - {
 - private String texte;
 - private AttributedString mStyledText;
 - public imprimable(boolean option,String texte)
 - {
 - this.texte = texte;
 - mStyledText = new AttributedString(texte);
 - }
 - public void imprimer()
 - {
 - PrinterJob pj = PrinterJob.getPrinterJob();
 - PageFormat pf = new PageFormat();
 - Book book = new Book();
 - pf = pj.pageDialog(pf);
 - book.append(new imprimable(false, texte),pf);
 - pj.setPageable(book);
 - if(pj.printDialog())
 - {
 - try
 - {
 - pj.print();
 - }
 - catch(Exception e)
 - {
 - System.out.println(e);
 - }
 - }
 - }
 - public int print(Graphics g, PageFormat format, int pageIndex)
 - {
 - Graphics2D g2d = (Graphics2D)g;
 - g2d.translate(format.getImageableX(),format.getImageableY());
 - g2d.setPaint(Color.black);
 - Point2D.Float pen = new Point2D.Float();
 - AttributedCharacterIterator charIterator = mStyledText.getIterator();
 - LineBreakMeasurer measurer=new LineBreakMeasurer(charIterator,g2d.getFontRenderContext());
 - float wrappingWidth = (float) format.getImageableWidth();
 - while (measurer.getPosition() < charIterator.getEndIndex())
 - {
 - TextLayout layout = measurer.nextLayout(wrappingWidth);
 - pen.y += layout.getAscent();
 - float dx = layout.isLeftToRight()? 0 : (wrappingWidth - layout.getAdvance());
 - layout.draw(g2d,pen.x+dx,pen.y);
 - pen.y += layout.getDescent()+layout.getLeading();
 - }
 - return Printable.PAGE_EXISTS;
 - }
 - }
 
  | 
Et la classe d'éxécution :
Code :
 - public class testmodif_texte
 - {
 - public static void main(String[] args)
 - {
 - lireFichier lis=new lireFichier(); //une classe qui me permet de passer le contenu de mon fichier texte en String
 - String fichiertxt=lis.lirefichier("D:\\test\\imptemporaire.txt" );
 - test p = new test(false,fichiertxt);
 - p.imprimer();
 - }
 - }
 
  | 
 
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 !