Страница 1 из 1

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

Добавлено: 2007-04-26 19:15:23
lexy
hi all!
никто не встречал готовых реализаций для

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

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

Добавлено: 2007-04-27 11:28:35
lexy
так, с реализацией на 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 с поддержкой таблиц, списков и т.д.?

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

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

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

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

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

Добавлено: 2008-04-01 18:06:55
Radli
топиком выше ошибся мылом "RAdli007 собака list.ru". Скинь плз.

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

Добавлено: 2008-04-01 18:11:05
Alex Keda
лучше сюда клади.
будет всем щассье =)

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

Добавлено: 2008-04-14 15:38:03
lexy
Отказался я вобщем от этой затеи )))))))) проще 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);
?>

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

Добавлено: 2008-04-15 0:34:29
ProFTP
а скохранить в CVS ?

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

Добавлено: 2008-04-15 7:31:14
lexy
ProFTP писал(а):а скохранить в CVS ?
сорри, не владею вопросом :?
за что и страдаю.....

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

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

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

Добавлено: 2008-04-18 13:55:20
lexy
тяжеленько это все

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

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

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

Добавлено: 2008-05-22 15:50:27
Radli
Передо мной стояла такая задача.

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

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

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

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