Я пишу службу на стороне локального сервера, которая будет принимать имя принтера и другие входы из приложения пользовательского интерфейса и распечатать 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. Я уже потратил около недели на это, но все еще не могу решить проблему. как исправить это или что может быть решением?
печати PDF через javax.print преобразует его к официальному большинству принтеров не поддерживаются. Я попробовал прочитать pdf-файл и распечатать его, но он никогда не работал для меня –