ОК, я экспериментировал с DOCX-версией этого сохраненного электронного письма (я сохранил его как в формате RTF, так и в формате DOCX), и я нашел и решил эту проблему.Я предполагаю, что та же самая проблема каким-то образом попала в RTF-версию файла, возможно, потому, что способ, которым Microsoft реализует синий квотелин в RTF, состоит в том, чтобы просто использовать какое-то собственное расширение RTF, которое хранит необходимые дополнительные данные стиля,в любом случае хранится в DOCX - это объясняет, почему я теряю квотелин, когда использую что-либо, кроме MS Word, чтобы открыть указанный RTF.Поскольку RTF является довольно уродливым форматом, и я нахожу, что с DOCX намного проще работать, я опишу мое исправление DOCX ниже.
Проблема с DOCX заключалась в следующем: Word определяет кучу абзацев в document.xml
часть пакета документов в формате Outlook, связывает некоторые из них с divId
s, а затем определяет отдельную часть websettings.xml
, чтобы согласиться с ней.Если вы разбили синий квотелин в Outlook, нажав Ctrl + Q, как я делал для создания этого DOCX, Word помечает каждый абзац префиксом синего квотелина с тем же divId
, а затем просто имеет этот divId
определено в websettings.xml
;Итак, вы получите что-то вроде этого в document.xml
(я отформатировал его немного лучше, чем одну длинную строку, полученную из MS Word):
<w:p w:rsidR="00ED60D7" w:rsidRPr="007B768D" w:rsidRDefault="00ED60D7" w:rsidP="007B768D">
<w:pPr>
<w:divId w:val="1800686860"/>
</w:pPr>
<w:r w:rsidRPr="007B768D">
<w:t>Let's do some inline quoting when replying to it.</w:t>
</w:r>
</w:p>
[...]
<w:p w:rsidR="00ED60D7" w:rsidRPr="007B768D" w:rsidRDefault="00ED60D7" w:rsidP="007B768D">
<w:pPr>
<w:divId w:val="1800686860"/>
</w:pPr>
<w:r w:rsidRPr="007B768D">
<w:t>Best regards,</w:t>
</w:r>
</w:p>
... и что-то подобное вwebsettings.xml
(форматирование снова стало красивее):
<w:div w:id="1800686860">
<w:marLeft w:val="0"/>
<w:marRight w:val="0"/>
<w:marTop w:val="0"/>
<w:marBottom w:val="0"/>
<w:divBdr>
<w:top w:val="none" w:sz="0" w:space="0" w:color="auto"/>
<w:left w:val="single" w:sz="12" w:space="4" w:color="0000FF"/>
<w:bottom w:val="none" w:sz="0" w:space="0" w:color="auto"/>
<w:right w:val="none" w:sz="0" w:space="0" w:color="auto"/>
</w:divBdr>
<w:divsChild>
<w:div w:id="1800686861">
<w:marLeft w:val="0"/>
<w:marRight w:val="0"/>
<w:marTop w:val="0"/>
<w:marBottom w:val="0"/>
<w:divBdr>
<w:top w:val="none" w:sz="0" w:space="0" w:color="auto"/>
<w:left w:val="none" w:sz="0" w:space="0" w:color="auto"/>
<w:bottom w:val="none" w:sz="0" w:space="0" w:color="auto"/>
<w:right w:val="none" w:sz="0" w:space="0" w:color="auto"/>
</w:divBdr>
<w:divsChild>
<w:div w:id="1800686862">
<w:marLeft w:val="0"/>
<w:marRight w:val="0"/>
<w:marTop w:val="0"/>
<w:marBottom w:val="0"/>
<w:divBdr>
<w:top w:val="single" w:sz="8" w:space="3" w:color="B5C4DF"/>
<w:left w:val="none" w:sz="0" w:space="0" w:color="auto"/>
<w:bottom w:val="none" w:sz="0" w:space="0" w:color="auto"/>
<w:right w:val="none" w:sz="0" w:space="0" w:color="auto"/>
</w:divBdr>
</w:div>
</w:divsChild>
</w:div>
</w:divsChild>
</w:div>
Итак, на один w:div
, определенный в websettings.xml, ссылаются несколько раз в document.xml
.Теперь, хотя это, кажется, работает нормально, когда вы открываете файл как DOCX в MS Word, это становится серьезной проблемой, когда вы хотите преобразовать документ в HTML.Похоже, что преобразование XSLT применяется к document.xml, и поскольку в XML в документе должен быть только один элемент с определенным идентификатором, преобразование применяет только стиль websettings.xml
к first абзац в document.xml
с divId
из 1800686860
.В моем примере это абзац, содержащий информацию заголовка и первую строку («From: Joe Bloggs [...] Это начальное электронное письмо».) Остальные абзацы с этим divId
НЕ ПОЛУЧАЮТстиль в websettings.xml
.
Поскольку стили для divId
из 1800686860
в websettings.xml
вызывают появление синего квотелина слева, остальные абзацы, которые мы хотим получить, -квотелин не получает его, потому что стиль не применяется ни к одному из оставшихся абзацев!На мой взгляд, это неприятная ошибка в MS Word - она позволяет самому генерировать XML, как это, что приводит к нарушению преобразования HTML.
Исправление?Найти все абзацы в document.xml
с дубликатами divId
s.Запишите их.Затем для каждого divId
с дубликатами создайте копию его w:div
элемента в websettings.xml
и назначьте копии новый уникальный идентификатор для каждого дублированного экземпляра в document.xml
.Затем измените каждый дубликат ID в document.xml
на одну из копий.Как только эти изменения внесены (поэтому каждый абзац действительно связан с отдельным уникальным w:div
в websettings.xml
), и вы сохраняете измененный DOCX в виде файла HTML в Word ... это работает!Сгенерированный файл HTML выглядит практически идентично DOCX, включая голубые квотелины.