Bug 58068: Add a method to pass the actual Color to StylesTable.findFont().
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1811866 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c05e07b55c
commit
793938ecef
@ -36,10 +36,7 @@ import java.util.TreeMap;
|
||||
import org.apache.poi.POIXMLDocumentPart;
|
||||
import org.apache.poi.openxml4j.opc.PackagePart;
|
||||
import org.apache.poi.ss.SpreadsheetVersion;
|
||||
import org.apache.poi.ss.usermodel.BuiltinFormats;
|
||||
import org.apache.poi.ss.usermodel.FontFamily;
|
||||
import org.apache.poi.ss.usermodel.FontScheme;
|
||||
import org.apache.poi.ss.usermodel.TableStyle;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
import org.apache.poi.util.Internal;
|
||||
import org.apache.poi.xssf.usermodel.CustomIndexedColorMap;
|
||||
import org.apache.poi.xssf.usermodel.DefaultIndexedColorMap;
|
||||
@ -828,7 +825,8 @@ public class StylesTable extends POIXMLDocumentPart {
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds a font that matches the one with the supplied attributes
|
||||
* Finds a font that matches the one with the supplied attributes,
|
||||
* where color is the indexed-value, not the actual color.
|
||||
*/
|
||||
public XSSFFont findFont(boolean bold, short color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline) {
|
||||
for (XSSFFont font : fonts) {
|
||||
@ -847,6 +845,27 @@ public class StylesTable extends POIXMLDocumentPart {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds a font that matches the one with the supplied attributes,
|
||||
* where color is the actual Color-value, not the indexed color
|
||||
*/
|
||||
public XSSFFont findFont(boolean bold, Color color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline) {
|
||||
for (XSSFFont font : fonts) {
|
||||
if ( (font.getBold() == bold)
|
||||
&& font.getXSSFColor().equals(color)
|
||||
&& font.getFontHeight() == fontHeight
|
||||
&& font.getFontName().equals(name)
|
||||
&& font.getItalic() == italic
|
||||
&& font.getStrikeout() == strikeout
|
||||
&& font.getTypeOffset() == typeOffset
|
||||
&& font.getUnderline() == underline)
|
||||
{
|
||||
return font;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return default or custom indexed color to RGB mapping
|
||||
*/
|
||||
|
@ -17,11 +17,6 @@
|
||||
|
||||
package org.apache.poi.xssf.usermodel;
|
||||
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.POIXMLException;
|
||||
@ -51,6 +46,8 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.STFontScheme;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public final class TestXSSFFont extends BaseTestFont{
|
||||
|
||||
public TestXSSFFont() {
|
||||
@ -337,4 +334,110 @@ public final class TestXSSFFont extends BaseTestFont{
|
||||
// Even with invalid fonts we still get back useful data most of the time...
|
||||
SheetUtil.canComputeColumnWidth(font);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that fonts get added properly
|
||||
*/
|
||||
@Test
|
||||
public void testFindFont() throws IOException {
|
||||
XSSFWorkbook wb = new XSSFWorkbook();
|
||||
assertEquals(1, wb.getNumberOfFonts());
|
||||
|
||||
XSSFSheet s = wb.createSheet();
|
||||
s.createRow(0);
|
||||
s.createRow(1);
|
||||
s.getRow(0).createCell(0);
|
||||
s.getRow(1).createCell(0);
|
||||
|
||||
assertEquals(1, wb.getNumberOfFonts());
|
||||
|
||||
XSSFFont f1 = wb.getFontAt((short) 0);
|
||||
assertFalse(f1.getBold());
|
||||
|
||||
// Check that asking for the same font
|
||||
// multiple times gives you the same thing.
|
||||
// Otherwise, our tests wouldn't work!
|
||||
assertSame(wb.getFontAt((short) 0), wb.getFontAt((short) 0));
|
||||
assertEquals(
|
||||
wb.getFontAt((short) 0),
|
||||
wb.getFontAt((short) 0)
|
||||
);
|
||||
|
||||
// Look for a new font we have
|
||||
// yet to add
|
||||
assertNull(
|
||||
wb.findFont(
|
||||
false, IndexedColors.INDIGO.getIndex(), (short) 22,
|
||||
"Thingy", false, true, (short) 2, (byte) 2
|
||||
)
|
||||
);
|
||||
assertNull(
|
||||
wb.getStylesSource().findFont(
|
||||
false, new XSSFColor(IndexedColors.INDIGO, new DefaultIndexedColorMap()), (short) 22,
|
||||
"Thingy", false, true, (short) 2, (byte) 2
|
||||
)
|
||||
);
|
||||
|
||||
XSSFFont nf = wb.createFont();
|
||||
assertEquals(2, wb.getNumberOfFonts());
|
||||
|
||||
assertEquals(1, nf.getIndex());
|
||||
assertEquals(nf, wb.getFontAt((short) 1));
|
||||
|
||||
nf.setBold(false);
|
||||
nf.setColor(IndexedColors.INDIGO.getIndex());
|
||||
nf.setFontHeight((short) 22);
|
||||
nf.setFontName("Thingy");
|
||||
nf.setItalic(false);
|
||||
nf.setStrikeout(true);
|
||||
nf.setTypeOffset((short) 2);
|
||||
nf.setUnderline((byte) 2);
|
||||
|
||||
assertEquals(2, wb.getNumberOfFonts());
|
||||
assertEquals(nf, wb.getFontAt((short) 1));
|
||||
|
||||
assertTrue(
|
||||
wb.getFontAt((short) 0)
|
||||
!=
|
||||
wb.getFontAt((short) 1)
|
||||
);
|
||||
|
||||
// Find it now
|
||||
assertNotNull(
|
||||
wb.findFont(
|
||||
false, IndexedColors.INDIGO.getIndex(), (short) 22,
|
||||
"Thingy", false, true, (short) 2, (byte) 2
|
||||
)
|
||||
);
|
||||
assertNotNull(
|
||||
wb.getStylesSource().findFont(
|
||||
false, new XSSFColor(IndexedColors.INDIGO, new DefaultIndexedColorMap()), (short) 22,
|
||||
"Thingy", false, true, (short) 2, (byte) 2
|
||||
)
|
||||
);
|
||||
|
||||
XSSFFont font = wb.findFont(
|
||||
false, IndexedColors.INDIGO.getIndex(), (short) 22,
|
||||
"Thingy", false, true, (short) 2, (byte) 2
|
||||
);
|
||||
assertNotNull(font);
|
||||
assertEquals(
|
||||
1,
|
||||
font.getIndex()
|
||||
);
|
||||
assertEquals(nf,
|
||||
wb.findFont(
|
||||
false, IndexedColors.INDIGO.getIndex(), (short) 22,
|
||||
"Thingy", false, true, (short) 2, (byte) 2
|
||||
)
|
||||
);
|
||||
assertEquals(nf,
|
||||
wb.getStylesSource().findFont(
|
||||
false, new XSSFColor(IndexedColors.INDIGO, new DefaultIndexedColorMap()), (short) 22,
|
||||
"Thingy", false, true, (short) 2, (byte) 2
|
||||
)
|
||||
);
|
||||
|
||||
wb.close();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user