как сгенерировать doc документ [Решено]

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

как сгенерировать doc документ [Решено]

Сообщение svil »

Пытаюсь генерировать приказ
Ошибка

Код: Выделить всё

BadMethodCallException
Method getproperties is not defined.

Код: Выделить всё

Class 'PHPWord_Shared_Font' not found

Код: Выделить всё

Class 'PHPWord_IOFactory' not found
Где взять аналоги методов в PHPWord для yii2?

Код: Выделить всё

<?php

use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\TemplateProcessor;

$general_edu_company="Сокращенное наименование";
$general_edu_company_full="Полное наименование";
$order1set="Текст для обучения по";
$row_order="Дата";
$row_group ="Дата";
$general_edu_company_ceo="general_edu_company_ceo";
$PHPWord = new \PhpOffice\PhpWord\PhpWord();
$PHPWord->setDefaultFontName('Times New Roman');
$PHPWord->setDefaultFontSize(12);
$meta = $PHPWord->getProperties(); //на эту строчку ругается
$meta->setCreator('Конструктор документов');
$meta->setCompany($general_edu_company);
$meta->setTitle('Приказ');
$meta->setDescription('Обучение по '.$order1set);
$meta->setCategory('Приказы по обучению');
//$meta->setLastModifiedBy('Имя последнего редактора');
$meta->setCreated( time() ); // Дата и время создания документа
//$meta->setModified( time() ); //Дата и время последнего изменения документа
$meta->setSubject('ПРИКАЗ провести обучение по '.$order1set);
$meta->setKeywords('приказ, обучение, конструктор, система, дистанционного, обучения');

$sectionStyle = array(
    'orientation' => 'portait' // альбомная ориентация страницы
,'marginTop' => '634' // по-умолчанию равен 1418* и соответствует 2,5 см отступа сверху
,'marginLeft' => '718' // по-умолчанию равен 1418* и соответствует 2,5 см отступа слева
,'marginRight' => '718' // по-умолчанию равен 1418* и соответствует 2,5 см отступа справа
,'marginBottom' => '634' // по-умолчанию равен 1134* и соответствует 2 см отступа снизу
    //,'pageSizeW' => '8419' // по-умолчанию равен 11906* и соответствует 210 мм по ширине
    //,'pageSizeH' => '11906' // по-умолчанию равен 16838* и соответствует 297 мм по высоте
    //,'borderColor'=>'999999' // Цвет ненужного бордюра
    //,'borderSize'=>'100' // Ширина ненужного бордюра*
);

// New portrait section
$section = $PHPWord->createSection($sectionStyle);

// Add text elements
$PHPWord->addFontStyle('rStyle14', array('bold'=>true, 'size'=>14));
$PHPWord->addParagraphStyle('pStyle', array('align'=>'center', 'spaceAfter'=>400, 'spaceAfter'=>400));
$section->addText($general_edu_company_full, 'rStyle14', 'pStyle');

$section->addText('ПРИКАЗ', 'rStyle14', 'pStyle');

$PHPWord->addFontStyle('rStyle12', array('size'=>12, 'bold'=>true));
$section->addText('№                                          от '.date("d.m.Y",$row_order).' г.', 'rStyle12');
$section->addText('«Об организации обучения»');

$section->addText('ПРИКАЗЫВАЮ:', 'rStyle14', 'pStyle');

$PHPWord->addFontStyle('rStyle12n', array('size'=>12));
$PHPWord->addParagraphStyle('pStyle12n', array('spaceAfter'=>100));
$section->addText('1. Провести обучение c '.date("d.m.Y",$row_group).' по '.date("d.m.Y",$row_group['end']).' в соответствии с учебным планом и программой обучения «'.$order1set.'».', 'rStyle12n', 'pStyle12n');
$section->addTextBreak(1);

$section->addText('2. Зачислить в группу № '.$model['num'].' следующих специалистов:', 'rStyle12n', 'pStyle12n');

// Add table
$styleTable = array('borderSize'=>1);
$PHPWord->addTableStyle('myOwnTableStyle', $styleTable);
$table = $section->addTable('myOwnTableStyle');

// Add row
$table->addRow();

// Add cells
$PHPWord->addFontStyle('myOwnCellStyle', array('bold'=>true, 'italic'=>true, 'size'=>12));
$table->addCell(PHPWord_Shared_Font::centimeterSizeToTwips(1.5))->addText('№ п/п', 'myOwnCellStyle');
$table->addCell(PHPWord_Shared_Font::centimeterSizeToTwips(5.5))->addText('Фамилия, имя, отчество', 'myOwnCellStyle');
$table->addCell(PHPWord_Shared_Font::centimeterSizeToTwips(5.5))->addText('Должность', 'myOwnCellStyle');
$table->addCell(PHPWord_Shared_Font::centimeterSizeToTwips(5.5))->addText('Организация', 'myOwnCellStyle');

$r = 1;
//foreach ($users as $user) { // Loop through rows
//    $table->addRow();
//
//    $row_user = get_mysql("SELECT * FROM `users` AS `u` INNER JOIN `ids` AS `i` ON `i`.`agent_id` = `u`.`id` WHERE `i`.`id`='$user'");
//
//    $uname = "$row_user[surname] $row_user[name] $row_user[thirdname]";
//    $ucompany = get_some_data('companies',$row_user['id_companies'],'shortname_fk');
//    $ujob = $row_user['job'];
//
//    $table->addCell(null)->addText("$r");
//    $table->addCell(null)->addText("$uname");
//    $table->addCell(null)->addText("$ujob");
//    $table->addCell(null)->addText("$ucompany");
//
//    $r++;
//}
$section->addTextBreak(1);

$section->addText('3. '.$model->num, 'rStyle12n', 'pStyle12n');
$section->addTextBreak(1);

// Add table
$table = $section->addTable();

// Add row
$table->addRow();

// Add cells
$table->addCell(PHPWord_Shared_Font::centimeterSizeToTwips(9.0))->addText('Директор');
$table->addCell(PHPWord_Shared_Font::centimeterSizeToTwips(9.0))->addText($general_edu_company_ceo);

// Save File
$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');

$gname = 'Order'.$_GET['id_group'];

$objWriter->save("$gname.docx");

header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment; filename=$gname.docx");
readfile("$gname.docx");
unlink("$gname.docx");
?>


Последний раз редактировалось svil 2019.07.29, 21:26, всего редактировалось 3 раза.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как сгенерировать doc документ

Сообщение svil »

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

Код: Выделить всё

<?php

use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\TemplateProcessor;

$general_edu_company=" . ";
$general_edu_company_full="";
$order1set="Текст для обучения по";
$row_order="Дата";
$row_group ="Дата";
$general_edu_company_ceo="general_edu_company_ceo";

$PHPWord = new \PhpOffice\PhpWord\PhpWord();
$PHPWord->setDefaultFontName('Times New Roman');
$PHPWord->setDefaultFontSize(12);


$sectionStyle = array(
   // 'orientation' => 'portait' // альбомная ориентация страницы
'marginTop' => '634' // по-умолчанию равен 1418* и соответствует 2,5 см отступа сверху
,'marginLeft' => '718' // по-умолчанию равен 1418* и соответствует 2,5 см отступа слева
,'marginRight' => '718' // по-умолчанию равен 1418* и соответствует 2,5 см отступа справа
,'marginBottom' => '634' // по-умолчанию равен 1134* и соответствует 2 см отступа снизу
    //,'pageSizeW' => '8419' // по-умолчанию равен 11906* и соответствует 210 мм по ширине
    //,'pageSizeH' => '11906' // по-умолчанию равен 16838* и соответствует 297 мм по высоте
    //,'borderColor'=>'999999' // Цвет ненужного бордюра
    //,'borderSize'=>'100' // Ширина ненужного бордюра*
);

// New portrait section
$section = $PHPWord->createSection($sectionStyle);

// Add text elements
$PHPWord->addFontStyle('rStyle14', array('bold'=>true, 'size'=>14));
$PHPWord->addParagraphStyle('pStyle', array('align'=>'center', 'spaceAfter'=>400, 'spaceAfter'=>400));
$section->addText($general_edu_company_full, 'rStyle14', 'pStyle');

$section->addText('ПРИКАЗ', 'rStyle14', 'pStyle');

$PHPWord->addFontStyle('rStyle12', array('size'=>12, 'bold'=>true));
//$section->addText('№                                          от '.date("d.m.Y",$row_order).' г.', 'rStyle12');
$section->addText('«Об организации обучения»');

$section->addText('ПРИКАЗЫВАЮ:', 'rStyle14', 'pStyle');

$PHPWord->addFontStyle('rStyle12n', array('size'=>12));
$PHPWord->addParagraphStyle('pStyle12n', array('spaceAfter'=>100));
//$section->addText('1. Провести обучение c '.date("d.m.Y",$row_group).' по '.date("d.m.Y",$row_group['end']).' в соответствии с учебным планом и программой обучения «'.$order1set.'».', 'rStyle12n', 'pStyle12n');
$section->addTextBreak(1);

$section->addText('2. Зачислить в группу № '.$model['num'].' следующих специалистов:', 'rStyle12n', 'pStyle12n');

// Add table
$styleTable = array('borderSize'=>1);
$PHPWord->addTableStyle('myOwnTableStyle', $styleTable);
$table = $section->addTable('myOwnTableStyle');

// Add row
$table->addRow();

// Add cells
$styleCell = array('valign' => 'center');
$PHPWord->addFontStyle('myOwnCellStyle', array('bold'=>true, 'italic'=>true, 'size'=>12));
$table->addCell(2000, $styleCell)->addText('№ п/п', 'myOwnCellStyle');
$table->addCell(2000, $styleCell)->addText('Фамилия, имя, отчество', 'myOwnCellStyle');
$table->addCell(2000, $styleCell)->addText('Должность', 'myOwnCellStyle');
$table->addCell(2000, $styleCell)->addText('Организация', 'myOwnCellStyle');

$r = 1;

$section->addTextBreak(1);

$section->addText('3. '.$model->num, 'rStyle12n', 'pStyle12n');
$section->addTextBreak(1);

// Add table
$table = $section->addTable();

// Add row
$table->addRow();

// Add cells
$table->addCell(2000, $styleCell)->addText('Директор');
$table->addCell(2000, $styleCell)->addText($general_edu_company_ceo);

// Save File

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($PHPWord, 'Word2007');

$gname = 'Order'.$_GET['id'];

$objWriter->save("$gname.docx");

header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment; filename=$gname.docx");
readfile("$gname.docx");
unlink("$gname.docx");
?>


Ответить