mirror of https://github.com/apache/poi.git
Fix bug #51955 - XSSFReader supplied StylesTables need to have the theme data available
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1179440 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7c80fb24ea
commit
9395942e91
|
@ -34,6 +34,7 @@
|
|||
|
||||
<changes>
|
||||
<release version="3.8-beta5" date="2011-??-??">
|
||||
<action dev="poi-developers" type="fix">51955 - XSSFReader supplied StylesTables need to have the theme data available</action>
|
||||
<action dev="poi-developers" type="fix">51716 - Removed incorrect assert in SXSSFSheet#getSXSSFSheet</action>
|
||||
<action dev="poi-developers" type="fix">51834 - Opening and Writing .doc file results in corrupt document</action>
|
||||
<action dev="poi-developers" type="fix">51902 - Picture.fillRawImageContent - ArrayIndexOutOfBoundsException (duplicate)</action>
|
||||
|
|
|
@ -36,6 +36,7 @@ import org.apache.poi.openxml4j.opc.PackagingURIHelper;
|
|||
import org.apache.poi.xssf.model.CommentsTable;
|
||||
import org.apache.poi.xssf.model.SharedStringsTable;
|
||||
import org.apache.poi.xssf.model.StylesTable;
|
||||
import org.apache.poi.xssf.model.ThemesTable;
|
||||
import org.apache.poi.xssf.usermodel.XSSFRelation;
|
||||
import org.apache.xmlbeans.XmlException;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
|
||||
|
@ -83,7 +84,15 @@ public class XSSFReader {
|
|||
*/
|
||||
public StylesTable getStylesTable() throws IOException, InvalidFormatException {
|
||||
ArrayList<PackagePart> parts = pkg.getPartsByContentType( XSSFRelation.STYLES.getContentType());
|
||||
return parts.size() == 0 ? null : new StylesTable(parts.get(0), null);
|
||||
if(parts.size() == 0) return null;
|
||||
|
||||
// Create the Styles Table, and associate the Themes if present
|
||||
StylesTable styles = new StylesTable(parts.get(0), null);
|
||||
parts = pkg.getPartsByContentType( XSSFRelation.THEME.getContentType());
|
||||
if(parts.size() != 0) {
|
||||
styles.setTheme(new ThemesTable(parts.get(0), null));
|
||||
}
|
||||
return styles;
|
||||
}
|
||||
|
||||
|
||||
|
@ -104,6 +113,14 @@ public class XSSFReader {
|
|||
return XSSFRelation.STYLES.getContents(workbookPart);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an InputStream to read the contents of the
|
||||
* themes table.
|
||||
*/
|
||||
public InputStream getThemesData() throws IOException, InvalidFormatException {
|
||||
return XSSFRelation.THEME.getContents(workbookPart);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an InputStream to read the contents of the
|
||||
* main Workbook, which contains key overall data for
|
||||
|
|
|
@ -16,10 +16,13 @@
|
|||
==================================================================== */
|
||||
package org.apache.poi.xssf.model;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.POIXMLDocumentPart;
|
||||
import org.apache.poi.openxml4j.opc.PackagePart;
|
||||
import org.apache.poi.openxml4j.opc.PackageRelationship;
|
||||
import org.apache.poi.xssf.usermodel.XSSFColor;
|
||||
import org.apache.xmlbeans.XmlException;
|
||||
import org.apache.xmlbeans.XmlObject;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTColorScheme;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument;
|
||||
|
@ -34,9 +37,14 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTColor;
|
|||
public class ThemesTable extends POIXMLDocumentPart {
|
||||
private ThemeDocument theme;
|
||||
|
||||
public ThemesTable(PackagePart part, PackageRelationship rel) throws Exception {
|
||||
public ThemesTable(PackagePart part, PackageRelationship rel) throws IOException {
|
||||
super(part, rel);
|
||||
theme = ThemeDocument.Factory.parse(part.getInputStream());
|
||||
|
||||
try {
|
||||
theme = ThemeDocument.Factory.parse(part.getInputStream());
|
||||
} catch(XmlException e) {
|
||||
throw new IOException(e.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public ThemesTable(ThemeDocument theme) {
|
||||
|
|
|
@ -55,6 +55,13 @@ public final class TestXSSFReader extends TestCase {
|
|||
|
||||
assertEquals(3, r.getStylesTable().getFonts().size());
|
||||
assertEquals(0, r.getStylesTable()._getNumberFormatSize());
|
||||
|
||||
// The Styles Table should have the themes associated with it too
|
||||
assertNotNull(r.getStylesTable().getTheme());
|
||||
|
||||
// Check we get valid data for the two
|
||||
assertNotNull(r.getStylesData());
|
||||
assertNotNull(r.getThemesData());
|
||||
}
|
||||
|
||||
public void testStrings() throws Exception {
|
||||
|
|
Loading…
Reference in New Issue