Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to correctly print out a hard copy of a JTextPane with "text/rtf" content?
    text
    copied!<p>I'm trying to print out some simple RTF-formatted text to a <strong>laser printer</strong> using a <code>JTextPane</code>.</p> <p>The result looks fine on a software PDF printer (FreePDF XP), but the text doesn't have proper space between it's formatted parts when print to a real printer.</p> <p><strong>Edit:</strong> I have uploaded an example output (The bottom is the scanned printout)</p> <p><a href="http://ompldr.org/vNXo4Zg/output.png" rel="nofollow noreferrer">Example http://ompldr.org/vNXo4Zg/output.png</a></p> <p>It seems to me that there is a problem with the Graphics object starting to paint the indiviual parts of the RTF code. As if it couldn't figure out where to correctly put each part (the X coordinate).</p> <p>Do I have to provide some kind of coordinate system translation?</p> <p>The simple test code used:</p> <pre><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 &gt; 0) return Printable.NO_SUCH_PAGE; Graphics2D g2d = (Graphics2D)g; g2d.translate(pf.getImageableX(), pf.getImageableY()); /* Now print the window and its visible contents */ 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(); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload