forked from fanruan/demo-export-xml
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
4.1 KiB
105 lines
4.1 KiB
package com.fr.plugin.export.xml.exporter; |
|
|
|
import com.fanruan.api.log.LogKit; |
|
import com.fanruan.api.report.PrintKit; |
|
import com.fanruan.api.report.export.BaseAppExporter; |
|
import com.fanruan.api.util.GeneralKit; |
|
import com.fanruan.api.util.StringKit; |
|
import com.fr.base.Style; |
|
import com.fr.main.workbook.ResultWorkBook; |
|
import com.fr.page.ClippedPageProvider; |
|
import com.fr.page.PageSetProvider; |
|
import com.fr.page.PaperSettingProvider; |
|
import com.fr.page.ReportPageProvider; |
|
import com.fr.plugin.context.PluginContexts; |
|
import com.fr.report.cell.CellElement; |
|
import com.fr.report.elementcase.ElementGetter; |
|
import com.fr.report.report.ECReport; |
|
import com.fr.report.report.ResultReport; |
|
import com.fr.stable.EncodeConstants; |
|
|
|
import java.io.OutputStream; |
|
import java.io.OutputStreamWriter; |
|
import java.io.PrintWriter; |
|
import java.text.Format; |
|
import java.util.Iterator; |
|
import java.util.List; |
|
|
|
/** |
|
* Created by richie on 16/1/21. |
|
*/ |
|
public class XmlExporter extends BaseAppExporter { |
|
|
|
@Override |
|
public void export(OutputStream out, ResultWorkBook book) throws Exception { |
|
List paperSettingList = PrintKit.getPaperSettings(book); |
|
for (int i = 0, len = book.getReportCount(); i < len; i++) { |
|
this.export(out, book.getResultReport(i), (PaperSettingProvider) paperSettingList.get(i)); |
|
} |
|
} |
|
|
|
@Override |
|
public void export(java.io.OutputStream out, PageSetProvider pageSet) throws Exception { |
|
for (int i = 0; i < pageSet.size(); i++) { |
|
ReportPageProvider reportPage = pageSet.getPage(i); |
|
ClippedPageProvider page = PrintKit.pick(reportPage); |
|
if (page == null) { |
|
break; |
|
} |
|
this.exportReport(out, (ElementGetter) page, 0, (page).getRowCount()); |
|
} |
|
} |
|
|
|
private void export(OutputStream out, ResultReport report, PaperSettingProvider paperSetting) |
|
throws Exception { |
|
if (report != null) { |
|
LogKit.info("UnLayerReport start export"); |
|
exportReport(out, (ECReport) report, 0, (report).getRowCount()); |
|
} |
|
} |
|
|
|
public void exportReport(OutputStream out, ElementGetter reportCase, int start, int end) throws Exception { |
|
if (PluginContexts.currentContext().isAvailable()) { |
|
PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, EncodeConstants.ENCODING_UTF_8)); |
|
StringBuilder xmlBuffer = new StringBuilder(); |
|
xmlBuffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"); |
|
xmlBuffer.append("<report>"); |
|
for (int row = start; row < end; row++) { |
|
xmlBuffer.append("<row>"); |
|
Iterator it = reportCase.getRow(row); |
|
|
|
while (it.hasNext()) { |
|
xmlBuffer.append("<col>"); |
|
String exportText; |
|
CellElement cell = (CellElement) it.next(); |
|
if (cell == null) { |
|
exportText = StringKit.EMPTY; |
|
} else { |
|
boolean export = PrintKit.isCellPrintable(cell); |
|
if (export) { |
|
Object value = cell.getValue(); |
|
Style style = cell.getStyle(); |
|
if (style != null) { |
|
Format format = style.getFormat(); |
|
exportText = Style.valueToText(value, format); |
|
} else { |
|
exportText = GeneralKit.objectToString(value); |
|
} |
|
} else { |
|
exportText = StringKit.EMPTY; |
|
} |
|
} |
|
xmlBuffer.append(exportText); |
|
xmlBuffer.append("</col>"); |
|
|
|
} |
|
xmlBuffer.append("</row>"); |
|
} |
|
xmlBuffer.append("</report>"); |
|
writer.println(xmlBuffer.toString()); |
|
writer.flush(); |
|
} else { |
|
throw new RuntimeException("XML Export Plugin License Expired!"); |
|
} |
|
} |
|
} |