J'essaie d'imprimer du texte au format RTF simple sur une imprimante laser en utilisant un JTextPane
.Comment imprimer correctement une copie papier d'un JTextPane avec du contenu "text/rtf"?
Le résultat semble correct sur une imprimante PDF logicielle (FreePDF XP), mais le texte ne dispose pas d'un espace approprié entre ses parties formatées lors de l'impression sur une imprimante réelle.
Edit: J'ai téléchargé un exemple de sortie (Le fond est l'impression numérisée)
Example http://ompldr.org/vNXo4Zg/output.png
Il me semble qu'il ya un problème avec l'objet Graphics commence à peindre les parties indiviual du code RTF. Comme si elle ne pouvait pas savoir où placer correctement chaque partie (la coordonnée X). Dois-je fournir une sorte de traduction de système de coordonnées?
Le code de test simple utilisé:
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();
}
}
Mon problème est que l'utilisateur peut choisir la police qui est utilisée et que les utilisateurs s'attendent à ce qu'il soit imprimé de la même manière qu'il est montré dans l'application. –
S'il vous plaît voir mes modifications. –
J'ai eu un problème qui est étroitement liée à la vôtre: http://stackoverflow.com/questions/8744836/java-print-api-space-character-incorrectly-printed-using-monospaced-courier-n. Je devais écrire mon propre composant d'impression. S'appuyer sur les composants Swing semble être difficile car ils contiennent des bugs comme celui-ci: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6784397 –