利用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();
}
}
}
