Как печатать в Vaadin Flow?

Я хотел бы распечатать содержимое домашней страницы, созданной с помощью Vaadin 14, с помощью кнопки.

с Vaadin 8 было решение, которое, к сожалению, больше не применимо:

Button print = new Button("Print This Page");
print.addClickListener(new Button.ClickListener() {
    public void buttonClick(ClickEvent event) {
        // Print the current page
        JavaScript.getCurrent().execute("print();");
    }
});

Любая идея, как это сделать в Vaadin14, пожалуйста?


person Java    schedule 07.11.2019    source источник
comment
Для тех, кто использует Vaadin 8 вместо Vaadin Flow, см. Аналогичный вопрос: Как печатать на Ваадине   -  person Basil Bourque    schedule 07.11.2019


Ответы (1)


В Vaadin 10 и более поздних версиях вы можете запускать произвольный JavaScript, вызывая _ 1_

UI.getCurrent().getPage().executeJs( … )

Там вы сможете вызвать ту же функцию печати. См .: Выполнение JavaScript в браузере .

Итак, в вашем случае для печати текущей страницы:

UI.getCurrent().getPage().executeJs( "print();" ) ;

Полный пример в Vaadin 14.0.12 с использованием лямбда-синтаксиса:

package com.example;

import com.vaadin.flow.component.ClickEvent;
import com.vaadin.flow.component.UI;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.html.H1;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route;

/**
 * The main view contains a button and a click listener.
 */
@Route ( "" )
public class MainView extends VerticalLayout
{
    public MainView ( )
    {
        this.add( new H1( "Print example" ) );

        Button printButton = new Button( "Print…" );
        printButton.addClickListener( ( ClickEvent < Button > clickEvent ) ->
        {
            UI.getCurrent().getPage().executeJs( "print();" );
        } );
        this.add(printButton);
    }
}
person Jens Jansson    schedule 07.11.2019