Java JasperViewer-如何设置文件名和扩展名(格式)?
我正在使用Swing框架和JasperReports开发基于Java桌面的应用程序,以用于报告。我遇到一些问题,当出现JasperViewer时,我想保存报告 如何在“保存”对话框中设置文件名(默认为空)以及如何仅限制Pdf格式 这是我的密码:Java JasperViewer-如何设置文件名和扩展名(格式)?,java,jasper-reports,Java,Jasper Reports,我正在使用Swing框架和JasperReports开发基于Java桌面的应用程序,以用于报告。我遇到一些问题,当出现JasperViewer时,我想保存报告 如何在“保存”对话框中设置文件名(默认为空)以及如何仅限制Pdf格式 这是我的密码: JRBeanCollectionDataSource beanCollection=new JRBeanCollectionDataSource(matakuliahs); Map<String,Object> map=new HashMa
JRBeanCollectionDataSource beanCollection=new JRBeanCollectionDataSource(matakuliahs);
Map<String,Object> map=new HashMap<String, Object>();
map.put("namaMahasiswa", mahasiswa.getNama());
InputStream input=getClass().getResourceAsStream("/reportsederhana/reportsederhana.jrxml");
JasperDesign design=JRXmlLoader.load(input);
JasperReport report=JasperCompileManager.compileReport(design);
JasperPrint jasperPrint=JasperFillManager.fillReport(report, map, beanCollection);
jasperPrint.setName("Laporan "+mahasiswa.getNama()); // it doesn't give the name
JasperViewer.viewReport(jasperPrint,false);
JRBeanCollectionDataSource beanCollection=新的JRBeanCollectionDataSource(matakuliahs);
Map Map=newhashmap();
map.put(“namaMahasiswa”,mahasiswa.getNama());
InputStream input=getClass().getResourceAsStream(“/reportsederhana/reportsederhana.jrxml”);
JasperDesign=JRXmlLoader.load(输入);
JasperReport report=jaspecompilemanager.compileReport(设计);
JasperPrint JasperPrint=JasperFillManager.fillReport(报告、地图、beanCollection);
jasperPrint.setName(“Laporan”+mahasiswa.getNama());//它没有名字
JasperViewer.viewReport(jasperPrint,false);
要设置保存到的默认扩展名,一个想法是您需要以某种方式从JasperViewer
(实例)获取JRWiewer
实例,然后在voidJRWiewer
实例上设置一些保存贡献。看一看
对于设置文件名,我不完全确定,但请看一下
还可以检查和源代码,它可能会派上用场。要设置要保存到的默认扩展名,一个想法是您需要以某种方式从
JasperViewer
(实例)获取JRWiewer
实例,然后在voidJRWiewer
实例上设置一些保存贡献。看一看
对于设置文件名,我不完全确定,但请看一下
另外,请检查和源代码,它可能会派上用场。这是一篇旧文章,但我遇到了同样的问题 我从net.sf.jasperreports.view.JRViewer扩展了查看器组件。经过一些代码检查,我发现只能从外部控制“lastFolder”,而不能控制文件名。因此,如果尚未设置上次使用的文件夹,您可以设置该文件夹:
if (lastFolder == null) {
this.lastFolder = new File(System.getProperty("user.home"));
}
但是,这就是提示:工具栏的所有按钮都是公共字段
因此,对于我的解决方案,我删除了保存按钮(btnSave)的所有ActionListener:
然后添加了我自己的实现。它与原来的非常相似,只是区别在于我根据报告名和当前时间戳来控制文件名
...
File file = new File(lastFolder.getPath() + System.getProperty("file.separator") + DateTime.now().toString() + "_" + jasperPrint.getName());
...
此外,我将预先选择的文件扩展名从.jasperprint设置为.pdf,这更方便
...
fileChooser.setFileFilter((FileFilter) saveContributors.get(1));
...
完整的ActionListener代码如下所示:
this.btnSave.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setLocale(getLocale());
fileChooser.updateUI();
File file = new File(lastFolder.getPath() + System.getProperty("file.separator") + DateTime.now().toString() + "_" + jasperPrint.getName());
fileChooser.setSelectedFile(file);
for (int i = 0; i < saveContributors.size(); i++)
fileChooser.addChoosableFileFilter((FileFilter) saveContributors.get(i));
if (saveContributors.contains(lastSaveContributor))
fileChooser.setFileFilter(lastSaveContributor);
else if (saveContributors.size() > 1)
fileChooser.setFileFilter((FileFilter) saveContributors.get(1));
if (lastFolder != null)
fileChooser.setCurrentDirectory(lastFolder);
int retValue = fileChooser.showSaveDialog(JasperViewer.this);
if (retValue == 0) {
FileFilter fileFilter = fileChooser.getFileFilter();
file = fileChooser.getSelectedFile();
lastFolder = file.getParentFile();
JRSaveContributor contributor = null;
if (fileFilter instanceof JRSaveContributor) {
contributor = (JRSaveContributor) fileFilter;
} else {
int i = 0;
do {
if (contributor != null || i >= saveContributors.size())
break;
contributor = (JRSaveContributor) saveContributors.get(i++);
if (!contributor.accept(file))
contributor = null;
} while (true);
if (contributor == null)
contributor = new JRPrintSaveContributor(jasperReportsContext, getLocale(), null);
}
lastSaveContributor = contributor;
try {
contributor.save(jasperPrint, file);
} catch (JRException ex) {
logger.error("Could not save report.", ex);
JOptionPane.showMessageDialog(JasperViewer.this, trc("JasperViewer.error.save", "Could not save report."));
}
}
}
});
this.btnSave.addActionListener(新的AbstractAction(){
@凌驾
已执行的公共无效操作(操作事件e){
JFileChooser fileChooser=新的JFileChooser();
setLocale(getLocale());
fileChooser.updateUI();
File File=new File(lastFolder.getPath()+System.getProperty(“File.separator”)+DateTime.now().toString()+“_”+jasperPrint.getName());
fileChooser.setSelectedFile(文件);
对于(int i=0;i1)
setFileFilter((FileFilter)saveContributors.get(1));
如果(lastFolder!=null)
fileChooser.setCurrentDirectory(lastFolder);
int retValue=fileChooser.showsavedilog(JasperViewer.this);
如果(retValue==0){
FileFilter=fileChooser.getFileFilter();
file=fileChooser.getSelectedFile();
lastFolder=file.getParentFile();
JRSaveContributor=null;
if(JRSaveContributor的文件筛选器实例){
contributor=(JRSaveContributor)文件过滤器;
}否则{
int i=0;
做{
if(contributor!=null | | i>=saveContributors.size())
打破
contributor=(JRSaveContributor)savecontributor.get(i++);
如果(!contributor.accept(文件))
contributor=null;
}虽然(正确);
if(contributor==null)
contributor=newjrprintsavecontributor(jasperReportsContext,getLocale(),null);
}
lastSaveContributor=参与者;
试一试{
保存(jasperPrint,文件);
}捕获(JREX异常){
logger.error(“无法保存报告”,例如);
JOptionPane.showMessageDialog(JasperViewer.this,trc(“JasperViewer.error.save”,“无法保存报告”);
}
}
}
});
这是一篇老文章,但我遇到了同样的问题
我从net.sf.jasperreports.view.JRViewer扩展了查看器组件。经过一些代码检查,我发现只能从外部控制“lastFolder”,而不能控制文件名。因此,如果尚未设置上次使用的文件夹,您可以设置该文件夹:
if (lastFolder == null) {
this.lastFolder = new File(System.getProperty("user.home"));
}
但是,这就是提示:工具栏的所有按钮都是公共字段
因此,对于我的解决方案,我删除了保存按钮(btnSave)的所有ActionListener:
然后添加了我自己的实现。它与原来的非常相似,只是区别在于我根据报告名和当前时间戳来控制文件名
...
File file = new File(lastFolder.getPath() + System.getProperty("file.separator") + DateTime.now().toString() + "_" + jasperPrint.getName());
...
此外,我将预先选择的文件扩展名从.jasperprint设置为.pdf,这更方便
...
fileChooser.setFileFilter((FileFilter) saveContributors.get(1));
...
完整的ActionListener代码如下所示:
this.btnSave.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setLocale(getLocale());
fileChooser.updateUI();
File file = new File(lastFolder.getPath() + System.getProperty("file.separator") + DateTime.now().toString() + "_" + jasperPrint.getName());
fileChooser.setSelectedFile(file);
for (int i = 0; i < saveContributors.size(); i++)
fileChooser.addChoosableFileFilter((FileFilter) saveContributors.get(i));
if (saveContributors.contains(lastSaveContributor))
fileChooser.setFileFilter(lastSaveContributor);
else if (saveContributors.size() > 1)
fileChooser.setFileFilter((FileFilter) saveContributors.get(1));
if (lastFolder != null)
fileChooser.setCurrentDirectory(lastFolder);
int retValue = fileChooser.showSaveDialog(JasperViewer.this);
if (retValue == 0) {
FileFilter fileFilter = fileChooser.getFileFilter();
file = fileChooser.getSelectedFile();
lastFolder = file.getParentFile();
JRSaveContributor contributor = null;
if (fileFilter instanceof JRSaveContributor) {
contributor = (JRSaveContributor) fileFilter;
} else {
int i = 0;
do {
if (contributor != null || i >= saveContributors.size())
break;
contributor = (JRSaveContributor) saveContributors.get(i++);
if (!contributor.accept(file))
contributor = null;
} while (true);
if (contributor == null)
contributor = new JRPrintSaveContributor(jasperReportsContext, getLocale(), null);
}
lastSaveContributor = contributor;
try {
contributor.save(jasperPrint, file);
} catch (JRException ex) {
logger.error("Could not save report.", ex);
JOptionPane.showMessageDialog(JasperViewer.this, trc("JasperViewer.error.save", "Could not save report."));
}
}
}
});
this.btnSave.addAct