diff --git a/designer-form/src/main/java/com/fr/design/form/util/FontTransformUtil.java b/designer-form/src/main/java/com/fr/design/form/util/FontTransformUtil.java
index 769707ebe5..eab2a64bb3 100644
--- a/designer-form/src/main/java/com/fr/design/form/util/FontTransformUtil.java
+++ b/designer-form/src/main/java/com/fr/design/form/util/FontTransformUtil.java
@@ -5,6 +5,7 @@ import com.fr.design.ExtraDesignClassManager;
import com.fr.design.fun.FormAdaptiveConfigUIProcessor;
import com.fr.stable.Constants;
import com.fr.stable.unit.PT;
+import java.math.BigDecimal;
/**
@@ -43,4 +44,11 @@ public class FontTransformUtil {
return value * (double) Constants.DEFAULT_FONT_PAINT_RESOLUTION / (double) getDesignerFontResolution();
}
+
+ public static int roundUp(double num) {
+ String numStr = Double.toString(num);
+ numStr = new BigDecimal(numStr).setScale(0, BigDecimal.ROUND_HALF_UP).toString();
+ return Integer.valueOf(numStr);
+ }
+
}
diff --git a/designer-form/src/main/java/com/fr/design/form/util/HtmlPaintUtils.java b/designer-form/src/main/java/com/fr/design/form/util/HtmlPaintUtils.java
new file mode 100644
index 0000000000..f8620f52d2
--- /dev/null
+++ b/designer-form/src/main/java/com/fr/design/form/util/HtmlPaintUtils.java
@@ -0,0 +1,42 @@
+package com.fr.design.form.util;
+
+import com.fr.base.Style;
+import com.fr.general.FRFont;
+import com.fr.log.FineLoggerFactory;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 富文本导出工具栏
+ *
+ * @author hades
+ * @version 11.0
+ * Created by hades on 2022/5/19
+ */
+public class HtmlPaintUtils {
+
+
+ private static final Pattern FONT_SIZE_PATTERN = Pattern.compile(Pattern.quote("font-size:") + "(.*?)" + Pattern.quote("px"));
+
+ /**
+ * 设置单元格字体为富文本中的最大字体
+ *
+ * @param style
+ */
+ public static Style deriveMaxFontFromRichChar(Style style, String html) {
+ int maxSize = style.getFRFont().getSize();
+ Matcher matcher = FONT_SIZE_PATTERN.matcher(html);
+ while (matcher.find()) {
+ String value = matcher.group(1);
+ try {
+ double pxSize = Double.parseDouble(value);
+ int ptSize = FontTransformUtil.roundUp(FontTransformUtil.px2pt(pxSize));
+ maxSize = Math.max(maxSize, ptSize);
+ } catch (Throwable e) {
+ FineLoggerFactory.getLogger().debug(e.getMessage(), e);
+ }
+ }
+ FRFont cellFont = style.getFRFont();
+ return style.deriveFRFont(cellFont.applySize(maxSize));
+ }
+}
diff --git a/designer-form/src/test/java/com/fr/design/form/util/HtmlPaintUtilsTest.java b/designer-form/src/test/java/com/fr/design/form/util/HtmlPaintUtilsTest.java
new file mode 100644
index 0000000000..445e865ab4
--- /dev/null
+++ b/designer-form/src/test/java/com/fr/design/form/util/HtmlPaintUtilsTest.java
@@ -0,0 +1,49 @@
+package com.fr.design.form.util;
+
+import com.fr.base.Style;
+import junit.framework.TestCase;
+import org.junit.Assert;
+
+
+/**
+ * @author hades
+ * @version 11.0
+ * Created by hades on 2022/5/25
+ */
+public class HtmlPaintUtilsTest extends TestCase {
+
+ public void testDeriveMaxFontFromRichChar() {
+ // 富文本字体size更大
+ String testHtml0 = "这是一条测试数据";
+ Style style0 = Style.DEFAULT_STYLE;
+ Assert.assertEquals(16, HtmlPaintUtils.deriveMaxFontFromRichChar(style0, testHtml0).getFRFont().getSize());
+
+ // 单元格字体size更大
+ String testHtml1 = "这是一条测试数据";
+ Style style1 = Style.DEFAULT_STYLE;
+ int oldFontSize = style1.getFRFont().getSize();
+ Assert.assertEquals(oldFontSize, HtmlPaintUtils.deriveMaxFontFromRichChar(style1, testHtml1).getFRFont().getSize());
+
+ // 富文本字体size更大 不同文本 有不同size
+ String testHtml2 = "这是一条测试数据";
+ Style style2 = Style.DEFAULT_STYLE;
+ Assert.assertEquals(23, HtmlPaintUtils.deriveMaxFontFromRichChar(style2, testHtml2).getFRFont().getSize());
+
+
+ // 异常场景1
+ String testHtml3 = "xxxx奇怪的格式xxxx";
+ Style style3 = Style.DEFAULT_STYLE;
+ oldFontSize = style1.getFRFont().getSize();
+ Assert.assertEquals(oldFontSize, HtmlPaintUtils.deriveMaxFontFromRichChar(style3, testHtml3).getFRFont().getSize());
+
+ // 异常场景2
+ String testHtml4 = "这是一条测试数据";
+ Style style4 = Style.DEFAULT_STYLE;
+ oldFontSize = style1.getFRFont().getSize();
+ Assert.assertEquals(oldFontSize, HtmlPaintUtils.deriveMaxFontFromRichChar(style4, testHtml4).getFRFont().getSize());
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextCellEditor.java b/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextCellEditor.java
index 1019281355..1d2a5eda26 100644
--- a/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextCellEditor.java
+++ b/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextCellEditor.java
@@ -1,5 +1,8 @@
package com.fr.design.cell.editor;
+import com.fr.design.mainframe.DesignerContext;
+import com.fr.general.GeneralUtils;
+import com.fr.design.form.util.HtmlPaintUtils;
import java.awt.Component;
import javax.swing.SwingUtilities;
@@ -42,6 +45,11 @@ public class RichTextCellEditor extends AbstractCellEditor implements
@Override
public void doOk() {
RichTextCellEditor.this.fireEditingStopped();
+ CellElement newCellElement = parentTplEC.getTemplateCellElement(cellElement.getColumn(), cellElement.getRow());
+ if (cellElement.getCellGUIAttr().isShowAsHTML()) {
+ newCellElement.setStyle(HtmlPaintUtils.deriveMaxFontFromRichChar(newCellElement.getStyle(), GeneralUtils.objectToString(newCellElement.getValue())));
+ DesignerContext.getDesignerFrame().refreshToolbar();
+ }
}
@Override
@@ -49,7 +57,6 @@ public class RichTextCellEditor extends AbstractCellEditor implements
RichTextCellEditor.this.fireEditingCanceled();
}
});
- richTextDialog.addDialogActionListener(this);
this.richTextPane.populate(parentTplEC, cellElement);
setShowAsHtml(cellElement);
diff --git a/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java b/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java
index f95681be32..74654cd2ef 100644
--- a/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java
+++ b/designer-realize/src/main/java/com/fr/design/cell/editor/RichTextToolBar.java
@@ -366,9 +366,7 @@ public class RichTextToolBar extends BasicPane {
};
private int roundUp(double num) {
- String numStr = Double.toString(num);
- numStr = new BigDecimal(numStr).setScale(0, BigDecimal.ROUND_HALF_UP).toString();
- return Integer.valueOf(numStr);
+ return FontTransformUtil.roundUp(num);
}
private CaretListener textCareListener = new CaretListener() {