gpt4 book ai didi

java - jsoup 解析下标和上标的html

转载 作者:可可西里 更新时间:2023-11-01 14:50:20 29 4
gpt4 key购买 nike

我正在使用 Jsoup将剪贴板值解析为 html 代码,但它不适用于 subscriptsuperscript .例如:

上标
你好世界(HTML:<b>Hello <sup>World</sup></b>)

下标
你好世界(HTML:<b>Hello <sub>World</sub></b>)

代码

result = rtfToHtml(new StringReader(streamToString((InputStream) contents.getTransferData(dfRTF))));

上面例子的结果是:

< html >
< head >
< style >
< !--
p.default {
size:3;
family:sansserif;
foreground:#000000;
bold:normal;
italic:;
}
-- >
< /style >
< /head >
< body >
< p class=default >
< span style="color: #000000; font-size: 14pt; font-family: ArialMT">
< b>Hello < /b>
< /span>
< span style="color: #000000; font-size: 11pt; font-family: ArialMT">
< b>World< /b>
< /span>
< /p>
< /body>
< /html>

知道如何处理 SuperscriptSubscript使用 Jsoup。非常感谢任何建议或引用。

编辑

        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable contents = clipboard.getContents(null);
DataFlavor dfRTF = new DataFlavor("text/rtf", "Rich Formatted Text");
DataFlavor dfTxt = DataFlavor.stringFlavor;

boolean hasTransferableRTFText = (contents != null)
&& contents.isDataFlavorSupported(dfRTF);
boolean hasTransferableTxtText = (contents != null)
&& contents.isDataFlavorSupported(dfTxt);
if (hasTransferableRTFText) {
try {
result = rtfToHtml(new StringReader(streamToString((InputStream) contents.getTransferData(dfRTF))));
Document doc = Jsoup.parse(result);
}
}

编辑

public static String rtfToHtml(Reader rtf) throws IOException { // From http://www.codeproject.com/Tips/136483/Java-How-to-convert-RTF-into-HTML
JEditorPane p = new JEditorPane();
p.setContentType("text/rtf");
EditorKit kitRtf = p.getEditorKitForContentType("text/rtf");
try {
kitRtf.read(rtf, p.getDocument(), 0);
kitRtf = null;
EditorKit kitHtml = p.getEditorKitForContentType("text/html");
Writer writer = new StringWriter();
kitHtml.write(writer, p.getDocument(), 0, p.getDocument().getLength());
return writer.toString();
} catch (BadLocationException e) {
e.printStackTrace();
}
return null;
}

最佳答案

您的问题与 JSoup 无关,而是与您的 rtfToHtml 函数有关。

您的函数不会生成您期望的 标记。JSoup 在这一步不能做任何事情,因为预期的标签不在这里,所以你不能解析它们。

编辑:(和解决方案)

如无必要,您应该跳过 rtfToHTML 步骤。如果剪贴板包含已经为 HTML 格式的数据,那么在 rtf 中请求它然后将其转换回 HTML 意味着在转换过程中会丢失格式信息。

可以直接获取HTML格式的剪贴板,避免不必要的转换:

DataFlavor dfHTML = new DataFlavor("text/html; charset=Unicode");
boolean hasTransferableHTMLText = (contents != null) && contents.isDataFlavorSupported(dfHTML);
if (hasTransferableHTMLText)
{
InputStream is = (InputStream)contents.getTransferData(dfHTML);
String htmldata = org.apache.commons.io.IOUtils.toString(is, "Unicode");

Document doc = Jsoup.parse(htmldata);
System.out.println(doc.html());
//...
}

测试了从 Chrome 和 FF 复制到剪贴板。两者都保留了您期望的 标签。

编辑 2:

IOUtils指的是org.apache.commons.io.IOUtils

关于java - jsoup 解析下标和上标的html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20699446/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com