ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-12-09 05:04:32  阅读:380  来源: 互联网

标签:jtextpane rtf printing java


我正在尝试使用JTextPane将一些简单的RTF格式的文本打印到激光打印机.

在软件PDF打印机(FreePDF XP)上,结果看起来不错,但是当打印到实际打印机上时,文本在其格式化部分之间没有适当的空格.

编辑:我已经上传了示例输出(底部是扫描的打印输出)

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

在我看来,Graphics对象开始绘制RTF代码的各个部分时出现问题.好像无法找出正确放置每个零件的位置(X坐标).

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

使用的简单测试代码:

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();
  }
}

解决方法:

欢迎来到地狱.停留片刻 :-)

Java使用一些复杂的代码来布局打印机的文本(因此,它不会发送带有粗体的打印“文本”,而是选择“ Times-Bold”,将光标移至x,y,绘制字母“ T”,移至x2,y,画出字母“ e”,…`

您的问题是Java和打印机对字符的宽度有不同的想法.如果仔细观察,粗体字“文本”的字母会有些宽.

你怎么解决呢?尝试使用其他字体,直到它起作用为止.我不知道使用Java打印API下载轮廓字体的任何方法.

或使用PDFBox自己生成PDF.

[EDIT] Java不是DTP系统.印刷支持是最基本的.

如果需要更多,请考虑使用OpenOffice从RTF转换为PDF以进行打印(请参见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.

标签:jtextpane,rtf,printing,java
来源: https://codeday.me/bug/20191209/2096449.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有