Почему синие строки кавычек не поддерживаются должным образом при преобразовании RTF в HTML? - PullRequest
0 голосов
/ 03 октября 2011

Я сохранил ответ электронной почты Outlook, над которым я работал, как документ RTF, , который я загрузил .

Что я хотел бы сделать, это преобразовать этот RTF-документ в HTML. Я пробовал различные способы - LibreOffice, различные утилиты преобразования и, конечно, Microsoft Word. Большая часть разметки преобразуется нормально, но кажется, что-то «волшебное» в синих кавычках слева. Я просто не могу заставить их быть точно преобразованными.

Большинство утилит конвертации просто отбрасывают их. Что касается Microsoft Word; когда я открываю файл изначально, он выглядит нормально (встроенные ответы не имеют синей строки кавычек, текст в кавычках - нет). Однако, когда я сохраняю его в HTML в Word, а затем открываю этот файл HTML, синяя строка кавычек сохраняется до первого ответа («Действительно, это так»), а после этого он исчезает. Почему оставшиеся части синей строки цитаты уничтожаются в процессе преобразования и как я могу заставить их остаться там?

Кстати, точно такая же проблема возникает, если я вместо этого сохраняю электронную почту Outlook в формате DOCX, открываю ее в Word и сохраняю как HTML. Кажется, есть что-то запатентованное и / или эзотерическое в способе реализации этих строк кавычек. Ниже приведены скриншоты того, как это должно выглядеть (т.е. после того, как я первоначально открыл его в Word), и как оно выглядит (т.е. после того, как оно было сохранено в формате HTML).


Должен выглядеть так:
enter image description here


выглядит так:
enter image description here

1 Ответ

0 голосов
/ 04 октября 2011

ОК, я экспериментировал с 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, включая голубые квотелины.

...