3

を使用して、単純な 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();
  }
}
4

1 に答える 1

3

地獄へようこそ。少しまって :-)

Java は複雑なコードを使用して、プリンターのテキストをレイアウトします (したがって、送信はしませんprint "Text" with a bold fontselect Times-BoldMove the cursor to x,y, Draw the letter "T", Move to x2,y, 文字「e」を描画します, ...`

あなたの問題は、Java とプリンターが文字の幅について異なる考えを持っていることです。よく見ると、太字のテキストの文字Textが少し離れています。

どうすればこれを解決できますか? うまくいくまで別のフォントを試してください。Java 印刷 API を使用してアウトライン フォントをダウンロードする方法がわかりません。

または、PDFBoxを使用して自分で PDF を生成します。

[編集] Java は DTP システムではありません。印刷サポートはせいぜい初歩的なものです。

さらに必要な場合は、OpenOffice を使用して印刷用に RTF から PDF に変換することを検討してください (RTF を PDF に無料で変換する方法はありますか?およびOpenOffice をサーバー モードでマルチスレッド サービスとして使用するにはどうすればよいですか? を参照してください)。

またはOpenOffice をテキスト ペインとして使用します

于 2010-11-02T15:21:40.593 に答える