Hallo,
ich möchte gerne ein PipedOutputStream via Primefaces ausgeben:
Das Problem ist, dass das File zwar im Frontend ausgegeben wird und ich kann es speichern, aber ich bekomme beim Öffnen der Datei eine Fehlermeldung:

Wenn ich die Excel als File speichere, dann klappt das auch und die Meldung kommt nicht.
Es scheint wohl etwas mit dem Outputstream nicht zu passen.
Meine JSF View:
Beim Debuggen ist der Buffer zB auch nicht nur 0 . 0 . 0

Kann jemand hier helfen?
ich möchte gerne ein PipedOutputStream via Primefaces ausgeben:
Das Problem ist, dass das File zwar im Frontend ausgegeben wird und ich kann es speichern, aber ich bekomme beim Öffnen der Datei eine Fehlermeldung:

Wenn ich die Excel als File speichere, dann klappt das auch und die Meldung kommt nicht.
Java:
new ExcelExporter().exportHtml(htmlCode, new File("test.xlsx"));
Es scheint wohl etwas mit dem Outputstream nicht zu passen.
Meine JSF View:
Java:
@Named
@ViewScoped
public class ExcelRenderingReportingController implements Serializable {
private StreamedContent file;
/**
* Create PDF
*/
public void createExcel(ReportLanguage reportLanguage) {
LOGGER.info("START createExcel");
file = null;
PipedOutputStream os = new PipedOutputStream();
PipedInputStream is = new PipedInputStream(os);
Subject currentUser = null;
excelGenerationFromHtmlServiceBean.createExcel(os, reportLanguage, currentUser);
file = DefaultStreamedContent.builder()
.contentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
.name("MyReport.xlsx")
.stream(() -> is).build();
}
return;
}
Java:
@Stateless
public class ExcelGenerationFromHtmlServiceBean {
private final Logger LOGGER = LoggerFactory.getLogger(ExcelGenerationFromHtmlServiceBean.class);
@Resource
private ManagedExecutorService managedExecutorService;
@EJB
private PermissionSystemUserServiceStoredBean permissionSystemUserServiceStoredBean;
/**
* Create PDF
*/
public PipedOutputStream createExcel(PipedOutputStream os, ReportLanguage reportLanguage, Subject currentUser) {
Runnable myRunnable = new Runnable() {
@Override
public void run() {
try {
String sessionId = (String) currentUser.getSession().getId();
String url = Constants.APPLICATION_URL
+ "/portal/reporting/execution/executionPagePDF.jsf"
+ "?reportLanguageId="
+ reportLanguage.getIdHash() + "&outputFormat=PDF" + ";sid=" + sessionId;
String htmlCode = // Generate HTML Code
new ExcelExporter().exportHtml(htmlCode, os);
// os.close();
}
catch (Exception e) {
LOGGER.error(ExceptionUtils.getFullStackTrace(e));
}
}
};
myRunnable = currentUser.associateWith(myRunnable);
managedExecutorService.submit(myRunnable);
return os;
}
Java:
public class ExcelExporter extends AbstractExporter {
public void exportHtml(String html, OutputStream out) throws IOException {
Workbook workbook = new XSSFWorkbook();
StyleMap styleMapper = getStyleMapper(html);
Sheet sheet = null;
int startRow = 0;
for (Element element : getTables(html)) {
if (workbook.getNumberOfSheets() == 0) {
String sheetName = getSheetName(element);
if (StringUtils.isNotEmpty(sheetName)) {
sheet = workbook.createSheet(sheetName);
} else {
sheet = workbook.createSheet();
}
} else if (isNewSheet(element)) {
String sheetName = getSheetName(element);
if (StringUtils.isNotEmpty(sheetName))
sheet = workbook.createSheet(sheetName);
else {
sheet = workbook.createSheet();
}
startRow = 0;
}
TableWriter writer = new ExcelTableWriter(new ExcelTableRowWriter(sheet, new ExcelTableCellWriter(sheet,
styleMapper)));
startRow += writer.writeTable(element, styleMapper, startRow) + 1;
sheet.createRow(startRow);
}
for (int i = 0; i < workbook.getNumberOfSheets(); ++i) {
formatSheet(workbook.getSheetAt(i));
}
workbook.write(out);
// out.flush();
// out.close();
// workbook.close();
}
Beim Debuggen ist der Buffer zB auch nicht nur 0 . 0 . 0

Kann jemand hier helfen?