Статьи

Преобразование данных из RTF в формат DITA с помощью Java

Одна из моих задач несколько лет назад состояла в том, чтобы преобразовать содержимое файлов 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 на другой язык программирования, как вам нравится.