Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Контент word файла 
:(
    Опции темы
Serebrus
Дата 1.2.2011, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



Привет знатоки.
Искал в инете, но не нашел нужный мне ответ.
Имеется некий заполненный шаблон файл templ.doc
Надо заменить некоторые слова этого файла.
Как можно это сделать?

fopen открывает файл, но fread дает ошибку

Заранее спасибо.
PM MAIL   Вверх
bars80080
Дата 1.2.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



Цитата(Serebrus @  1.2.2011,  07:31 Найти цитируемый пост)
но fread дает ошибку

какую такую ошибку?
PM MAIL WWW   Вверх
Serebrus
Дата 1.2.2011, 14:47 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



Ошибка:
Warning: filesize() [function.filesize]: stat failed for Resource id #5 in D:\www\xampp\htdocs\terminal\editor\list_bring.php on line 9

Вот сам код:
Код

$f=fopen('word.doc', 'r+');
$rd=fread($f, filesize($f));
echo $rd;
fclose($f);

PM MAIL   Вверх
solenko
Дата 1.2.2011, 15:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: нет
Всего: 67



Параметры filesize как бы намекают нам, что передавать нужно имя файла, а текст ошибки "stat failed for Resource id #5" намекает на то, что передается как параметр вовсе не строка, а ресурс  smile 


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Serebrus
Дата 2.2.2011, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



solenko, я исправил ошибку:
Код

$fn='word.doc';
$f=fopen($fn, 'r+');
$rd=fread($f, filesize($fn));
echo $rd;
fclose($f);


Вот результат:
�ࡱ�

Это и есть $rd, т.е. $rd отображает не нормальный текст, а кривляку. Как можно понятно прочитать контент ворд файла?
В самом файле хранится такой текст: "Управляем MS Word через PHP", это пробный текст.

Это сообщение отредактировал(а) Serebrus - 2.2.2011, 07:39
PM MAIL   Вверх
skyboy
Дата 2.2.2011, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Цитата(Serebrus @  2.2.2011,  06:36 Найти цитируемый пост)
Это и есть $rd, т.е. $rd отображает не нормальный текст, а кривляку.

а ты word'овский файл блокнотом открой. думаешь, там только текст в "чистом виде"? а форматирование как бы хранилось?
на самом деле, не понятно. если хочешь получить контент - заморачиваться стоит, но ты ж собирался заменить некие блоки-метки на значения. для этого не обязательно разбирать структуру и "вытягивать текст" - чтоб просто заменить "!!%%%%!!" на "Оля" и сохранить текст обратно.
если все ж надумаешь "вытягивать контент" - возможны варианты с привлечением OpenOffice или "на чистом PHP"
PM MAIL   Вверх
Serebrus
Дата 2.2.2011, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



skyboy, вы правы, мне именно надо заменить не открывая документ. Просто я думал что для замены надо прочитать контент. А как можно просто заменить не открывая (т.е. не имея контент)?
PM MAIL   Вверх
bars80080
Дата 2.2.2011, 14:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



skyboy, не писал, что не надо открывать документ.


Цитата(skyboy @  2.2.2011,  10:18 Найти цитируемый пост)
ты ж собирался заменить некие блоки-метки на значения. для этого не обязательно разбирать структуру и "вытягивать текст" - чтоб просто заменить "!!%%%%!!" на "Оля" и сохранить текст обратно.

дословно это означает:
открыть файл fopen(), 
получить его содержимое в строку fread(), fclose()
заменить какую-то последовательность символов str_replace() или preg_replace()
записать обратно fopen, fwrite, fclose

Добавлено через 33 секунды
и не нужно смотреть никакие �ࡱ�
PM MAIL WWW   Вверх
Serebrus
Дата 2.2.2011, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



bars80080, ваш варианит не подошел, текст совсем не изменился.
Исходный текст:
"Управляем MS Word через PHP"
Код

$fn='word.doc';
$f=fopen($fn, 'r+');
$rd=fread($f, filesize($fn));
$n_str=str_replace('PHP', 'ПХП', $rd);
fwrite($f, $n_str);
fclose($f);

Результат:
"Управляем MS Word через PHP"

Это сообщение отредактировал(а) Serebrus - 2.2.2011, 16:30
PM MAIL   Вверх
topy
Дата 2.2.2011, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 18.2.2008

Репутация: нет
Всего: 1



Текст в ворде хранится закодированным. чтобы что-то заменить в в вордовском файле надо это что-то сначала закодировать в �ࡱ�, потом найти нужные нам �ࡱ� и заменить на наши �ࡱ�.
Коллеги, поправьте если я не прав?

Это сообщение отредактировал(а) topy - 2.2.2011, 17:36
PM MAIL   Вверх
skyboy
Дата 2.2.2011, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Цитата(topy @  2.2.2011,  16:13 Найти цитируемый пост)
Serebrus, вы прикалываетесь?

не, это я неверную мысль подал.
минимум - текст хранится в unicode, даже не привычном utf-8.
плюс после перекодирования я вижу, что названия стилей читаемы, а вот текстовой части документа нет.
так что сорри, Serebrus, надо, как минимум, выяснить, как кодируется каждый символ. видимо, не только в кодировке дело, но и в атрибутах, указываемых для каждого стиля в отдельности.
думаю, вместо ковыряния структуры будет рациональнее вместо .doc работать с шаблоном в .rtf
или же использовать готовую библиотеку. но сходу ничего толкового не нашел.
PM MAIL   Вверх
Serebrus
Дата 3.2.2011, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



skyboy, увы, к сожелению с rtf тоже самое, он тоже не меняется с вышеуказанным скриптом. 
PM MAIL   Вверх
skyboy
Дата 3.2.2011, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Serebrus, все не латинское хранится в UTF-8 в особом формате: "привет" становится "\'84\'81\'84\'82\'84\'79\'84\'72\'84\'75\'84\'84"
PM MAIL   Вверх
ksnk
Дата 3.2.2011, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



а зачем нужен именно doc файл?

Цитата(skyboy @  2.2.2011,  17:46 Найти цитируемый пост)
но сходу ничего толкового не нашел. 

http://www.phpdocx.com/
?
Правда не в курсе, насколько бесплатная версия полезна. Впрочем при надобности можно и платную купить за $90


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
studentigor
Дата 28.3.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 397
Регистрация: 14.11.2008

Репутация: нет
Всего: нет



смотри
Код

$ff=fopen('shb.rtf','r');
    $fs = filesize("shb.rtf");
    $file = fread($ff,$fs);

    $file = str_replace('#CompanyName',iconv("utf-8","windows-1251",$myr['name']),$file);

Вот это кусок, который заменяет #CompanyName на нужное значение из базы. Работает, у себя взял.
А doc -там не все так просто - там все хранится в двоичной системе, вобщем в кратком описании я понял что там что-то похожее на асемблер,  если интересно - прочитай документация на doc файлы. Но если тебе такое надо на один раз - поищи готовые решение, ибо раздуплять - это долго.
И текст так просто оттуда не вытянуть, нужно писать клас декодер(ну или найти в нете), и это пол дела, потому что потом ещё нужно написать ещё класс который бы все это загонял. Я искал но такие только платные, а платить за кота в мешке не хочется.
Есть правдо com -но он только под виндой работает. на линухе не идет.
Я нашел чуток другой выход. Если тебе надо именно файл в формате doc. 
Делаю документ в ртф по шаблону, потом есть либа phplivedocx на зенде, она конвертирует в разные форматы, в doc,docx,pdf,html,...
Потом передаеш это название в ф-ю, указываеш в какой формат конвертировать и вуаля, конвертирует замечательно, на одном дыхании.
Ну зависет конечно от размера документа
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0970 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.