2012-06-07 6 views
3

Я пишу службу на стороне локального сервера, которая будет принимать имя принтера и другие входы из приложения пользовательского интерфейса и распечатать html-файл на нужный сетевой принтер. это не настольное приложение. У меня есть обработанный 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 

}

и этот документ затем отправляется на принтер. но это не является желательным подходом, поскольку он является классом swing и не способен отображать изображения внутри html. Я уже потратил около недели на это, но все еще не могу решить проблему. как исправить это или что может быть решением?

ответ

0

Хотя вопрос кажется старым, вы можете посмотреть на этот question .. В основном это конвертирует HTML в PDF & то напечатать PDF ... надеюсь, что это помогает

+0

печати PDF через javax.print преобразует его к официальному большинству принтеров не поддерживаются. Я попробовал прочитать pdf-файл и распечатать его, но он никогда не работал для меня –