Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > XML + XSL + PHP => HTML


Автор: Lexxx_HU 28.2.2007, 06:14
здраствуйте все ...
похожие темы были .. но данного вопроса нет ...
обрисую ситуацию..

имеется файл *.xml (сохраненный в Word-е с рисунком)
имеется шаблон *.xsl 

к этому всему применяется скрипт php

Код

<?php 
header("Content-type: text/html; charset=UTF-8");
// Allocate a new XSLT processor 
$xh = xslt_create(); 

// Process the document, returning the result into the $result variable 
$result = xslt_process($xh, 'test2.xml', 'wordML-html.xsl'); 
if ($result) { 
    echo $result; 
}else { 
    echo "Sorry, Error"; 
} 
xslt_free($xh); 
?>


получается вот http://lexxx-hu.narod.ru/xml2html.html
(на кодировку внимания не обращайте)

как видно на ней рисунок представлен в бинарном виде ...

имеется скрипт для преобразования бинароного кода в рисунок

Код

<?php
$data = '..... тут бинарный код ....';
$data = base64_decode($data);

$im = imagecreatefromstring($data);
if ($im !== false) {
   header('Content-Type: image/png');
   imagepng($im);
}
else {
   echo 'An error occurred.';
}
?>


по отдельности все работает ...
если вставить скопировать бинарный код ... и вставить в нижний скрипт.. то рисунок выводится..
как видно .. в первом скрипте все передаются в одной переменной - $result
так вот вопрос .. как из этой перменной "достать" этот код .. и передать в переменную $data
то есть по сути дела ..как эти 2 файла соединить в один ?

спасибо всем кто откликнется
если Админы посчитают что тему не сюда .. то переместите пожалуйста

Автор: Lexxx_HU 1.3.2007, 05:39
имеется код

Код
<?php
$data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
       . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
       . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
       . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
$data = base64_decode($data);

$im = imagecreatefromstring($data);
if ($im !== false) {
   header('Content-Type: image/png');
   imagepng($im);
}
else {
   echo 'An error occurred.';
}
?>


как скриптом сохранить данный рисунок без участия человека (НЕ save as...) ?
чтобы он записал его в той же папке где лежит скрипт по менем "xxx.png" ?

Автор: Vassya 8.3.2007, 16:10
Lexxx_HU, есть такая идея. Когда я http://personal-mode.com/article.asp?file=/pages/wordml/instruction.xml схожим вопросом, то решил изображения в документ Word вставлять не как внутренние объекты (изображение -> вставить), и как ссылки на внешние (изображение -> связать с файлом). Таким образом, графика храниться отдельно, на сайт загружается вместе с документом Word в формате XML. Далее этот документ парсится XSLT, когда встречается тег изображения, из него вытягивается URL, который и вставляется в генерируемый HTML как атрибут тега img.

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

Структура: 

пусть за обработку xml и вывод html отвечает динамическая страница article.php, которая собственно вызывает XSLT WordML-html.xsl.
В ней будет размещена ваша функция, первая из примера.
Кроме того, сделаем специальную переменную, определяющую URL документа, который обрабатывается. Имя переменной - document, в нашем примере принимает значение document.xml.

В XSLT WordML-html.xsl есть функция которая обрабатывает ("вытягивает") узлы, в которых хранятся изображения в бинарном виде. Эта функция на выходе генерирует html-код типа <img src="img.php?file=document.xml&img_position=1" />, в который помещает значение URL документа (т.е. значение вышеупомянутой переменной document, здесь - document.xml) и позиции рисунка (XPath функция position(), здесь - 1). 
Как видно, это обычный тег изображения, находящегося по соответствующему URL. А по указанному URL мы будем выдавать конкретно изображение, генерируемое с помощью вашей функции (2-я из примера).

Рассмотрим этот URL.
img.php - страница, содержащая вашу функцию по "преобразования бинароного кода в рисунок". Страница вызывает некое WordML-img.xsl, которое вытягивает бинарный код изображения с указанной позицией из указанного документа, и к этому бинарному коду и применяется ваша функция.
HTTP-параметры: file=document.xml - указываем конкретный документ, из которого нужно вытянуть рисунок, img_position - позиция в документе рисунка, который нужно вытянуть.

Концептуально примерно так. Если у вас получится реализовать на практике - будет здорово!
Я же буду по прежнему использовать в документах не вставленные, а связанные изображения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)