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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заполнить текст нижнего колонтитула, конвертирую в .doc 
V
    Опции темы
WERITAS
Дата 18.1.2010, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


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

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



Добрый день. Делаю экспорт документа в .doc-формат, используя СОМ-объекты, столкнулся с проблемой: Как мне правильно заполнить текст нижнего колонтитула? Мне нужен такой код, который бы посчитал общее кол-во страниц в документе и номер текущей страницы.
Вот код:
Код

<?php
 $wordHandle = new COM('word.application');
 $wordHandle->Visible = 0;
 $wordHandle->Documents->Add();
 
 $wordHandle->Selection->Font->Name = 'Times New Roman';
 $wordHandle->Selection->Font->Size = 72;
 
 $wordHandle->Selection->TypeText("1\n\n\n\n\n\n\n2\n\n\n\n\n\n\n3\n\n\n\n\n\n\n4\n\n\n\n\n\n\n5");
 
 $f1=$wordHandle->Selection->Fields->Add($wordHandle->Selection->Range, 33);
 $wordHandle->ActiveDocument->Sections(1)->Footers(1)->Range->Text = 
 'Page ' . $f1->Result;
 
 $wordHandle->ActiveDocument->SaveAs('D:\\test1.doc');
 
 $wordHandle->ActiveDocument->Close();
 $wordHandle->Quit();
 $wordHandle = null; 
 
 echo "<h2>Document was saved successfully</h2>";
?>

Сейчас у меня в нижнем колонтитуле печатается текст "Page X of Y". Мне нужно, чтобы печатался номер текущей страницы и кол-во страниц в таком шаблоне.

Это сообщение отредактировал(а) WERITAS - 19.1.2010, 22:22


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
WERITAS
Дата 19.1.2010, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


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

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



В соседнем форуме подсказали с макросом http://forum.vingrad.ru/forum/act-ST/f-130...1/unread-1.html
Однако вызвать все эти функции у COM-объекта пока что не получается ((((


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
skyboy
Дата 20.1.2010, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



не надо макроса. надо разобраться с полями(Fields). То, что можно вставить в документ по нажатию Ctrl + F9
Вот я сделал количество страниц в колонтитуле:
Код

<?php
 $wordHandle = new COM('word.application');
 $wordHandle->Visible = 0;
 $wordHandle->Documents->Add();
 
 $wordHandle->Selection->Font->Name = 'Times New Roman';
 $wordHandle->Selection->Font->Size = 72;
 
 $wordHandle->Selection->TypeText("1\n\n\n\n\n\n\n2\n\n\n\n\n\n\n3\n\n\n\n\n\n\n4\n\n\n\n\n\n\n5");

 $wordHandle->ActiveDocument->Sections(1)->Footers(1)->Range->Fields->Add($wordHandle->ActiveDocument->Sections(1)->Footers(1)->Range, -1, 'PAGE  \* Arabic ');
 
 $wordHandle->ActiveDocument->SaveAs('C:\\test1.doc');
 
 $wordHandle->ActiveDocument->Close();
 $wordHandle->Quit();
 $wordHandle = null; 
 
 header('Content-Type: application/msword');
 echo file_get_contents('c:\\test1.doc');

"-1" в коде - это значение константы WdFieldType.wdFieldEmpty, которую я не смог получить из COM-объекта. "PAGE \* Arabic" - это код поля, который я сначала вставил в word'e, а потом уже код поля бессовестно скопировал в РНР smile
Все, что осталось - добавить ещё одно поле с другим кодом(количество страниц) и разделитель между ними.

Добавлено через 22 секунды
интересная задача, спасибо.

Добавлено через 1 минуту и 49 секунд
а макросом я делал так:
Код

set s = ActiveDocument.Sections(1).Footers(1).Range.Fields.Add(ActiveDocument.Sections(1).Footers(1).Range, WdFieldType.wdFieldEmpty, "PAGE  \* Arabic ", True);

т.е. я сначала сделал макрос, а когда он заработал как надо, адаптировал его код к работе РНР с СОМ-объектом.
PM MAIL   Вверх
WERITAS
Дата 20.1.2010, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


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

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



Я тоже сделал макрос, который нумеровал все страницы, а потом переделал вызовы из СОМ. Сложность была в другом: в field при каждом новом заполнении затиралось предыдущее значение. 
Сделать удалось благодаря макросу, который мне дали в соседнем форуме. Вот готовое решение:
Код


<?php

 $wordHandle = new COM('word.application');
 $wordHandle->Visible = 0;
 $wordHandle->Documents->Add();

 $wordHandle->Selection->Font->Name = 'Times New Roman';
 $wordHandle->Selection->Font->Size = 72;

 $wordHandle->Selection->TypeText("1\n\n\n\n\n\n\n2\n\n\n\n\n\n\n3\n\n\n\n\n\n\n4\n\n\n\n\n\n\n5");

 $footerRange=$wordHandle->ActiveDocument->Sections(1)->Footers(1)->Range;


 $footerRange->Fields->Add($footerRange, 33, "", False);
 $footerRange->InsertBefore("Page ");
 $footerRange->SetRange($footerRange->Paragraphs(1)->Range->End, $footerRange->Paragraphs(1)->Range->End);

 $footerRange->InsertAfter(" of ");
 $footerRange->SetRange($footerRange->Paragraphs(1)->Range->End, $footerRange->Paragraphs(1)->Range->End);
 $footerRange->Fields->Add($footerRange, 26, "", False);
 
 $wordHandle->ActiveDocument->SaveAs('D:\\test1.doc');

 $wordHandle->ActiveDocument->Close();
 $wordHandle->Quit();
 $wordHandle = null;

?>



Это сообщение отредактировал(а) WERITAS - 20.1.2010, 16:56


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
skyboy
Дата 20.1.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(WERITAS @  20.1.2010,  15:49 Найти цитируемый пост)
Сложность была в другом: в field при каждом новом заполнении затиралось предыдущее значение. 

вот этого я не понял. можно подробнее?
PM MAIL   Вверх
WERITAS
Дата 21.1.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


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

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



Цитата(skyboy @  20.1.2010,  00:14 Найти цитируемый пост)
Все, что осталось - добавить ещё одно поле с другим кодом(количество страниц) и разделитель между ними.

Это как раз и не получалось smile Не получалось объединить "номер текущей страницы" и "общее количество страниц". А макрос, который просто нумерует все страницы, и который выводит общее кол-во страниц, я сделал (см мою тему в подфоруме о Office).  Хорошо, что сейчас всё работает.


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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