Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Chris Miller on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Printing in Java

Status
Not open for further replies.

brinker

Programmer
May 31, 2001
48
CA
Hello all,

I am having some trouble printing the contents of a string using Java. I am using the syntax below. It seems to work well if the string consists of normal characters, but malfunctions if the string contains special characters such as '\n', '\t' ,etc. As most documents contain these characters, I was wondering if there is a way aroung this.

thanks,

Brinker

import java.awt.print.*;
import java.text.*;

/**
* The PrintArea application expands on the
* PrintExample application in that it images
* text on to the single page printed.
*/
public class PrintArea implements Printable {
private AttributedString mStyledText;

public PrintArea(String s)
{
mStyledText = new AttributedString(s);
PrinterJob printerJob = PrinterJob.getPrinterJob();

/* Build a book containing pairs of page painters (Printables)
* and PageFormats. This example has a single page containing
* text.
*/
Book book = new Book();
book.append(this, new PageFormat());

/* Set the object to be printed (the Book) into the PrinterJob.
* Doing this before bringing up the print dialog allows the
* print dialog to correctly display the page range to be printed
* and to dissallow any print settings not appropriate for the
* pages to be printed.
*/
printerJob.setPageable(book);

/* Show the print dialog to the user. This is an optional step
* and need not be done if the application wants to perform
* 'quiet' printing. If the user cancels the print dialog then false
* is returned. If true is returned we go ahead and print.
*/
boolean doPrint = printerJob.printDialog();
if (doPrint) {

try {

printerJob.print();

} catch (PrinterException exception) {

System.err.println("Printing error: " + exception);

}

}

}


public int print(Graphics g, PageFormat format, int pageIndex) {

/* We'll assume that Jav2D is available.
*/
Graphics2D g2d = (Graphics2D) g;

/* Move the origin from the corner of the Paper to the corner
* of the imageable area.
*/
g2d.translate(format.getImageableX(), format.getImageableY());

/* Set the text color.
*/
g2d.setPaint(Color.black);

/* Use a LineBreakMeasurer instance to break our text into
* lines that fit the imageable area of the page.
*/
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;

}
}
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top