我需要window.print()
用 java 支持 bean 进程更改 javascript 命令。
在这里,我使用的是 Jsf1.2
作为程序化,打印任何网页,
我们使用 window.print()。打开一个菜单来选择打印机打印页面。
现在我需要用java bean方法调用压缩这个过程。但无论如何它对我不起作用。
我真正需要的是,当我点击网页上的打印按钮时。它直接在选定的打印机上打印(此打印机选择在 backing bean 中使用PrintServiceLookup.lookupPrintServices
方法完成。此选择适合我。)
这是我question
的如何在按钮单击打印时在 java bean 中获取我的整页内容。
这里还有一个问题,
当我使用下面的代码进行简单的字符串打印时,它在编译时和运行时显示代码中没有错误,但在打印机上打印时显示错误(下图)。我从在线研究中获得此代码,我正在使用网络打印机。
打印代码::
try{
System.out.println("getHtmlData = "+getHtmlData());
PrintService[] printServices;
String testData = "Hello World my first java print";
InputStream is = new ByteArrayInputStream(testData.getBytes());
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
System.out.println("getPrinter() = "+getPrinter()); // here i give my printer name
printServiceAttributeSet.add(new PrinterName(getPrinter(), null));
printServices = PrintServiceLookup.lookupPrintServices(null, printServiceAttributeSet);
System.out.println("printServices len = "+printServices.length+" ::: name = "+printServices[0].getName()); ///to verify its my selected printer or not
PrintService service = printServices[0];
DocFlavor[] flavors = service.getSupportedDocFlavors() ;
//display : selected printers flavors
for (int i = 0; i < flavors.length; i++) {
System.out.println("\t" +flavors[i]);
}
Doc doc= new SimpleDoc(is, flavor, null);
DocPrintJob job = service.createPrintJob();
//PrintJobWatcher pjDone = new PrintJobWatcher(job);
// Print it
job.print(doc, null);
is.close();
System.out.println("print Done");
}catch (Exception e) {
System.out.println("error 1 "+e.toString());
e.printStackTrace();
}
我知道这听起来像是间谍过程,但我需要从 java bean 打印页面。
更新1:
- 我可以在 js 中获取页面内容
document.documentElement.outerHTML
(实际上我不想使用 js 来传递 html 内容。如果没有找到任何东西,这可能是最后一个选项)。然后将它从 inputhidden 传递给 bean。但是现在如何使用此String
内容进行打印。