Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Опять WORD!

Сообщения:  [1-4] 

 
 автор: targa   (16.03.2007 в 08:49)   письмо автору
 
   для: Крост   (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($lcInfalsetrue); // открываем нужный файл
    //  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($lcInfalsetrue); // открываем нужный файл
    //  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 '&nbsp;';
                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();                    // Закрываем приложение
?>

   
 
 автор: targa   (16.03.2007 в 02:16)   письмо автору
 
   для: Крост   (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($lcInfalsetrue); // открываем нужный файл
    //  1-й параметр - имя открываемого файла
    //  2-й параметр - подтверждение
    //  3-й параметр - читаем read-only
    //  всего 16 параметров но остальные не нужны, остаются по умолчанию

    
@unlink($lcOut);

    
$loDoc->SaveAs($lcOut8);  //  сохраняем как 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 и внешний вид определяем заранее).

   
 
 автор: cheops   (16.03.2007 в 01:01)   письмо автору
 
   для: Крост   (16.03.2007 в 00:25)
 

Попробуйте сохранить как html, правда качество изображений будет ужасным.

   
 
 автор: Крост   (16.03.2007 в 00:25)   письмо автору
 
 

У заказчика все прайсы в формате doc, причём с картинками! Эти прайсы им присылают с центр. офиса, где видимо о excel и не знают, а может забыли, но не важно.
Знаю, что вопрос обречён на облом, но всё же, можно ли вытащить эти каринки, а лучше, полноститью перевести doc в html с изображениями?
Спасибо.

   

Сообщения:  [1-4] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования