mirror of https://github.com/apache/poi.git
Fix bug #48718 - Make the creation of multiple, un-modified fonts in a row in XSSF match the old HSSF behaviour
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@949177 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
da4d5963f3
commit
8bb16bee4b
|
@ -34,6 +34,7 @@
|
||||||
|
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.7-SNAPSHOT" date="2010-??-??">
|
<release version="3.7-SNAPSHOT" date="2010-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">48718 - Make the creation of multiple, un-modified fonts in a row in XSSF match the old HSSF behaviour</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44916 - Allow access to the HSSFPatriarch from HSSFSheet once created</action>
|
<action dev="POI-DEVELOPERS" type="fix">44916 - Allow access to the HSSFPatriarch from HSSFSheet once created</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">48779 - Allow you to get straight from a CellStyle to a Color, irrespective of if the Color is indexed or inline-defined</action>
|
<action dev="POI-DEVELOPERS" type="add">48779 - Allow you to get straight from a CellStyle to a Color, irrespective of if the Color is indexed or inline-defined</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">48924 - Allow access of the HWPF DateAndTime underlying date values</action>
|
<action dev="POI-DEVELOPERS" type="add">48924 - Allow access of the HWPF DateAndTime underlying date values</action>
|
||||||
|
|
|
@ -176,14 +176,29 @@ public class StylesTable extends POIXMLDocumentPart {
|
||||||
return fonts.get(idx);
|
return fonts.get(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int putFont(XSSFFont font) {
|
/**
|
||||||
int idx = fonts.indexOf(font);
|
* Records the given font in the font table.
|
||||||
|
* Will re-use an existing font index if this
|
||||||
|
* font matches another, EXCEPT if forced
|
||||||
|
* registration is requested.
|
||||||
|
* This allows people to create several fonts
|
||||||
|
* then customise them later.
|
||||||
|
*/
|
||||||
|
public int putFont(XSSFFont font, boolean forceRegistration) {
|
||||||
|
int idx = -1;
|
||||||
|
if(!forceRegistration) {
|
||||||
|
idx = fonts.indexOf(font);
|
||||||
|
}
|
||||||
|
|
||||||
if (idx != -1) {
|
if (idx != -1) {
|
||||||
return idx;
|
return idx;
|
||||||
}
|
}
|
||||||
fonts.add(font);
|
fonts.add(font);
|
||||||
return fonts.size() - 1;
|
return fonts.size() - 1;
|
||||||
}
|
}
|
||||||
|
public int putFont(XSSFFont font) {
|
||||||
|
return putFont(font, false);
|
||||||
|
}
|
||||||
|
|
||||||
public XSSFCellStyle getStyleAt(int idx) {
|
public XSSFCellStyle getStyleAt(int idx) {
|
||||||
int styleXfId = 0;
|
int styleXfId = 0;
|
||||||
|
|
|
@ -516,10 +516,11 @@ public class XSSFFont implements Font {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register ourselfs in the style table
|
* Perform a registration of ourselves
|
||||||
|
* to the style table
|
||||||
*/
|
*/
|
||||||
public long putFont(StylesTable styles) {
|
public long registerTo(StylesTable styles) {
|
||||||
short idx = (short)styles.putFont(this);
|
short idx = (short)styles.putFont(this, true);
|
||||||
this._index = idx;
|
this._index = idx;
|
||||||
return idx;
|
return idx;
|
||||||
}
|
}
|
||||||
|
|
|
@ -453,7 +453,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
|
||||||
*/
|
*/
|
||||||
public XSSFFont createFont() {
|
public XSSFFont createFont() {
|
||||||
XSSFFont font = new XSSFFont();
|
XSSFFont font = new XSSFFont();
|
||||||
font.putFont(stylesSource);
|
font.registerTo(stylesSource);
|
||||||
return font;
|
return font;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,14 +20,17 @@ package org.apache.poi.xssf.usermodel;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.poi.POIXMLDocumentPart;
|
import org.apache.poi.POIXMLDocumentPart;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||||
import org.apache.poi.openxml4j.opc.PackagePart;
|
import org.apache.poi.openxml4j.opc.PackagePart;
|
||||||
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
|
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
|
||||||
import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues;
|
import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues;
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
|
import org.apache.poi.ss.usermodel.Font;
|
||||||
import org.apache.poi.ss.usermodel.Name;
|
import org.apache.poi.ss.usermodel.Name;
|
||||||
import org.apache.poi.ss.usermodel.Row;
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
import org.apache.poi.xssf.XSSFITestDataProvider;
|
import org.apache.poi.xssf.XSSFITestDataProvider;
|
||||||
import org.apache.poi.xssf.XSSFTestDataSamples;
|
import org.apache.poi.xssf.XSSFTestDataSamples;
|
||||||
import org.apache.poi.xssf.usermodel.extensions.XSSFCellFill;
|
import org.apache.poi.xssf.usermodel.extensions.XSSFCellFill;
|
||||||
|
@ -259,4 +262,39 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
|
||||||
assertEquals(null, cs.getFillBackgroundXSSFColor().getARGBHex());
|
assertEquals(null, cs.getFillBackgroundXSSFColor().getARGBHex());
|
||||||
assertEquals(null, cs.getFillBackgroundColorColor().getARGBHex());
|
assertEquals(null, cs.getFillBackgroundColorColor().getARGBHex());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* With HSSF, if you create a font, don't change it, and
|
||||||
|
* create a 2nd, you really do get two fonts that you
|
||||||
|
* can alter as and when you want.
|
||||||
|
* With XSSF, that wasn't the case, but this verfies
|
||||||
|
* that it now is again
|
||||||
|
*/
|
||||||
|
public void test48718() throws Exception {
|
||||||
|
// Verify the HSSF behaviour
|
||||||
|
// Then ensure the same for XSSF
|
||||||
|
Workbook[] wbs = new Workbook[] {
|
||||||
|
new HSSFWorkbook(),
|
||||||
|
new XSSFWorkbook()
|
||||||
|
};
|
||||||
|
int[] initialFonts = new int[] { 4, 1 };
|
||||||
|
for(int i=0; i<wbs.length; i++) {
|
||||||
|
Workbook wb = wbs[i];
|
||||||
|
int startingFonts = initialFonts[i];
|
||||||
|
|
||||||
|
assertEquals(startingFonts, wb.getNumberOfFonts());
|
||||||
|
|
||||||
|
// Get a font, and slightly change it
|
||||||
|
Font a = wb.createFont();
|
||||||
|
assertEquals(startingFonts+1, wb.getNumberOfFonts());
|
||||||
|
a.setFontHeightInPoints((short)23);
|
||||||
|
assertEquals(startingFonts+1, wb.getNumberOfFonts());
|
||||||
|
|
||||||
|
// Get two more, unchanged
|
||||||
|
Font b = wb.createFont();
|
||||||
|
assertEquals(startingFonts+2, wb.getNumberOfFonts());
|
||||||
|
Font c = wb.createFont();
|
||||||
|
assertEquals(startingFonts+3, wb.getNumberOfFonts());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue