0

将 html 加载到 WebView 后,我需要将字体系列更改为自定义字体系列。基本上我需要得到这个:

 <style>
            @font-face {
            font-family: 'MyFont';
            src: url('file:///android_asset/Custom-Font.otf')
            }
            body { font-family: 'MyFont', serif; font-size: 17px; color: #000; }
            a { color: #000; }
 </style>

<style>
            body { font-family: 'Helvetica', serif; font-size: 17px; color: #000; }
            a { color: #000; }
</style>

Html 是动态加载的,而不是从资产中加载的。我使用 Jsoup,但目前无法获得这个 font-family 参数......

4

1 回答 1

1

JSoup 不会为您解析 CSS。它最终DataNode挂在style元素上。从那里开始,您就可以自己进行解析了。如果您有一个简单的搜索和替换,您可以使用正则表达式来完成这项工作。对于复杂的情况,您可以查看 [CSS Parser][1]。您的情况看起来相对简单,但仅给出一个示例,很难说出您想要保留哪些元素。这是基本思想的草图,您可能需要修改以完全适合您的情况。基本思想是DataNodeStyle标签中获取并使用正则表达式来搜索和替换字段。

final String newFontInfo = "@font-face { \n"
        + "font-family: 'MyFont';\n"
        + "src: url('file:///android_asset/Custom-Font.otf')\n" + "}\n";
Elements styles = doc.select("style");
for (Element style : styles) {
    for (DataNode data : style.dataNodes()) {
        String dataTxt = data.getWholeData();
        if (dataTxt.contains("font-family")) {
             final String newData = dataTxt.replaceAll("font-family:\\s*'[^']*'","font-family: 'MyFont'");
             data.setWholeData(newFontInfo + newData);
        }
     }
 }
于 2013-01-15T16:31:26.040 回答