В моем vaadin приложение У меня есть Table
с дополнительной колонкой, содержащей отпечаток Button
. Button
вызывает следующий метод Util, чтобы создать PDF и открыть его в новом окне (ui
параметр кнопка):Как открыть сгенерированный PDF-файл в ваадине?
public static void printPDF(Offer offer, AbstractComponent ui) throws IOException, DocumentException, TemplateException {
// ... create PDF
FileResource resource = new FileResource(pdfFile);
BrowserWindowOpener opener = new BrowserWindowOpener(resource);
opener.setFeatures("");
opener.extend(ui);
}
Теперь, нажав на кнопку в первый раз не работает. Щелчок на нем второй раз работает. Нажав его в третий раз, откроется два окна. Это увеличивается при каждом нажатии.
Я также хочу открыть pdf, используя контекстное меню, например.
table.addActionHandler(new Handler()...
Там у меня даже нет кнопки для продления. Я бы предпочел, не использовать часть .extend()
и просто открыть новое окно. Как я могу это сделать?
EDIT: Это блокирует кнопку открытия экземпляров mulitple, но не является хорошим решением, и первый щелчок не работает.
Collection<Extension> extensions = ui.getExtensions();
for (Extension e : extensions) {
if (e instanceof BrowserWindowOpener) {
((BrowserWindowOpener) e).setResource(resource);
return;
}
}
Я предполагаю, что я должен был бы создать BrowserWindowOpener
для каждой печати Button
в моем Table
.
Не очень чистое решение, таблица может содержать много строк, которые создавали бы множество BrowserWindowOpener
экземпляров, которые никогда не будут использоваться. Проблема контекстного меню также не будет решена.
EDIT2: Это другое решение, которое я пробовал:
ResourceReference rr = ResourceReference.create(resource, ui, "print");
Page.getCurrent().open(rr.getURL(), "blank_");
Здесь я получаю следующее сообщение об ошибке:
Button (175) did not handle connector request for print/2016_9090_R_1634500091131558445.pdf
Вам нужно добавить расширение BrowserWindowOpener до нажатия кнопки в первый раз. Это не должно быть проблемой с производительностью, так как кнопки будут созданы в любом случае. Мне интересно, если кто-то знает ответ на ваш вопрос в контексте контекстного меню. –
Нашел старый [вопрос] (http://stackoverflow.com/questions/26211489/open-pdf-file-from-menubar-using-vaadin). Кажется, это решение открыть файл в новом окне браузера в целом. –
Если я использую 'ResourceReference', передавая эту кнопку в качестве второго параметра, я получаю следующую ошибку:' Button (175) не обрабатывал запрос коннектора для печати/2016_9090_R_1634500091131558445.pdf' –