Печать вывода html на принтер в приложении сервера

Я пишу службу на стороне локального сервера, которая примет имя принтера и другие входные данные из приложения пользовательского интерфейса и распечатает файл html на желаемом сетевом принтере. это не настольное приложение. У меня есть обработанный HTML-файл, который я читаю в строку и хочу, чтобы его вывод был отправлен на нужный принтер.

Один из способов, который я смог найти, - это создать изображение, прочитав его в JEditorPane(хотя использование свингового класса не очень удобно), а затем сохранить изображение, которое затем отправляется на принтер. Но происходит сбой, когда 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 ответ

Хотя вопрос кажется старым, вы можете взглянуть на этот вопрос. По сути, он преобразует HTML в PDF, а затем вы печатаете PDF... надеюсь, это поможет

Другие вопросы по тегам