代码之家  ›  专栏  ›  技术社区  ›  Jens Mühlenhoff

如何正确打印带有“text/rtf”内容的JTextPane的硬拷贝?

  •  3
  • Jens Mühlenhoff  · 技术社区  · 15 年前

    我想把一些简单的RTF格式的文本打印到 使用 JTextPane

    结果在软件PDF打印机(freepdfxp)上看起来不错,但在打印到真正的打印机时,文本的格式化部分之间没有适当的空间。

    我上传了一个示例输出(底部是扫描的打印输出)

    Example http://ompldr.org/vNXo4Zg/output.png

    我必须提供某种坐标系转换吗?

    使用的简单测试代码:

    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();
      }
    }
    
    1 回复  |  直到 11 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    欢迎来到地狱。待一会儿:-)

    Java使用一些复杂的代码来为打印机布局文本(因此它不会发送 print "Text" with a bold font 但是 select Times-Bold , Move the cursor to x,y Draw the letter "T" , Move to x2,y ,画字母“e”`

    Text 有点大。

    你怎么解决这个问题?尝试不同的字体,直到它工作。我不知道用Java打印API下载大纲字体的任何方法。

    或使用 PDFBox 自己生成PDF。

    [编辑] Java不是DTP系统。打印支持充其量只是初级的。

    Is there a free way to convert RTF to PDF? How can I use OpenOffice in server mode as a multithreaded service? ).

    或者 use OpenOffice as text pane .