0

私が取り組んでいる Java プロジェクトでは、JavaPrintableインターフェイスを使用してハードウェア プリンターに何かを印刷する必要があります。オブジェクトは複数のページにまたがることができます。http://docs.oracle.com/javase/tutorial/2d/printing/index.htmlレッスンで指定されたガイドラインに従ってオブジェクトを変換しました。私のコードでは、私の印刷可能ファイルは 2 ページにまたがっています。メソッドにはprint、次のコードがあります。

// ...
if (pageIndex > amountOfPages) {
    return NO_SUCH_PAGE;
}
// ...

whereamountOfPagesはドキュメントがまたがるページ数でありpageIndex、メソッドを呼び出すときにシステムによって入力されるパラメーターでありprint、プリンターが印刷目的でそのページを要求していることを示します。同じ関数のさらに下では、ページの内容を印刷した後、失敗した場合に
備えて常に a で終了します。return PAGE_EXISTS;if(...)

ただし、実行時に、プリンターは最初のページの後で印刷を停止します。すべての return の前にログ メッセージを追加しましたが、句内の return にif到達していないことに気付きました。そのため、シグナルを受け取る前にプリンターが停止しNO_SUCH_PAGEます。

プリンターの属性を確認すると、エラーは発生していないと表示されます。私はかなり困惑しており、ジョブが実際に完了する前にプリンターが停止する理由、またはジョブが実際に完了する前に完了したと見なされる理由がわかりません。

この動作の理由を指摘できる何かを見た人はいますか?

ありがとう

4

1 に答える 1

0

Printable インターフェースを実装するときは、印刷するページ数を決定するロジックを実装する必要があります。 public int numPages(Graphics g,PageFormat pf) たとえば、このロジックに処理時間がかかる場合は、print が複数回呼び出される可能性があるため、回答を保存する必要があります。ページ。Print が呼び出さnumPages(...) れる可能性が高いため、計算を保存することをお勧めします。

Printable インターフェイスでは、各ページに何を書き込むかを認識している print メソッドを実装する必要があります。public int print(Graphics g, PageFormat pf, int page) throws PrinterException

複数行のテキストを印刷する場合は、class パッケージがorg.jfree.text役立つことがあります。Graphics の drawString メソッドはワード ラップを行わないため、時間を大幅に節約できます。例えば:

        TextBlock notesBlock = TextUtilities.createTextBlock(
              someLongString, plainFont, g2.getPaint());
        notesBlock.setLineAlignment(HorizontalAlignment.LEFT);
        notesBlock.draw(g2, indent, y, TextBlockAnchor.TOP_LEFT);

Printable を実装して、オブジェクトのリストのプリンター出力を生成する必要がありました。各オブジェクトの印刷出力は、ページの半分または数行程度で済みます。Oracle Java印刷チュートリアル/ドキュメントから必要なことのほとんどを学びましたが、それは苦労しました. 改ページをどこに配置するかを計算するのは最も難しい部分であり、実際、印刷用に行うのとほぼ同じコードを記述する必要がありました。私のプロジェクトのサンプル コードが必要な場合は、ここにさらに投稿できます。

于 2013-02-13T02:28:04.567 に答える