I am trying to print some simple RTF-formatted text on a laser printer using JTextPane .
The result looks great on a software PDF printer (FreePDF XP), but the text does not have the proper space between the formatted parts when printing on a real printer.
Edit: I uploaded sample output (below is a scanned listing)
Example http://ompldr.org/vNXo4Zg/output.png
It seems to me that the problem with the Graphics object is starting to draw separate parts of the RTF code. As if he could not understand where to place each part correctly (X coordinate).
Should I provide some kind of translation of the coordinate system?
Simple test code:
import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import javax.swing.JFrame; import javax.swing.JTextPane; class MyTextComp extends JTextPane implements Printable { public MyTextComp() { setContentType("text/rtf"); setText("{\\rtf1 HelloWorld! \\par {\\i This} is formatted {\\b Text}.}"); } public void paintComponent(Graphics g) { super.paintComponent(g); } public int print(Graphics g, PageFormat pf, int pIndex) { if(pIndex > 0) return Printable.NO_SUCH_PAGE; Graphics2D g2d = (Graphics2D)g; g2d.translate(pf.getImageableX(), pf.getImageableY()); printAll(g); return Printable.PAGE_EXISTS; } } public class TextCompPrint extends JFrame { public static void main(String[] args) throws PrinterException { TextCompPrint myFrame = new TextCompPrint(); MyTextComp myComp = new MyTextComp(); myFrame.add(myComp, BorderLayout.CENTER); myFrame.setSize(200, 200); myFrame.setVisible(true); PrinterJob pj = PrinterJob.getPrinterJob(); pj.setPrintable(myComp); pj.print(); } }
source share