Author: fanningpj
Date: Sun May 11 10:20:27 2025
New Revision: 1925496
URL: http://svn.apache.org/viewvc?rev=1925496&view=rev
Log:
support colors as byte[]
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java?rev=1925496&r1=1925495&r2=1925496&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java
(original)
+++
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java
Sun May 11 10:20:27 2025
@@ -58,7 +58,7 @@ public class XSSFTextRun {
return _r;
}
- public void setFontColor(Color color){
+ public void setFontColor(Color color) {
CTTextCharacterProperties rPr = getRPr();
CTSolidColorFillProperties fill = rPr.isSetSolidFill() ?
rPr.getSolidFill() : rPr.addNewSolidFill();
CTSRgbColor clr = fill.isSetSrgbClr() ? fill.getSrgbClr() :
fill.addNewSrgbClr();
@@ -72,24 +72,49 @@ public class XSSFTextRun {
}
- public Color getFontColor(){
-
+ /**
+ * @param rgb
+ * @since POI 5.4.2
+ */
+ public void setFontColor(byte[] rgb) {
CTTextCharacterProperties rPr = getRPr();
- if(rPr.isSetSolidFill()){
+ CTSolidColorFillProperties fill = rPr.isSetSolidFill() ?
rPr.getSolidFill() : rPr.addNewSolidFill();
+ CTSRgbColor clr = fill.isSetSrgbClr() ? fill.getSrgbClr() :
fill.addNewSrgbClr();
+ clr.setVal(rgb);
+
+ if(fill.isSetHslClr()) fill.unsetHslClr();
+ if(fill.isSetPrstClr()) fill.unsetPrstClr();
+ if(fill.isSetSchemeClr()) fill.unsetSchemeClr();
+ if(fill.isSetScrgbClr()) fill.unsetScrgbClr();
+ if(fill.isSetSysClr()) fill.unsetSysClr();
+ }
+
+ public Color getFontColor() {
+ final byte[] rgb = getFontColorAsBytes();
+ if (rgb.length == 3) {
+ return new Color(0xFF & rgb[0], 0xFF & rgb[1], 0xFF & rgb[2]);
+ } else {
+ return new Color(0xFF & rgb[1], 0xFF & rgb[2], 0xFF & rgb[3], 0xFF
& rgb[0]);
+ }
+ }
+
+ /**
+ * @return the font color as a byte array.
+ * @since POI 5.4.2
+ */
+ public byte[] getFontColorAsBytes() {
+
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if (rPr != null && rPr.isSetSolidFill()) {
CTSolidColorFillProperties fill = rPr.getSolidFill();
if(fill.isSetSrgbClr()){
CTSRgbColor clr = fill.getSrgbClr();
- byte[] rgb = clr.getVal();
- if (rgb.length == 3) {
- return new Color(0xFF & rgb[0], 0xFF & rgb[1], 0xFF &
rgb[2]);
- } else {
- return new Color(0xFF & rgb[1], 0xFF & rgb[2], 0xFF &
rgb[3], 0xFF & rgb[0]);
- }
+ return clr.getVal();
}
}
- return new Color(0, 0, 0);
+ return new byte[]{0, 0, 0};
}
/**
@@ -97,7 +122,7 @@ public class XSSFTextRun {
* @param fontSize font size in points.
* The value of {@code -1} unsets the Sz attribute from the underlying xml
bean
*/
- public void setFontSize(double fontSize){
+ public void setFontSize(double fontSize) {
CTTextCharacterProperties rPr = getRPr();
if(fontSize == -1.0) {
if(rPr.isSetSz()) rPr.unsetSz();
@@ -113,14 +138,14 @@ public class XSSFTextRun {
/**
* @return font size in points or -1 if font size is not set.
*/
- public double getFontSize(){
+ public double getFontSize() {
double scale = 1;
double size = XSSFFont.DEFAULT_FONT_SIZE; // default font size
CTTextNormalAutofit afit =
getParentParagraph().getParentShape().getTxBody().getBodyPr().getNormAutofit();
if(afit != null) scale = (double)afit.getFontScale() / 100000;
- CTTextCharacterProperties rPr = getRPr();
- if(rPr.isSetSz()){
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if(rPr != null && rPr.isSetSz()){
size = rPr.getSz()*0.01;
}
@@ -133,8 +158,8 @@ public class XSSFTextRun {
* If this attribute is omitted then a value of 0 or no adjustment is
assumed.
*/
public double getCharacterSpacing(){
- CTTextCharacterProperties rPr = getRPr();
- if(rPr.isSetSpc()){
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if(rPr != null && rPr.isSetSpc()){
return Units.toPoints(POIXMLUnits.parseLength(rPr.xgetSpc()));
}
return 0;
@@ -192,19 +217,23 @@ public class XSSFTextRun {
* @return font family or null if not set
*/
public String getFontFamily(){
- CTTextCharacterProperties rPr = getRPr();
- CTTextFont font = rPr.getLatin();
- if(font != null){
- return font.getTypeface();
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if (rPr != null) {
+ CTTextFont font = rPr.getLatin();
+ if(font != null) {
+ return font.getTypeface();
+ }
}
return XSSFFont.DEFAULT_FONT_NAME;
}
- public byte getPitchAndFamily(){
- CTTextCharacterProperties rPr = getRPr();
- CTTextFont font = rPr.getLatin();
- if(font != null){
- return font.getPitchFamily();
+ public byte getPitchAndFamily() {
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if (rPr != null) {
+ CTTextFont font = rPr.getLatin();
+ if(font != null) {
+ return font.getPitchFamily();
+ }
}
return 0;
}
@@ -222,8 +251,8 @@ public class XSSFTextRun {
* @return whether a run of text will be formatted as strikethrough text.
Default is false.
*/
public boolean isStrikethrough() {
- CTTextCharacterProperties rPr = getRPr();
- if(rPr.isSetStrike()){
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if (rPr != null && rPr.isSetStrike()){
return rPr.getStrike() != STTextStrikeType.NO_STRIKE;
}
return false;
@@ -233,8 +262,8 @@ public class XSSFTextRun {
* @return whether a run of text will be formatted as a superscript text.
Default is false.
*/
public boolean isSuperscript() {
- CTTextCharacterProperties rPr = getRPr();
- if(rPr.isSetBaseline()){
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if (rPr != null && rPr.isSetBaseline()){
return POIXMLUnits.parsePercent(rPr.xgetBaseline()) > 0;
}
return false;
@@ -274,8 +303,8 @@ public class XSSFTextRun {
* @return whether a run of text will be formatted as a superscript text.
Default is false.
*/
public boolean isSubscript() {
- CTTextCharacterProperties rPr = getRPr();
- if(rPr.isSetBaseline()){
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if (rPr != null && rPr.isSetBaseline()){
return POIXMLUnits.parsePercent(rPr.xgetBaseline()) < 0;
}
return false;
@@ -285,8 +314,8 @@ public class XSSFTextRun {
* @return whether a run of text will be formatted as a superscript text.
Default is false.
*/
public TextCap getTextCap() {
- CTTextCharacterProperties rPr = getRPr();
- if(rPr.isSetCap()){
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if (rPr != null && rPr.isSetCap()) {
return TextCap.values()[rPr.getCap().intValue() - 1];
}
return TextCap.NONE;
@@ -305,8 +334,8 @@ public class XSSFTextRun {
* @return whether this run of text is formatted as bold text
*/
public boolean isBold(){
- CTTextCharacterProperties rPr = getRPr();
- if(rPr.isSetB()){
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if (rPr != null && rPr.isSetB()){
return rPr.getB();
}
return false;
@@ -323,8 +352,8 @@ public class XSSFTextRun {
* @return whether this run of text is formatted as italic text
*/
public boolean isItalic(){
- CTTextCharacterProperties rPr = getRPr();
- if(rPr.isSetI()){
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if (rPr != null && rPr.isSetI()){
return rPr.getI();
}
return false;
@@ -341,17 +370,21 @@ public class XSSFTextRun {
* @return whether this run of text is formatted as underlined text
*/
public boolean isUnderline(){
- CTTextCharacterProperties rPr = getRPr();
- if(rPr.isSetU()){
+ CTTextCharacterProperties rPr = getRPrOrNull();
+ if (rPr != null && rPr.isSetU()){
return rPr.getU() != STTextUnderlineType.NONE;
}
return false;
}
- protected CTTextCharacterProperties getRPr(){
+ protected CTTextCharacterProperties getRPr() {
return _r.isSetRPr() ? _r.getRPr() : _r.addNewRPr();
}
+ private CTTextCharacterProperties getRPrOrNull() {
+ return _r.isSetRPr() ? _r.getRPr() : null;
+ }
+
@Override
public String toString(){
return "[" + getClass() + "]" + getText();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]