Intereting Posts
Согласование целевой команды обработки « » недопустимо Проверьте, не сериализована ли строка? Как отображать значения данных круговой диаграммы для каждого фрагмента в chart.js Что не так с этим, где предложение запроса zend Как обновить URI веб-страницы автоматически? jquery ajax – возвращает json или plain html лучше Получать значения из нескольких полей выбора с одинаковым именем? Включая его значение с jquery и php Удалите все знаки препинания из строки php для дружественного seo url Предотвращение PHP XSS WhiteListing Как проверить ввод формы на одной странице с помощью случайных чисел? Почему я получаю эту ошибку с Laravel: PHP Catchable Fatal Error? HTML в PDF против программного создания PDF через PHP CakePHP: сайт не открывается на веб-сервере Проблема MIGRATION отлично работает на localhost jQuery постоянно ping для ответа Ajax Несколько динамических Highcharts на одной странице с json

OpenTbs конвертировать html-теги в теги MS Word

Я использую OpenTbs, http://www.tinybutstrong.com/plugins/opentbs/tbs_plugin_opentbs.html .

У меня есть template.docx и я могу заменить поля контентом, но если у содержимого есть html-код, он отображается в документе, созданном шаблоном.

First list <br /> Second Line 

Я попытался использовать:

 $TBS->LoadTemplate('document.docx', OPENTBS_ALREADY_XML); 

Думаю, это позволит мне заменить мои теги html метками офисного офиса ms, но вместо этого он просто показал теги MS Office в документе:

 First Line<w:br/> Second Line 

Как преобразовать теги HTML в эквивалент MS Office XML.

    Поскольку у вас есть функция преобразования HTML для DOCX, вы можете реализовать ее в OpenTBS, используя пользовательскую функцию PHP и параметр «onformat».

    Следующая функция преобразует только разрывы строк:

     function f_html2docx($FieldName, &$CurrVal) { $CurrVal= str_replace('<br />', '<w:br/>', $CurrVal); } 

    Использовать в шаблоне DOCX:

     [b.thetext;onformat=f_html2docx] 

    О преобразовании HTML в DOCX:

    Преобразование форматированного текста в другой форматированный текст довольно часто является кошмаром. Поэтому разумно хранить чистые данные вместо форматированных данных.

    Преобразование HTML в DOCX – настоящий кошмар, потому что формирование не структурировано одинаково.

    Например, в HTML-тегах мне может быть вложен, например:

     <i> hello <b> this is important </b> to know </i> 

    В DOCX он будет представлен как переход, например:

      <w:r> <w:rPr><w:b/></w:rPr> <w:t>hello</w:t> </w:r> <w:r> <w:rPr><w:b/><w:i/></w:rPr> <w:t>this is important</w:t> </w:r> <w:r> <w:rPr><w:i/></w:rPr> <w:t>to know</w:t> </w:r> 

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

    Спасибо Skrol за ваш вклад во все мои проблемы с openTBS, просто заметили, что вы его создатель, отличный класс и то, что вы сказали выше, было истинным после дня вспашки через изучение формата MS Word. У меня была мозговая волна, а я теперь я могу создать формат, который вы указали выше, и может иметь жирный курсив и подчеркивание, что все, что мне нужно, я надеюсь, что это дает вам основание для улучшения.

    Я в основном заметил, что в приведенном примере вам нужен массив стилей, который, когда вы обнаружите закрывающий тег, вы удаляете из массива style. Каждый раз, когда вы находите тег, вам нужно закрыть <w:r> и создать новый, я его протестировал, и он работает чудесно.

     class printClass { private static $currentStyles = array(); public function __construct() {} public function format($string) { if($string !=""){ return preg_replace_callback("#<b>|<u>|<i>|</b>|</u>|</i>#", 'printClass::replaceTags', $string); }else{ return false; } } private static function applyStyles() { if(count(self::$currentStyles) > 0 ) { foreach(self::$currentStyles as $value) { if($value == "b") { $styles .= "<w:b/>"; } if($value == "u") { $styles .= "<w:uw:val=\"single\"/>"; } if($value == "i") { $styles .= "<w:i/>"; } } return "<w:rPr>" . $styles . "</w:rPr>"; }else{ return false; } } private static function replaceTags($matches) { if($matches[0] == "<b>") { array_push(self::$currentStyles, "b"); } if($matches[0] == "<u>") { array_push(self::$currentStyles, "u"); } if($matches[0] == "<i>") { array_push(self::$currentStyles, "i"); } if($matches[0] == "</b>") { self::$currentStyles = array_diff(self::$currentStyles, array("b")); } if($matches[0] == "</u>") { self::$currentStyles = array_diff(self::$currentStyles, array("u")); } if($matches[0] == "</i>") { self::$currentStyles = array_diff(self::$currentStyles, array("i")); } return "</w:t></w:r><w:r>" . self::applyStyles() . "<w:t xml:space=\"preserve\">"; } }