protected void exportReportToOasisZip(OutputStream os) throws JRException, IOException {
    OasisZip oasisZip =
        new FileBufferedOasisZip(((JROpenDocumentExporterNature) nature).getOpenDocumentNature());

    ExportZipEntry tempBodyEntry = new FileBufferedZipEntry(null);
    ExportZipEntry tempStyleEntry = new FileBufferedZipEntry(null);

    tempBodyWriter = tempBodyEntry.getWriter();
    tempStyleWriter = tempStyleEntry.getWriter();

    styleCache = new StyleCache(tempStyleWriter, fontMap, getExporterKey());

    Writer stylesWriter = oasisZip.getStylesEntry().getWriter();

    StyleBuilder styleBuilder = new StyleBuilder(jasperPrintList, stylesWriter);
    styleBuilder.build();

    stylesWriter.close();

    for (reportIndex = 0; reportIndex < jasperPrintList.size(); reportIndex++) {
      setJasperPrint(jasperPrintList.get(reportIndex));

      List<JRPrintPage> pages = jasperPrint.getPages();
      if (pages != null && pages.size() > 0) {
        if (isModeBatch) {
          startPageIndex = 0;
          endPageIndex = pages.size() - 1;
        }

        JRPrintPage page = null;
        for (pageIndex = startPageIndex; pageIndex <= endPageIndex; pageIndex++) {
          if (Thread.interrupted()) {
            throw new JRException("Current thread interrupted.");
          }

          page = pages.get(pageIndex);

          exportPage(page);
        }
      }
    }

    tempBodyWriter.flush();
    tempStyleWriter.flush();

    tempBodyWriter.close();
    tempStyleWriter.close();

    /*   */
    ContentBuilder contentBuilder =
        new ContentBuilder(
            oasisZip.getContentEntry(),
            tempStyleEntry,
            tempBodyEntry,
            styleCache.getFontFaces(),
            ((JROpenDocumentExporterNature) nature).getOpenDocumentNature());
    contentBuilder.build();

    tempStyleEntry.dispose();
    tempBodyEntry.dispose();

    if ((imagesToProcess != null && imagesToProcess.size() > 0)) {
      for (Iterator<JRPrintElementIndex> it = imagesToProcess.iterator(); it.hasNext(); ) {
        JRPrintElementIndex imageIndex = it.next();

        JRPrintImage image = getImage(jasperPrintList, imageIndex);
        JRRenderable renderer = image.getRenderer();
        if (renderer.getType() == JRRenderable.TYPE_SVG) {
          renderer =
              new JRWrappingSvgRenderer(
                  renderer,
                  new Dimension(image.getWidth(), image.getHeight()),
                  ModeEnum.OPAQUE == image.getModeValue() ? image.getBackcolor() : null);
        }

        oasisZip.addEntry( // FIXMEODT optimize with a different implementation of entry
            new FileBufferedZipEntry(
                "Pictures/" + getImageName(imageIndex), renderer.getImageData()));
      }
    }

    oasisZip.zipEntries(os);

    oasisZip.dispose();
  }