This bundle is a wrapper of the library PHPOffice/PHPWord.
For the complete reference look at the PHPWord Docs. PHPWord Docs
1 Add to composer.json to the require
key
$composer require ggggino/wordbundle
2 Register the bundle in app/AppKernel.php
$bundles = array(
// ...
new GGGGino\WordBundle\GGGGinoWordBundle(),
);
- Create an empty object:
$phpWordObject = $this->get('phpword')->createPHPWordObject();
- Create a Word and write to a file given the object:
$writer = $this->get('phpword')->createWriter($phpWordObject, 'Word2007');
$writer->save('file.xls');
- Create a Word and create a StreamedResponse:
$writer = $this->get('phpword')->createWriter($phpWordObject, 'Word2007');
$response = $this->get('phpword')->createStreamedResponse($writer);
The list of the types are:
- 'Word2007'
- 'ODText'
- 'HTML'
- 'PDF'
- 'RTF'
You could find a lot of examples in the official PHPWord repository https://github.com/PHPOffice/PHPWord/tree/develop/samples
namespace YOURNAME\YOURBUNDLE\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
class DefaultController extends Controller
{
public function indexAction($name)
{
// ask the service for a Word2007
$phpWordObject = $this->get('phpword')->createPHPWordObject();
// Create a new Page
$section = $phpWordObject->addSection();
// Adding Text element to the Section having font styled by default...
$section->addText(
'"Learn from yesterday, live for today, hope for tomorrow. '
. 'The important thing is not to stop questioning." '
. '(Albert Einstein)'
);
// create the writer
$writer = $this->get('phpword')->createWriter($phpWordObject, 'Word2007');
// create the response
$response = $this->get('phpword')->createStreamedResponse($writer);
// adding headers
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'stream-file.doc'
);
$response->headers->set('Content-Type', 'application/msword');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
}
In the template file(docx) variable should be declared as ${var1}, so in the template you can change "var1" value in this way:
$phpTemplateObject->setValue('var1', 'testValue');
Complete example
namespace YOURNAME\YOURBUNDLE\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
class DefaultController extends Controller
{
public function indexAction($name)
{
$fileName = ".../../test.docx";
// ask the service for a Word2007
$phpTemplateObject = $this->get('phpword')->createTemplateObject($fileName);
$phpTemplateObject->setValue('test', 'testValue');
$phpWordObject = $this->get('phpword')->getPhpWordObjFromTemplate($phpTemplateObject);
// create the writer
$writer = $this->get('phpword')->createWriter($phpWordObject, 'Word2007');
// create the response
$response = $this->get('phpword')->createStreamedResponse($writer);
// adding headers
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'stream-file.docx'
);
$response->headers->set('Content-Type', 'application/msword');
$response->headers->set('Pragma', 'public');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
return $response;
}
}
- fork the project
- clone the repo
- submit a PullRequest