Я использую Jsoup
для анализа значения буфера обмена в HTML-код, но это не работает для subscript
и superscript
. Например:
Верхний индекс
Привет, Мир (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>
Любая идея, как я могу обрабатывать Superscript
и Subscript
с помощью 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;
}
sup
иsub
. Это не проблема JSoup, а просто проблема с этим методом (или исходными данными, которые не содержат того, что вы ожидаете). Этот метод, кажется, генерирует индекс какstyle
с меньшим размером текста. Нет возможности разобрать это семантически, только эвристически. 23.12.2013String htmldata = IOUtils.toString(is, "Unicode");
выдает ошибкуmethod toString in class Object cannot be applied to given types; required: no arguments found: InputStream,String reason: actual and formal argument lists differ in length
23.12.2013String htmldata = org.apache.commons.io.IOUtils.toString(is, "Unicode");
23.12.2013