jferard / fastods

A very fast and lightweight (no dependency) library for creating ODS (Open Document Spreadsheet, mainly for Calc) files in Java. It's a Martin Schulz's SimpleODS fork
GNU General Public License v3.0
36 stars 6 forks source link

Duplicate entry when saving empty file #133

Closed jferard closed 6 years ago

jferard commented 6 years ago

When running:

final NamedOdsFileWriter writer = odsFactory.createWriter(file);
writer.save();

I get:

java.util.zip.ZipException: duplicate entry: Thumbnails/

    at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:232)
    at com.github.jferard.fastods.util.ZipUTF8WriterImpl.putNextEntry(ZipUTF8WriterImpl.java:97)
    at com.github.jferard.fastods.odselement.OdsElements.createEmptyElements(OdsElements.java:236)
    at com.github.jferard.fastods.NamedOdsDocument.save(NamedOdsDocument.java:280)
    at com.github.jferard.fastods.OdsFileDirectWriter.save(OdsFileDirectWriter.java:83)

This is probably related to the fact that the file is empty.

jferard commented 6 years ago

Two calls to OdsElements.createEmptyElements:

OdsFactory.createWriter()
NamedOdsDocument.prepareFlush()
OdsElements.prepare()
NamedOdsFileWriter.update(...)
ImmutableElementsFlusher.flushInto()
OdsElements.createEmptyElements()

And:

NamedOdsFileWriter.save()
OdsFileDirectWriter.save()
NamedOdsDocument.save()
OdsElements.createEmptyElements()

The latter seems to be unnecessary since the empty elements should be created at the beginning.