From 85212023d6a812f4caffa46d8572cbb1c886c644 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sun, 11 May 2025 13:26:06 +0000 Subject: [PATCH] try to avoid class cast issues git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1925500 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xssf/usermodel/XSSFTextParagraph.java | 13 ++++++++++--- .../org/apache/poi/xssf/usermodel/XSSFTextRun.java | 10 +++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java index 7878e63028..a39ab3a009 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java @@ -578,9 +578,16 @@ public class XSSFTextParagraph implements Iterable{ if(lnSpc > 0) { // check if the percentage value is scaled CTTextNormalAutofit normAutofit = _shape.getTxBody().getBodyPr().getNormAutofit(); - if(normAutofit != null) { - double scale = 1 - (double)normAutofit.getLnSpcReduction() / 100000; - lnSpc *= scale; + if(normAutofit != null && normAutofit.isSetLnSpcReduction()) { + final Object lnSpcReduction = normAutofit.getLnSpcReduction(); + final int divisor = 100000; + if (lnSpcReduction instanceof Number) { + double scale = 1 - ((Number) lnSpcReduction).doubleValue() / divisor; + lnSpc *= scale; + } else if (lnSpcReduction instanceof String) { + double scale = 1 - Double.parseDouble((String) lnSpcReduction) / divisor; + lnSpc *= scale; + } } } diff --git a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java index 97891a30ee..9768aafffc 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java @@ -130,7 +130,15 @@ public class XSSFTextRun { 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; + if (afit != null && afit.isSetFontScale()) { + final Object fs = afit.getFontScale(); + final int divisor = 100000; + if (fs instanceof Number) { + scale = ((Number) fs).doubleValue() / divisor; + } else if (fs instanceof String) { + scale = Double.parseDouble((String) fs) / divisor; + } + } CTTextCharacterProperties rPr = getRPrOrNull(); if(rPr != null && rPr.isSetSz()){