package printing; import view.PrintView; import java.awt.print.Printable; import javax.swing.JTextPane; import java.awt.Graphics; import java.awt.print.PageFormat; import java.awt.print.PrinterException; import javax.swing.plaf.basic.BasicTextUI; import javax.swing.text.Element; import javax.swing.text.View; public class PrintableJTextPane implements Printable { JTextPane textPane; PrintView printView; public PrintableJTextPane(JTextPane atextPane) { textPane = atextPane; } public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { graphics.translate((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY()); int wPage = (int)pageFormat.getImageableWidth(); int hPage = (int)pageFormat.getImageableHeight(); graphics.setClip(0, 0, wPage, hPage); if (printView == null) { BasicTextUI btui = (BasicTextUI)textPane.getUI(); View root = btui.getRootView(textPane); Element element = textPane.getDocument().getDefaultRootElement(); printView = new PrintView(element, root, wPage, hPage); } boolean bContinue = printView.paintPage(graphics, hPage, pageIndex); System.gc(); if (bContinue) { return PAGE_EXISTS; } else { printView = null; return NO_SUCH_PAGE; } } }