MS Word XML 2 plain HTML через PHP

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

MS Word XML 2 plain HTML через PHP

Непрочитанное сообщение lexy » 2007-04-26 19:15:23

hi all!
никто не встречал готовых реализаций для

Код: Выделить всё

MS Word XML 2 plain HTML через PHP
с поддержкой картинок и таблиц?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Непрочитанное сообщение lexy » 2007-04-27 11:28:35

так, с реализацией на php разобрался.... практически лементарно

Код: Выделить всё

<?
// Load the XML source
$xml = new DOMDocument;
$xml->load('sample.xml');

$xsl = new DOMDocument;
$xsl->load('translator.xsl');

// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules

$proc->transformToURI($xml, '/tmp/out.html');
$html = implode('', file ('/tmp/out.html'));
print $html;
unlink('/tmp/out.html');

?>  
и нашел translator.xls, тока он простенький, только заголовки, абзацы, жирный/курсив и картинки.

не встречал никто более полного шаблона XSL с поддержкой таблиц, списков и т.д.?

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Непрочитанное сообщение lexy » 2007-05-03 18:38:05

ИЙЕССС!!!!!
:shock: Я его почти победил!
все получилось в связке PHP+XML+XSL
теперь мои дорожайшеи юзери не будут доставать меня с просьбой обновить статьи на сайте, из Worda в XML, потом веб-форма - и вот все готово, даж картинки не нада подгружать отдельно, все гребет из одного XML-файла, выгруженного с Worda

Если интересно - заделюсь!

RADLI
проходил мимо

Re: MS Word XML 2 plain HTML через PHP

Непрочитанное сообщение RADLI » 2008-04-01 18:04:41

напиши где Транслятор откопал, а лучше сам файлик вылежи. (translator.xls)
Буду благодарен. проблема ткая же!!!! Шеф задал решить.
При возможности скинь на мыло "Radli собака list.ru"

Radli
проходил мимо

Re: MS Word XML 2 plain HTML через PHP

Непрочитанное сообщение Radli » 2008-04-01 18:06:55

топиком выше ошибся мылом "RAdli007 собака list.ru". Скинь плз.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35426
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: MS Word XML 2 plain HTML через PHP

Непрочитанное сообщение Alex Keda » 2008-04-01 18:11:05

лучше сюда клади.
будет всем щассье =)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Re: MS Word XML 2 plain HTML через PHP

Непрочитанное сообщение lexy » 2008-04-14 15:38:03

Отказался я вобщем от этой затеи )))))))) проще Xinha прикрутить или TinyMCE
клоду.... где брал прототип, уже не вспомню....
с 06-2007 пор не правил, местами вылезают корявки при преобразовании но в целом - ОК

Транслятор WordXML (mytranslator.xsl):

Код: Выделить всё

<?xml version="1.0" encoding="windows-1251"?>
<!--
	WordprocessingML to plain XHTML stylesheet
-->
<!-- 2007, Alexey Sberegaev (www.mrlexy.ru) -->
<!DOCTYPE xsl:stylesheet  [
	<!ENTITY nbsp   "&#x20;">
	<!ENTITY copy   "&#169;">
	<!ENTITY reg    "&#174;">
	<!ENTITY trade  "&#8482;">
	<!ENTITY mdash  "&#8212;">
	<!ENTITY ldquo  "&#8220;">
	<!ENTITY rdquo  "&#8221;"> 
	<!ENTITY pound  "&#163;">
	<!ENTITY yen    "&#165;">
	<!ENTITY euro   "&#8364;">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:v="urn:schemas-microsoft-com:vml">
  <xsl:output method="html" encoding="windows-1251" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
	<xsl:template match="/">
		<html>
			<head>
				<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
				<title>
				<xsl:apply-templates select="w:wordDocument/o:DocumentProperties"/>
				</title>
			</head>
			<body>
				<xsl:apply-templates select="w:wordDocument/w:body/wx:sect"/>
			</body>
		</html>
	</xsl:template>

	<xsl:template match="w:wordDocument/o:DocumentProperties">
		<xsl:value-of select="o:Title"/>
	</xsl:template>

	<xsl:template match="w:wordDocument/w:body/wx:sect">
		<xsl:apply-templates />
	</xsl:template>


	<!-- HEADINGS and PARA	 -->
	<xsl:template match="w:p">
		<xsl:choose>
			<xsl:when test="w:pPr/w:pStyle/@w:val=1">
			<h1>
				<xsl:apply-templates select="w:r | w:hlink" />
			</h1>
			</xsl:when>
			<xsl:when test="w:pPr/w:pStyle/@w:val=2">
			<h2>
				<xsl:apply-templates select="w:r | w:hlink" />
			</h2>
			</xsl:when>
			<xsl:when test="w:pPr/w:pStyle/@w:val=3">
			<h3>
				<xsl:apply-templates select="w:r | w:hlink" />
			</h3>
			</xsl:when>
			<xsl:otherwise>
			<p>
				<xsl:apply-templates select="w:r | w:hlink" />
			</p>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	
<!-- Simple formatting (bold, italic, underline), images -->	
	<xsl:template match="w:r">
		<xsl:choose>
			<xsl:when test="w:rPr/w:b"><b><xsl:value-of select="w:t" /></b></xsl:when>
			<xsl:when test="w:rPr/w:u"><u><xsl:value-of select="w:t" /></u></xsl:when>
			<xsl:when test="w:rPr/w:i"><i><xsl:value-of select="w:t" /></i></xsl:when>
			<!-- IMG handle section -->
			<xsl:when test="w:pict">
				<xsl:variable name="imgSrc" select="substring-after(w:pict/v:shape/v:imagedata/@src, 'wordml://')" />
				<img src="docimage.phtml?xdocid={$selfDoc}:{$imgSrc}" alt="{w:pict/v:shape/v:imagedata/@o:title}" />
			</xsl:when>
			<xsl:otherwise><xsl:value-of select="w:t" /></xsl:otherwise>
		</xsl:choose>
	</xsl:template>

<!-- Parse hyperlinks -->	
	<xsl:template match="w:hlink">
		<a href="{@w:dest}"><xsl:value-of select="w:r/w:t" /></a>
	</xsl:template>

<!-- Parse table (colspan supported, no rowspans) -->	
	<xsl:template match="w:tbl">
		<table width="100%" cellpadding="0" cellspacing="0" border="1">
			<xsl:for-each select="w:tr">
				<tr>
					<xsl:for-each select="w:tc/w:p">
						<xsl:if test="../w:tcPr/w:gridSpan/@w:val > 0">
						<xsl:text disable-output-escaping="yes"><td colspan=</xsl:text>
							<xsl:value-of select="../w:tcPr/w:gridSpan/@w:val" /><xsl:text disable-output-escaping="yes">"></xsl:text>
						</xsl:if>
						<xsl:if test="not(../w:tcPr/w:gridSpan/@w:val)">
							<xsl:text disable-output-escaping="yes"><td></xsl:text>
						</xsl:if>
							<xsl:apply-templates select="w:r" />
						<xsl:text disable-output-escaping="yes"></td></xsl:text>
					</xsl:for-each>
				</tr>
			</xsl:for-each>
		</table>
	</xsl:template>

</xsl:stylesheet>
транслятор картинок (wmimages.xsl'):

Код: Выделить всё

<?xml version="1.0" encoding="windows-1251"?>
<!--
	WordprocessingML images extractor
-->
<!-- 2007, Alexey Sberegaev (www.mrlexy.ru) -->
<!DOCTYPE xsl:stylesheet  [
	<!ENTITY nbsp   "&#x20;">
	<!ENTITY copy   "&#169;">
	<!ENTITY reg    "&#174;">
	<!ENTITY trade  "&#8482;">
	<!ENTITY mdash  "&#8212;">
	<!ENTITY ldquo  "&#8220;">
	<!ENTITY rdquo  "&#8221;"> 
	<!ENTITY pound  "&#163;">
	<!ENTITY yen    "&#165;">
	<!ENTITY euro   "&#8364;">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:v="urn:schemas-microsoft-com:vml">
  <xsl:output method="text" encoding="windows-1251" />
 <xsl:template match="/">
 	<xsl:apply-templates select="w:wordDocument/w:body/wx:sect/wx:sub-section//w:pict//w:binData"/>
 </xsl:template>
 <xsl:template match="w:pict//w:binData">
 <xsl:if test="@w:name=$imgID">
	<xsl:apply-templates />
</xsl:if>
 </xsl:template>

</xsl:stylesheet>
код PHP, читающий WordXML:
выдиралось из самописной CMS поэтому вкратце:

Код: Выделить всё

$xml = new DOMDocument;
				$xml->load("path/to/doc/name.xml");
				
				$xsl = new DOMDocument;
				$xsl->load('path/to/mytranslator.xsl');
				
				// Configure the transformer
				$proc = new XSLTProcessor;
				$proc->importStyleSheet($xsl); // attach the xsl rules
				//selfDoc - ID документа, по которому 
				// docimage.phtml (ниже) найдет документ, с которого драть картинки
				$proc->setParameter('','selfDoc',sprintf("%08d",$id));
				// Plain HTML в переменную
				$content=$proc->transformToXML($xml);

				if(!trim($content)){
					$title=$head='Страница не найдена';
					$content='Страница, к которой Вы пытались обратится, недоступна.';
				}
скрипт, выдирающий картинки (docimage.phtml, внимательно смотрим mytranslator.xsl в секции img):

Код: Выделить всё

<?
list($document,$image)=split(':',$_GET['xdocid']);
// Load the XML source
$xml = new DOMDocument;
$xml->load("path/to/doc/".$document.'.xml');

$xsl = new DOMDocument;
$xsl->load('path/to/wmimages.xsl');

// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules

$proc->setParameter('','imgID','wordml://'.$image);
$bin=$proc->transformToXML($xml);
if(preg_match("/\.jpg$/",$image)) header("Content-type: image/jpeg");
if(preg_match("/\.gif$/",$image)) header("Content-type: image/gif");
print base64_decode($bin);
?>
Последний раз редактировалось lexy 2008-05-23 8:05:26, всего редактировалось 1 раз.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: MS Word XML 2 plain HTML через PHP

Непрочитанное сообщение ProFTP » 2008-04-15 0:34:29

а скохранить в CVS ?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Re: MS Word XML 2 plain HTML через PHP

Непрочитанное сообщение lexy » 2008-04-15 7:31:14

ProFTP писал(а):а скохранить в CVS ?
сорри, не владею вопросом :?
за что и страдаю.....

R@dli
проходил мимо

Re: MS Word XML 2 plain HTML через PHP

Непрочитанное сообщение R@dli » 2008-04-18 13:05:43

огромное спасибо LEXY, сегодня же опробую..
хотя свою проблемку решил подругому чуть чуть... текст набирается в опен офисе, сохраняется как HTML, рисунки в той же папке, а затем на червер закачивается просто все эти файлы... а на серваке скрипт их обрабатывает и заносит в БД, при этом есть возможность обрабатывать шрифты. Напрмер если текст набран в нестандартном шрифте (например как в моем случае для башкирского языка) то есть возможность переконвертировать в шрифт напрмер в Palatino Linotype, cохранением всех нестандартных букв (О с чертой по середине, Н и К с хвостиками, Y,F,h -большие и маленькие и другие ктр так не опишешь) Пример можно будет смотреть на сайте _http://shonkarrb.ru все статьи будут закачены таким способом, как только сайт откроется

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Re: MS Word XML 2 plain HTML через PHP

Непрочитанное сообщение lexy » 2008-04-18 13:55:20

тяжеленько это все

повторюсь
Отказался я вобщем от этой затеи )))))))) проще Xinha прикрутить или TinyMCE
DHTML (встраиваемые в страницу) редакторы не намного хуже OO или MSW, с возможностью подгрузки картинок

_http://tinymce.moxiecode.com/
_http://xinha.webfactional.com/

Radli
проходил мимо

Re: MS Word XML 2 plain HTML через PHP

Непрочитанное сообщение Radli » 2008-05-22 15:50:27

Передо мной стояла такая задача.

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

Онлайн редактор не подходят!!! Они пытались в них что то набирать тяжело и неудобно, вылетает каждые 5 минут любой браузер. (Опера, Ие, ФФ) А если из другого редактора всталять текст, то он криво там отображается а про рисунки уж вообще молчу...Да и инет у них по времени...

Аватара пользователя
lexy
сержант
Сообщения: 288
Зарегистрирован: 2006-07-21 9:54:44
Откуда: Волхов, ЛО
Контактная информация:

Re: MS Word XML 2 plain HTML через PHP

Непрочитанное сообщение lexy » 2008-05-23 7:28:21

Radli писал(а):...
Онлайн редактор не подходят!!! Они пытались в них что то набирать тяжело и неудобно, вылетает каждые 5 минут любой браузер. (Опера, Ие, ФФ) А если из другого редактора всталять текст, то он криво там отображается а про рисунки уж вообще молчу...Да и инет у них по времени...
непонятненько :? у меня на всех браузерах работает..... А если создать промежуточный сервак, который в локалке будет собирать статьи и потом синхронизировать на основной? или пользователи удаленно-распределенные?