利用jasperreport開發報表時,開發模式存檔為副檔名jrxml,再編譯成jasper檔案,提供程式呼叫使用。
如果不小心jrxml遺失或格式損壞了,要怎麼辦呢?jasper跟jrxml其實是可逆的,也就是jasper可以還原成jrxml,只需要簡單的程式碼,不過特別需要注意的是,如果報表裡有用到其它第三方的library,在反譯時也需要一起加入。
程式碼如下:
package com.yslifes; import java.io.File; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.design.JasperDesign; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.engine.xml.JRXmlWriter; public class JasperToJRXML { //來源路徑 public final static String sourcefolder = "D:/jasper/"; //目地路徑 public final static String destinationfolder = "D:/jrxml/"; public static void main(String[] args) { File folder = new File(sourcefolder); for (final File fileEntry : folder.listFiles()) { if(fileEntry.getName().lastIndexOf(".jasper")==fileEntry.getName().length()-7) { doRestore(fileEntry.getName()); } } } public static void doRestore(String name) { System.out.println(name+";"+(name.substring(0,name.length()-7)+".jrxml")); String sourcePath = sourcefolder+name;// jsper檔案位置 String destinationPath = destinationfolder+name.substring(0,name.length()-7)+".jrxml"; // 要產出jrxml檔案的位置 try { @SuppressWarnings("deprecation") JasperReport report = (JasperReport) JRLoader.loadObject(sourcePath); JRXmlWriter.writeReport(report, destinationPath, "UTF-8"); } catch (JRException e) { e.printStackTrace(); } } }