У меня есть реализация, где JasperViewer
используется для предварительного просмотра и сохранения отчетов.Первый формат сохранения, предлагаемый зрителем, - .jrprint
, и я пытаюсь изменить его на pdf
.Я использую следующий метод, чтобы помочь мне с этим
private static void promotePdfSaveFormat(JasperViewer jasperViewer) {
/* get via reflection (with jOOR) the parameter JasperViewer object's member viewer (of type JRViewer) */
JRViewer viewer = on(jasperViewer).call("viewer").get();
/* get via reflection JRViewer object's member tlbToolBar (of type JRViewerToolbar) */
JRViewerToolbar tlbToolBar = on(viewer).call("tlbToolBar").get();
/* call tlbToolBar's getSaveContributors() */
Arrays.stream(tlbToolBar.getSaveContributors()).forEach(
e -> {
/* Find the one that is of type JRPdfSaveContributor (using instanceof) */
if (e instanceof JRPdfSaveContributor){
/* set JRViewerToolbar object member lastSaveContributor value to the instance of JRPdfSaveContributor */
on(tlbToolBar).call("lastSaveContributor").get();
}
}
);
}
Каждый раз, когда новый объект создается внутри класса, например JasperViewer viewer = new JasperViewer(...)
, я добавляю promotePdfSaveFormat(viewer)
сразу после него.Когда я запускаю приложение, я получаю сообщение об ошибке JRViewer viewer = on(jasperViewer).call("viewer").get();
Ошибка выглядит следующим образом
org.joor.ReflectException: java.lang.NoSuchMethodException: No similar method viewer with params [] could be found on type class net.sf.jasperreports.view.JasperViewer.