を使用して、単純な RTF 形式のテキストをレーザー プリンターに出力しようとしていJTextPane
ます。
結果は、ソフトウェア PDF プリンター (FreePDF XP) では問題なく表示されますが、実際のプリンターで印刷すると、テキストの書式設定された部分の間に適切なスペースがありません。
編集:出力例をアップロードしました(下はスキャンされた印刷物です)
例 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();
}
}