3

UIアプリケーションからプリンター名やその他の入力を受け取り、htmlファイルを目的のネットワークプリンターに印刷するローカルサーバー側のサービスを作成しています。デスクトップアプリケーションではありません。文字列に読み取っている処理済みの html ファイルがあり、その出力を目的のプリンターに送信します。

私が見つけた1つの方法は、画像をJEditorPaneに読み込んで作成し(swingクラスを使用するのは良い方法ではありません)、画像を保存してからプリンターに送信することです。ただし、html にタグがあり、そのイメージが html によって作成されたイメージ内にレンダリングされていない場合は失敗します。誰かが私の問題を解決できる方法で私を助けてくれますか? プリンターはポストスクリプトもサポートできます。

これが私のアプローチです

protected void generateDoc(DataObj data) {
DocFlavor dsc =
        DocFlavor.INPUT_STREAM.PNG;

   // get the html file's contents
   String receipt =
       getFileContents("Receipt.html");

   // process the html contents and insert the data details
    receipt = processHTMLContents(receipt, data);

    // create image of the receipt
    createReceiptImage(receipt);

    InputStream is =
        null;
    try {
        is =
            new FileInputStream(new File("testingToday.png")); // the same image which was created below
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    // create the doc to be sent to the printer
    Doc doc =
        new SimpleDoc(is, dsc, null);

    return doc;
}

/**
 * Create an image of the html receipt.
 * @param htmlReceipt processed html receipt
 * @return
 * @throws InterruptedException
 */
protected void createReceiptImage(String htmlReceipt) throws InterruptedException {
    JEditorPane pane =
        new JEditorPane();
    //pane.setEditable(false);
    pane.setEditorKit(new HTMLEditorKit());
    pane.setContentType("text/html");
    pane.setText(htmlReceipt);
    pane.setSize(650, 850);
    pane.setBackground(Color.white);

    // Create a BufferedImage
    BufferedImage image =
        new BufferedImage(pane.getWidth(), pane.getHeight(),
            BufferedImage.TYPE_INT_ARGB);
    Graphics2D g =
        image.createGraphics();

    // Have the image painted by SwingUtilities
    JPanel container =
        new JPanel();
    SwingUtilities.paintComponent(g, pane, container, 0, 0, image
        .getWidth(), image.getHeight());
    g.dispose();


    ImageIO.write(image, "PNG", new File("testingToday.png")); // this would be replaced by a relative network location

}

このドキュメントはプリンタに送信されます。ただし、これはスイング クラスであり、html 内の画像をレンダリングできないため、望ましいアプローチではありません。私はすでに約1週間費やしていますが、まだ解決策を見つけることができません. これを修正する方法または解決策は何ですか?

4

1 に答える 1

0

質問は古いようですが、この質問を見ることができます..基本的にはHTMLをPDFに変換してからPDFを印刷します...これが役立つことを願っています

于 2012-09-14T11:12:48.767 に答える