Одна из моих задач несколько лет назад состояла в том, чтобы преобразовать содержимое файлов RTF [ref] в формат DITA [ref] с помощью программы-конвертера, написанной на Java. В этой статье я хочу представить используемую библиотеку и функцию преобразования, которые использовались в процессе преобразования. Эта статья также служит напоминанием об используемых методах.
Чтобы завершить задачу преобразования, понадобилось несколько шагов преобразования. Конверсия:
-
из RTF в HTML.
-
из HTML в XML.
-
из XML через XSLT в DITA.
RTF в HTML
Java SDK имеет функцию, которая конвертирует файлы из RTF в HTML, которые неожиданно можно найти в «качающихся» библиотеках. Неожиданно, потому что библиотеки Swing обычно используются для создания элементов GUI и манипулирования ими. Я нашел это решение на некоторых форумах после поиска в сети. Код может выглядеть так:
public static String rtfToHtml(Reader rtf) throws IOException { 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; } // content as string String rtfText = ...; String htmlText = rtfToHtml(new StringReader(rtfText)); // content from file String htmlText = rtfToHtml(new FileReader(new File("myfile.rtf")));
Следующие ссылки были использованы для кода этой части статьи: [ref] и [ref] .
После этого преобразования файл в формате HTML. Поскольку последний шаг преобразования требует хорошо отформатированного файла XML в качестве входных данных для преобразования XSLT, для этой задачи было использовано новое преобразование между шагами. Одним из подходов является использование Java-реализации «tidy» -Tool [ref], известного как jTidy [ref] .
HTML в XML
«Tidy» -Tool обычно используется для проверки содержимого HTML или преобразования HTML в XHTML. Это бесплатно для использования и под лицензией Apache (версия 2.0). В программе на Java jTydy может выглядеть как [ref] :
Tidy tidy = new Tidy(); // obtain a new Tidy instance tidy.setXHTML(boolean xhtml); // set desired config options using tidy setters ... // (equivalent to command line options) tidy.setInputEncoding("utf-8"); tidy.setXmlOutput(true); tidy.setShowWarning(true); tidy.setQuiet(true); tidy.parse(inputStream, System.out); // run tidy, providing an input and output stream
Пример кода — параметр для вывода формата XHTML.
После этого шага у нас есть содержимое XHTML, которое можно использовать для преобразования через XSLT.
XML через XSLT в DITA
Идея последнего шага конвертации была описана в статье на сайте IBM, где объясняется процесс конвертации через файл h2d.xslt [ref] [ref] . Файл h2d.xslt может быть загружен с сайта DITA / OASIS [ref] и создан для целей преобразования XML. Для добавления пользовательских правил преобразования вы можете изменить этот XSLT-файл или использовать новый. Код для этого этапа обработки является обычным XSLT-преобразованием и выглядит как описание в одной из моих прошлых статей о Java и XML [ref] и [ref] .
Поскольку структура файлов XML может отличаться от проекта к проекту, я не буду здесь более подробно описывать правила XSLT. Вот почему решение этой части преобразования зависит от проекта / структуры и не может быть описано в целом. Возможно, вам также понадобятся внутренние шаги преобразования, пока вы не получите требуемую структуру ввода / вывода для дальнейшей обработки.
Другие ссылки, где эта тема является основной частью являются [ref] и [ref]
После последнего шага мы получаем файлы DITA, которые можно использовать в DITA-дружественном редакторе и использовать для дальнейшей обработки или вывода, например PDF, HTML, файл Microsoft® Word и т. Д. В качестве самого последнего шага возможно, что вам нужно связать ссылки файлов dita с файлом ditamap вручную и программно.
Резюме
Это краткое и расплывчатое описание, напоминающее напоминание об инструменте преобразования, который я написал несколько лет назад для внутренних целей. Он описывает использование некоторых внешних инструментов, используемых в процессе преобразования.
В этой статье описывается один из возможных способов преобразования данных из RTF в формат DITA. Это решение было разделено на несколько шагов преобразования, когда содержимое было преобразовано из одного формата в другой: RTF → HTML → XHTML → DITA.
Для создания такого вида преобразования, в котором используется преимущество преобразования XML, вам понадобятся следующие навыки:
- хорошее понимание языка программирования Java.
- очень хорошее понимание XSLT.
Если вам не нравится или вы хотите использовать Java, вы можете обменять часть Java на другой язык программирования, как вам нравится.