Browse Source

REPORT-32796 h1-h6标签,默认字体加粗不生效,默认margin值不生效

release/10.0
Hugh.C 4 years ago
parent
commit
f8282f06ec
  1. 17
      fine-itext/src/main/java/com/fr/third/v2/lowagie/text/html/Markup.java
  2. 4
      fine-itext/src/main/java/com/fr/third/v2/lowagie/text/html/simpleparser/FactoryProperties.java
  3. 13
      fine-itext/src/main/java/com/fr/third/v2/lowagie/text/html/simpleparser/HTMLWorker.java
  4. 90
      fine-itext/src/main/java/com/fr/third/v2/lowagie/text/html/utils/DefaultPropertiesHandleUtils.java

17
fine-itext/src/main/java/com/fr/third/v2/lowagie/text/html/Markup.java

@ -52,6 +52,8 @@
package com.fr.third.v2.lowagie.text.html; package com.fr.third.v2.lowagie.text.html;
import com.fr.third.v2.lowagie.text.ElementTags;
import com.fr.third.v2.lowagie.text.html.simpleparser.ChainedProperties;
import java.awt.Color; import java.awt.Color;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -417,6 +419,21 @@ public class Markup {
return f; return f;
} }
/**
* 解析当前字号可能是继承来的
*
* @param cprops
* @return
*/
public static float parseDefaultFontSize(ChainedProperties cprops) {
if (null == cprops) {
return DEFAULT_FONT_SIZE;
}
String size = cprops.getProperty(ElementTags.SIZE);
return null == size ? Markup.DEFAULT_FONT_SIZE : Markup.parseLength(size,
Markup.DEFAULT_FONT_SIZE);
}
/** /**
* Converts a <CODE>Color</CODE> into a HTML representation of this <CODE> * Converts a <CODE>Color</CODE> into a HTML representation of this <CODE>
* Color</CODE>. * Color</CODE>.

4
fine-itext/src/main/java/com/fr/third/v2/lowagie/text/html/simpleparser/FactoryProperties.java

@ -211,14 +211,14 @@ public class FactoryProperties {
List<String> list = Markup.parseNESW(props.getPropertyFromChain("div", Markup.CSS_KEY_MARGIN)); List<String> list = Markup.parseNESW(props.getPropertyFromChain("div", Markup.CSS_KEY_MARGIN));
if (null != list && 4 == list.size()) { if (null != list && 4 == list.size()) {
for (int i = 0; i < HtmlConstants.MARGIN.size() && i < list.size(); i++) { for (int i = 0; i < HtmlConstants.MARGIN.size() && i < list.size(); i++) {
p.setAttribute(HtmlConstants.MARGIN.get(i), list.get(i)); p.setAttribute(HtmlConstants.MARGIN.get(i), String.valueOf(Markup.parseLength(list.get(i), Markup.parseDefaultFontSize(props))));
} }
} }
} }
for (String margin : HtmlConstants.MARGIN) { for (String margin : HtmlConstants.MARGIN) {
if (props.hasPropertyInChain("div", margin)) { if (props.hasPropertyInChain("div", margin)) {
String ss = props.getPropertyFromChain("div", margin); String ss = props.getPropertyFromChain("div", margin);
p.setAttribute(margin, ss); p.setAttribute(margin, String.valueOf(Markup.parseLength(ss, Markup.parseDefaultFontSize(props))));
} }
} }
} }

13
fine-itext/src/main/java/com/fr/third/v2/lowagie/text/html/simpleparser/HTMLWorker.java

@ -50,6 +50,7 @@
package com.fr.third.v2.lowagie.text.html.simpleparser; package com.fr.third.v2.lowagie.text.html.simpleparser;
import com.fr.third.v2.lowagie.text.html.utils.DefaultPropertiesHandleUtils;
import com.fr.third.v2.lowagie.text.pdf.PdfFont; import com.fr.third.v2.lowagie.text.pdf.PdfFont;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@ -211,17 +212,7 @@ public class HTMLWorker implements SimpleXMLDocHandler, DocListener {
return; return;
try { try {
style.applyStyle(tag, h); style.applyStyle(tag, h);
if(tag.equals("p")){ DefaultPropertiesHandleUtils.fillDefaultProperties(tag, h);
h.put(Markup.CSS_KEY_MARGINTOP, "16px");
h.put(Markup.CSS_KEY_MARGINBOTTOM, "16px");
}
if (tag.equals("th")) {
h.put("b", null);
}
if (tag.equals(HtmlTags.ANCHOR)) {
h.put("u", null);
h.put("color", "blue");
}
String follow = (String) FactoryProperties.followTags.get(tag); String follow = (String) FactoryProperties.followTags.get(tag);
if (follow != null) { if (follow != null) {
HashMap prop = new HashMap(); HashMap prop = new HashMap();

90
fine-itext/src/main/java/com/fr/third/v2/lowagie/text/html/utils/DefaultPropertiesHandleUtils.java

@ -0,0 +1,90 @@
package com.fr.third.v2.lowagie.text.html.utils;
import com.fr.third.v2.lowagie.text.html.HtmlTags;
import com.fr.third.v2.lowagie.text.html.Markup;
import java.util.HashMap;
import java.util.Properties;
/**
* 处理标签默认属性值
*
* @author Hugh.C
* @version 1.0
* Created by Hugh.C on 2020/7/3
*/
public class DefaultPropertiesHandleUtils {
//h1-h6 标签默认字体大小
private static final HashMap<String, String> H_TAG_DEFAULT_FONT_SIZE = new HashMap<String, String>(6);
//h1-h6 标签默认margin-top and bottom大小
private static final HashMap<String, String> H_TAG_DEFAULT_MARGIN = new HashMap<String, String>(6);
static {
H_TAG_DEFAULT_FONT_SIZE.put("h1", "2em");
H_TAG_DEFAULT_FONT_SIZE.put("h2", "1.5em");
H_TAG_DEFAULT_FONT_SIZE.put("h3", "1.17em");
H_TAG_DEFAULT_FONT_SIZE.put("h4", "1em");
H_TAG_DEFAULT_FONT_SIZE.put("h5", "0.83em");
H_TAG_DEFAULT_FONT_SIZE.put("h6", "0.67em");
H_TAG_DEFAULT_MARGIN.put("h1", "0.67em");
H_TAG_DEFAULT_MARGIN.put("h2", "0.83em");
H_TAG_DEFAULT_MARGIN.put("h3", "1em");
H_TAG_DEFAULT_MARGIN.put("h4", "1.33em");
H_TAG_DEFAULT_MARGIN.put("h5", "1.67em");
H_TAG_DEFAULT_MARGIN.put("h6", "2.33em");
}
/**
* 填充默认属性值
*
* @param tag
* @param h
*/
public static void fillDefaultProperties(String tag, HashMap h) {
if (null == tag || null == h) {
return;
}
if (HtmlTags.HEADERCELL.endsWith(tag)) {
h.put("b", null);
return;
}
if (HtmlTags.ANCHOR.equals(tag)) {
h.put("u", null);
h.put("color", "blue");
return;
}
String style = (String) h.get("style");
if (HtmlTags.PARAGRAPH.equals(tag)) {
Properties props = Markup.parseAttributes(style);
if (!props.containsKey(Markup.CSS_KEY_MARGINTOP)) {
h.put(Markup.CSS_KEY_MARGINTOP, "1em");
}
if (!props.containsKey(Markup.CSS_KEY_MARGINBOTTOM)) {
h.put(Markup.CSS_KEY_MARGINBOTTOM, "1em");
}
return;
}
if (H_TAG_DEFAULT_FONT_SIZE.containsKey(tag)) {
h.put("b", null);
Properties props = Markup.parseAttributes(style);
if (!props.containsKey(Markup.CSS_KEY_MARGINTOP)) {
h.put(Markup.CSS_KEY_MARGINTOP, H_TAG_DEFAULT_MARGIN.get(tag));
}
if (!props.containsKey(Markup.CSS_KEY_MARGINBOTTOM)) {
h.put(Markup.CSS_KEY_MARGINBOTTOM, H_TAG_DEFAULT_MARGIN.get(tag));
}
if (!props.containsKey(Markup.CSS_KEY_FONTSIZE)) {
h.put("style", new StringBuilder(null == style ? "" : style).append(";")
.append(Markup.CSS_KEY_FONTSIZE).append(":").append(H_TAG_DEFAULT_FONT_SIZE.get(tag)).append(";").toString());
}
return;
}
}
}
Loading…
Cancel
Save