window.print()
Java バッキング Bean プロセスでJavaScript コマンドを変更する必要があります。
ここでは、Jsf1.2 を使用しています
プログラマティックとして、ウェブページを印刷し、
window.print() を使用します。これにより、ページを印刷するプリンターを選択するための1つのメニューが開きます。
今、私はこのプロセスを Java Bean メソッド呼び出しで圧縮する必要がありますが、とにかくうまくいきません。
私が実際に必要としているのは、ウェブページの印刷ボタンをクリックしたときです。選択したプリンターで直接印刷します(このプリンターの選択は、PrintServiceLookup.lookupPrintServices
メソッドを使用してバッキングBeanで行われます。この選択は私にとって適切に機能します。)
これは、question
印刷用にボタンをクリックしてJava Beanでページ全体のコンテンツを取得する方法です。
ここでもう1つ問題があります
以下のコードで単純な文字列印刷を行うと、コンパイル時と実行時にコードにエラーは表示されませんが、プリンターでの印刷中にエラーが表示されます(画像の下)。私はネットワーク プリンターを使用しているオンライン調査からこのコードを取得します。
印刷コード::
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
(実際には、htmlコンテンツを渡すためにjsを使用したくありません。これは、何も見つからない場合の最後のオプションです)。次に、inputhiddenからBeanに渡します。しかし今、このString
コンテンツを印刷に使用する方法。