Программно очищать сгенерированный Word HTML, сохраняя стили? - PullRequest
9 голосов
/ 11 мая 2010

В моей нынешней компании у нас есть это десятилетие ... давайте назовем его " Hello World ".

Желая создать более новую версию, мы также хотим сохранить более старые записи. Эти старые записи содержат отвратительный HTML-код, сгенерированный Word, который ранее никогда не фильтровался.

Если и когда мы перейдем на более новую систему, я бы предпочел очистить и отфильтровать этот HTML-код, чтобы сайт максимально соответствовал стандартам HTML.
Однако простая очистка этого кода, например, Джеффа Этвуда, описанного в его блоге или любым другим способом, о котором я знаю, также разрушит стиль и форматирование.

Теперь, это может вызвать у наших пользователей бунт, и тогда весь ад развалится - не очень хорошая идея.

Итак, вопрос в следующем: Можно ли очистить HTML в Word при сохранении базового форматирования? (например, раскраска, курсив, полужирный текст и т. Д.)

Желательно использовать общедоступный код или библиотеку, такую ​​как HTML Tidy , примеры в C # будут очень благодарны.

Ответы [ 8 ]

3 голосов
/ 15 мая 2010

Существует несколько доступных вариантов, но вы, безусловно, можете использовать Джеффа Этвуда в качестве хорошей отправной точки для написания собственного кода. Если это так, вы, вероятно, получите точный контроль над результатом - обратите внимание, что результаты никогда не будут на 100% точными, так как весь этот дополнительный ms-код на самом деле присутствует, чтобы обеспечить как можно большую точность исходного документа ( по крайней мере, в IE для целей кругового отключения). Но большая часть кода сохраняет большинство форматирования.

Вот несколько библиотек кода, которые могут быть полезны:

Если вы просто хотите пакетной обработки (и не заботитесь о владении кодовой базой), HTML-фильтр Office 2000 2.0 , вероятно, ваш лучший вариант - узнайте больше об этом на TechRepublic .

2 голосов
/ 15 мая 2010

Этот вопрос SO создает аналогичную проблему, хотя там программная очистка не требуется.

В одном из ответов упоминается, что в Office 2007 есть пункт меню «Опубликовать-> Блог», который, как сообщается, дает хорошие результаты и работает быстро. Вы можете создать макрос из Word, чтобы вызвать эту команду, а затем программно вызвать макрос. Вы можете использовать COM или VBScript, чтобы запустить word и запустить макрос, или запустить winword.exe с ключом / m. Командная строка переключается на winword.exe здесь .

2 голосов
/ 15 мая 2010

tidy отлично работает для очистки и упорядочения синтаксиса html.

Это очень настраиваемый, поэтому для пакетной очистки, скорее всего, инструмент командной строки сделает то, что вам нужно. У вас нет запрограммировать себя самостоятельно.

Если вам нужно сделать более сложную очистку контента - не только синтаксис - некоторые процессоры xslt (xsltproc, для одного) есть опция --html: входные файлы анализируются анализатором html парсера xml. Затем вы можете использовать xslt для преобразования или перестановки содержимое, затем вывод с помощью сериализатора html.

1 голос
/ 15 июля 2015

HtmlRuleSanitizer (доступно на NuGet ) может сделать это для вас из коробки.

Он использует HTML Agility Pack для анализа HTML-кода и использует набор правил на основе белого списка для сохранения форматирования. Наборы правил по умолчанию избавляют практически от всего подробного HTML-кода MS Word, сохраняя базовую структуру документа, такую ​​как теги заголовка, полужирный, курсив и т. Д.

Если вы хотите сохранить определенный стиль MS Word, вам придется создать или адаптировать набор правил для вашего варианта использования.

Например, он легко преобразует сотни строк HTML-кода, которые MS Word сгенерирует для документа, содержащего следующее:

Заголовок один

Абзац

Заголовок два

Жирный

Курсив

Ссылка

Только для следующего набора относительно чистого HTML:

<html>
<body>
<h1><span>Heading</span> <span>one</span></h1>
<p><span>Paragraph</span></p>
<h2><span>Heading</span> <span>two</span></h2>
<p><span><strong>Bold</strong></span><strong></strong></p>
<p><span><i>Italic</i></span><i></i></p>
<p><i><a href="http://www.google.com/" target="_blank" rel="nofollow">Link</a></i></p>
</body>
</html>

Обратите внимание, что некоторые из раздражающих вещей, которые MS Word выполняет, например, очень часто открывают и закрывают теги (см. Элементы span в примере), очищаются не полностью.

1 голос
/ 18 мая 2010

PSPad включает в себя приборку, которая имеет опцию «Очистить Microsoft Word 2000», которую я раньше использовал для текстовых документов, и она настраивается.

1 голос
/ 15 мая 2010

Взгляните на FCKEditor , его редактор на основе javascript, поэтому просмотр источника может дать вам много подсказок относительно того, что нужно искать при удалении слова HTML.

В частности, взгляните на файл /editor/dialog/fck_paste.html. Там есть функция, «CleanWord» делает все это. Я изменил его для использования в моих собственных приложениях (небольшие изменения, т. Е. Различные замены и т. Д.), Однако он отлично справляется с задачей избавления от уродливого Word HTML.

Он использует регулярные выражения для поиска и замены, что означает, что вы можете легко добавить регулярное выражение и импортировать его на другой язык программирования по вашему выбору для запуска пакетного задания.

1 голос
/ 11 мая 2010

Есть бюджет для этого. Это может Работа . Попробуйте, прежде чем купить.

0 голосов
/ 10 июля 2015

Вот набор сценариев PowerShell, которые будут чистить HTML, отфильтрованный по Word, и правильно помечать супер / подписки примерно в 95% случаев. (Нет, лучше не получится, Word создан для печати.)

https://github.com/suzumakes/replaceit

Базовое форматирование сохраняется, теги становятся тегами, а теги становятся тегами. Я думаю, это то, что вы ищете, и хотя вам не следует использовать Regex для разбора HTML, HTML с фильтрами Word практически не фильтруется, но он чист после того, как на нем запущены эти сценарии PowerShell.

Инструкции есть в ReadMe, и если вы столкнетесь с какими-либо дополнительными символами, которые нужно поймать или придумать какие-либо изменения / улучшения, я был бы рад увидеть ваш запрос на извлечение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...