How to print a hard copy of JTextPane with the text "text / rtf"?

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()); /* 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(); } } 
+3
source share
1 answer

Welcome to Hell. Stay on time :-)

Java uses complex code to compose text for the printer (therefore, it does not send print "Text" with a bold font , but select Times-Bold , Move the cursor to x,y , Draw the letter "T" , Move to x2,y , draws the letter "e", ... `

Your problem is that Java and your printer have different ideas about how wide the characters are. If you look closely, the letters of the bold Text Text will be scattered across the width.

How can you solve this? Try using a different font until it works. I do not know how to load graphic fonts using the Java print API.

Or use PDFBox to create PDF files yourself.

[EDIT] Java is not a DTP system. Printing support is rudimentary at best.

If you need more, consider using OpenOffice to convert from RTF to PDF for printing (see Is there a free way to convert RTF to PDF? And How to use OpenOffice in server mode as a multi-threaded service? ).

Or use OpenOffice as a text box .

+3
source

Source: https://habr.com/ru/post/905206/


All Articles