Преобразовать HTML и CSS в DOC(X)?

Есть ли какая-нибудь утилита, которую можно вызвать через командную строку для создания файла doc(x)? Исходный файл будет HTML и CSS.

Я пытаюсь генерировать документы Word на лету с помощью PHP. Я знаю только библиотеку phpdocx, которая очень низкого уровня и не очень полезна для меня (у меня уже есть одна плохая реализация генерации документов Word).

Что мне нужно от документа:

  • ТОС
  • Картинки
  • Нижние колонтитулы/заголовки (могут быть созданы вручную на каждой HTML-странице)
  • Стол
  • Списки
  • Разрыв страницы (возможность решить, что на какую страницу перейти, например, один HTML-файл на страницу, объединить несколько HTML-файлов для создания всего документа).
  • Пункты
  • Основные жирные/и т.д. стили

person Tower    schedule 04.01.2012    source источник
comment
Поскольку документы HTML/CSS и Word представляют собой две совершенно разные модели документов, можно подумать, что такая утилита еще больше усложнит создание документа Word. Как вы выражаете верхние и нижние колонтитулы на HTML-странице для начинающих? Но кто знает, может быть, кто-нибудь что-нибудь придумает... :)   -  person deceze♦    schedule 04.01.2012
comment
@deceze Думаю, очевидно, что они разные. Вы не можете поместить видео HTML5 в документ Word, не так ли? Суть заключалась в том, чтобы преобразовать ‹p› в абзац Word, то же самое для ‹table› и ‹li›, у которых есть аналоги в Word. Разные страницы будут создаваться с разными файлами HTML, объединенными в один документ. Нижние колонтитулы и верхние колонтитулы можно было просто разместить на каждой странице отдельно.   -  person Tower    schedule 04.01.2012
comment
@rFactor Я думаю, что лучшим выбором будет комбинация DOM и PHPWord.   -  person DaveRandom    schedule 04.01.2012
comment
На что он указывает (правильно), так это на то, что один из них — выгружаемый носитель, а другой — нет. В любом случае, формат docx по существу состоит из XML-файлов внутри zip-архива, поэтому вы можете выполнить базовое преобразование из HTML в этот XML с помощью XSLT. Это, однако, не может помочь с CSS, и было бы сложно реализовать прилично. Что именно вас не устраивает в PHPDOCX?   -  person Viruzzo    schedule 04.01.2012
comment
@rFactor Я просто просматривал домашнюю страницу PHPWord (давно не был там) и наткнулся на это ...   -  person DaveRandom    schedule 04.01.2012
comment
@rFactor Ну, на самом деле вы можете размещать видео в документе Word... :-3   -  person deceze♦    schedule 05.01.2012


Ответы (2)


Я тоже не нашел PHPDOCX очень полезным. Альтернативой может быть PHPWord, я думаю, что он охватывает то, что вам нужно. Согласно веб-сайту, он может делать следующие вещи:

  • Вставка и форматирование разделов документа
  • Вставка и форматирование текстовых элементов
  • Вставить разрывы текста
  • Вставить разрывы страниц
  • Вставка и форматирование изображений и двоичных OLE-объектов
  • Вставка и форматирование водяных знаков (новое)
  • Вставить верхний/нижний колонтитул
  • Вставка и форматирование таблиц
  • Вставьте собственные заголовки и оглавление
  • Вставка и форматирование элементов списка
  • Вставка и форматирование гиперссылок
  • Очень простая система шаблонов (новинка)

В вашем случае этого недостаточно, но есть плагин для преобразования (базового) HTML в Docx, и, на мой взгляд, он работает очень хорошо. http://htmltodocx.codeplex.com/

Пользуюсь уже год или два и доволен. Хотя я должен добавить, что HTML не может быть сложным.

person mat    schedule 04.01.2012

Я обычно делаю это так: у меня есть файл шаблона документа Word с частями, которые я хочу заменить, используя ключевые слова (обычно что-то вроде «{FIRSTNAME}»). Это позволяет вам прочитать файл через PHP, а затем просто выполнить str_replace для всех частей, которые вы хотите заменить, а затем записать это в другой файл.

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

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

person Nick    schedule 04.01.2012
comment
Мне нужно много IF и LOOP в этих шаблонах, поэтому я не могу просто заменить их. - person Tower; 04.01.2012