|
|
|
|
|
для: Крост
(16.03.2007 в 00:25)
| | Вдогонку.
Два небольших примера.
Пример работы с коллекцией Paragraphs
<?php
$lcIn = "d:/in1.doc";
$lcOut = "d:/out2.htm";
$loWord = new COM("Word.Application"); // Создаем новый COM-объект
if($loWord) echo 'СОМ-объект создан<br />';
else exit('Невозможно создать СОМ-объект<br />');
$loDoc = $loWord->Application->Documents->Open($lcIn, false, true); // открываем нужный файл
// 1-й параметр - имя открываемого файла
// 2-й параметр - подтверждение
// 3-й параметр - читаем read-only
// всего 16 параметров но остальные не нужны, остаются по умолчанию
$loParagraphs = $loDoc->Paragraphs;
$lnFile = fOpen($lcOut, 'w');
fPuts($lnFile, '<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><title>Пример конвертинга</title></head><body>');
echo 'создаю html-файл<br />';
for ($i=1; $i <= $loParagraphs->Count; $i++) // пробегаемся по коллекции параграфов
{
$loCurPar = $loParagraphs[$i];
$lcText = '<p>'.$loCurPar->Range->Text.'</p>';
fPuts($lnFile, $lcText);
}
fPuts($lnFile, '</body></html>');
fClose($lnFile);
echo 'html-файл создан<br />';
$loWord->Quit(); // Закрываем приложение
?>
|
Пример работы с коллекцией Tables
<?php
$lcIn = "d:/in3.doc";
$lcOut = "d:/out3.htm";
$loWord = new COM("Word.Application"); // Создаем новый COM-объект
if($loWord) echo 'СОМ-объект создан<br />';
else exit('Невозможно создать СОМ-объект<br />');
$loDoc = $loWord->Application->Documents->Open($lcIn, false, true); // открываем нужный файл
// 1-й параметр - имя открываемого файла
// 2-й параметр - подтверждение
// 3-й параметр - читаем read-only
// всего 16 параметров но остальные не нужны, остаются по умолчанию
$loTables = $loDoc->Tables; // получаем ссылку на коллекцию Tables
$lnFile = fOpen($lcOut, 'w');
fPuts($lnFile, '<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><title>Пример конвертинга</title></head><body>');
echo 'создаю html-файл<br />всего таблиц - '.$loTables->Count.'<br />';
for ($t=1; $t <= $loTables->Count; $t++) // пробегаемся по коллекции таблиц
{
$loTable = $loTables[$t]; // ссылка на объект-таблицу
$lnRows = $loTable->Rows->Count; // узнаем скока строк в таблице
$lnCols = $loTable->Columns->Count; // узнаем скока колонок в таблице
echo 'сохраняю '.$t.'-ю таблицу<br />';
fPuts($lnFile, '<table border="1" width="100%" style="margin-bottom: 20px;">');
for ($r=1; $r <= $lnRows; $r++)
{
$lcRow = '<tr>';
for ($c=1; $c <= $lnCols; $c++)
{
$lcCell = $loTable->Rows($r)->Cells($c)->Range->Text; // получаем текст из ячейки
$lcCell = str_replace(chr(7), '', str_replace(chr(13), '', $lcCell)); // избавляемся от непечатных символов
if (empty($lcCell)) $lcCell = ' ';
if($r==1) $lcRow .= '<th>'.$lcCell.'</th>'; // первая строка заголовок
else $lcRow .= '<td>'.$lcCell.'</td>';
}
fPuts($lnFile, $lcRow.'</tr>'); // записываем строку
}
fPuts($lnFile, '</table>');
}
fPuts($lnFile, '</body></html>');
fClose($lnFile);
echo 'html-файл создан<br />';
$loWord->Quit(); // Закрываем приложение
?>
|
| |
|
|
|
|
|
|
|
для: Крост
(16.03.2007 в 00:25)
| | Можно через COM вытащить в принципе, но тогда нужна Windows-платформа и Word на ней.
Вот простенький конвертер открывающий doc-файл и сохраняющий его в html (в том страшном виде как это делает Word).
<?php
$lcIn = "d:/in1.doc";
$lcOut = "d:/out1.htm";
$loWord = new COM("Word.Application"); // Создаем новый COM-объект
if($loWord) echo 'СОМ-объект создан<br />';
else exit('Невозможно создать СОМ-объект<br />');
$loDoc = $loWord->Application->Documents->Open($lcIn, false, true); // открываем нужный файл
// 1-й параметр - имя открываемого файла
// 2-й параметр - подтверждение
// 3-й параметр - читаем read-only
// всего 16 параметров но остальные не нужны, остаются по умолчанию
@unlink($lcOut);
$loDoc->SaveAs($lcOut, 8); // сохраняем как HTML
echo 'файл сохранен';
// 1-й параметр - новое имя файла
// 2-й параметр - формат файла // 8 - это значит сохраняем как HTML
// всего 16 параметров но остальные не нужны, остаются по умолчанию
$loWord->Quit(); // Закрываем приложение
unset($loDoc, $loWord);
?>
|
К рисункам теоретически тоже можно достучаться. Но в объектной модели Word'a отсутствует (или не афишируется микрософтом) коллекция для работы с рисунками. А без нее до рисунков дотянуться сложно. Но даже и дотянувшись - чувствую что там не будет метода для записи картинки на диск (т.к. при правом щелчке на рисунке такого нету).
Полностью преобразовать Word'овский файл в html без мусора не вопрос :-)
Открываем файл, обходим коллекции Paragraphs и Tables (можно еще Shapes). Для каждого параграфа/таблицы по свойствам вычисляем внешний вид и создаем аналог в html. Сохраняем. Все :-D
Можно посмотреть на проблему под другим углом.
Если в прайсах картинки не меняются, а данные нужно брать из абзацов/таблиц то поступаем аналогично.
Открываем файл.
Пробегаемся по Paragraphs/Tables читаем оттуда текст (хотя там напрямую не прочитаешь сразу, нужно юзать Select.Range). Записываем в html-файл (картинки, css и внешний вид определяем заранее). | |
|
|
|
|
|
|
|
для: Крост
(16.03.2007 в 00:25)
| | Попробуйте сохранить как html, правда качество изображений будет ужасным. | |
|
|
|
|
|
|
| У заказчика все прайсы в формате doc, причём с картинками! Эти прайсы им присылают с центр. офиса, где видимо о excel и не знают, а может забыли, но не важно.
Знаю, что вопрос обречён на облом, но всё же, можно ли вытащить эти каринки, а лучше, полноститью перевести doc в html с изображениями?
Спасибо. | |
|
|
|
|