Я нашел решение, которое, на мой взгляд, просто ужасно, но сработало в моем случае.
Хорошо: читая исходный код класса JasperViewer, я обнаружил защищенное поле с именем viewer для этого класса.
Итак, все, что мне нужно было сделать, это написать такой код:
Field jrViewerField;
try {
jrViewerField = viewer.getClass().getDeclaredField("viewer");
jrViewerField.setAccessible(true);
JRViewer jrViewer = (JRViewer) jrViewerField.get(viewer);
List<JRSaveContributor> savers = new ArrayList<JRSaveContributor>();
for (JRSaveContributor sc : jrViewer.getSaveContributors()) {
savers.add(sc);
}
for (JRSaveContributor sc : savers) {
if (! sc.getClass().getName().toLowerCase().contains("pdf")) {
jrViewer.removeSaveContributor(sc);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
Это не красивое решение, но, по крайней мере, оно работало с версией 3.7.1 Jasper Reports.,У него НЕТ ГАРАНТИИ, которая может работать с другими версиями системы, поэтому я настоятельно рекомендую всем использовать это решение, только если это ваш последний ресурс.