1

Window.open() を使用して、生成された jasper pdf レポートを新しいタブで開くことができます。

Window.open("report.pdf?traceCode=" + traceCode, "_BLANK", "");

ボタンをクリックして PDF ファイルを印刷したい場合、どうすればよいですか? (Window.print() はページ全体を印刷します)

4

2 に答える 2

4

独自のクラスを作成し、アプリケーションで[印刷]ボタンをクリックすると、ネイティブの印刷メソッドを使用してWindow.Print()を呼び出すことができます。

GWT UIObjectは、この目的とメソッドに使用でき、文字列に変換されます。

public class NTPrint {
    /**
     * If true, use a Timer instead to print the internal frame
     */
    public static boolean USE_TIMER = true;

    /**
     * Time in seconds to wait before printing the internal frame when using Timer
     */
    public static int TIMER_DELAY = 1;

    public static native void it() /*-{ 
        $wnd.print(); 
    }-*/; 

    public static void it(String html) {
        try{
            buildFrame(html);
            if (USE_TIMER) {
                Timer timer = new Timer() {
                    public void run() {
                        printFrame();
                    }
                };
                timer.schedule(TIMER_DELAY * 1000);
            } else {
                printFrame();
            }
        }
        catch (Throwable exc) {
            CommonUtil.printStackTrace(exc);
            Window.alert(exc.getMessage());
        }
    }

    /**
     * This method will be called when you pass Widget without style.
     * @param uiObjects
     */
    public static void it( UIObject...uiObjects) { 
        StringBuffer objString= new StringBuffer();
        for(UIObject obj: uiObjects)
                objString.append(obj.toString());
            it("", objString.toString()); 
    } 

}

印刷ボタンのOnClick、

  /**
         * prints all forms
         * @param documentInfo
         */
        public static void printForms(List<FormTransaction> formTransactions, String documentInfo, List<CellTransaction> cellTransactionList, boolean isComment, Document document) {
                String style = "<link rel='styleSheet' type='text/css' href='v4workflow/css/style.css'>"
                                + "<link rel='styleSheet' type='text/css' href='v4workflow/css/gwtcontrols.css'>"
                                + "<style type='text/css' media='print'>"
                                + "@media print {"
                                + ".footerText{font-size:13px; font-weight:normal;margin-top:0px;}"
                                + ".break {page-break-after:always}"
                                + "}" + "</style>";
                List<UIObject> uiObjects = new ArrayList<UIObject>();
                NTPrintLayout printLayout = new NTPrintLayout();
                printLayout.setSelectedDocument(null);
                uiObjects.add(createHeader());
                NTPrint.it(style,uiObjects);
        }

 public static FlexTable createHeader(){
                FlexTable flexTable = new FlexTable();
                flexTable.setWidth("100%");
                return flexTable;
        }
于 2013-03-18T12:14:38.850 に答える
0

ウィンドウにHTML以外のページが含まれている場合、ウィンドウオブジェクトのprint()メソッド(またはその他のメソッド)を呼び出すことはできません。

ユーザーにファイルをダウンロードさせます。

これも参照してください

于 2013-03-18T11:24:39.853 に答える