I just used the Java 2D environment to get a nice printout. My code
looks like this: public class Model implements Printable { private static Font
fnt = new Font("Monospaced",Font.BOLD,12); public int print(Graphics g,
PageFormat pf, int pageIndex)
throws PrinterException {
// pageIndex 0 to 4 corresponds to page numbers 1 to 5.
if (pageIndex >= 1) return Printable.NO_SUCH_PAGE;
Graphics2D g2 = (Graphics2D) g;
g2.setFont(fnt);
g2.setPaint(Color.black);
g2.drawString("" + (pageIndex+1)+".", 480, 80);
String franPapperet = new String(""+View.papper.getText());
// TextLayout textlayout = new TextLayout(franPapperet, fnt,
g2.getFontRenderContext());
//New below AttributedString attributedString= new
AttributedString(franPapperet);
int y=90;
int x=90;
attributedString.addAttribute(
TextAttribute.FONT, fnt); // Get iterator for string
AttributedCharacterIterator characterIterator =
attributedString.getIterator();
// Get font context from graphics
FontRenderContext fontRenderContext =
g2.getFontRenderContext();
// Create measurer
LineBreakMeasurer measurer =
new LineBreakMeasurer(characterIterator,
fontRenderContext);
while (measurer.getPosition() <
characterIterator.getEndIndex()) {
// Get line
TextLayout textLayout =
measurer.nextLayout(440); // That is as far as I know the width
// Move down to baseline
y += textLayout.getAscent();
// Draw line
textLayout.draw(g2, x, y);
// Move down to top of next line
y += textLayout.getDescent() +
textLayout.getLeading();
} return Printable.PAGE_EXISTS;
}
} The problem is that the LineBreakMeasurer class (or is it partiallly the
AttributedString who is the bad guy) messes everything up. For example: Hi. My
Name is Linnea. SincerelyLinnea becomes: Hi. My Name is Linnea. Sincerely
Linnea. There is no way to keep tabs, spaces (more than one) or "\n" line feeds
in my printout. How do I override this? Or is there another way to print a
simple string?