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 !