예제 #1
1
 /**
  * Loads template, replaces tokens with provided data and saves new file.
  * Token should have the following format in document: ${token}. In array you need to provide only (@see token)
  * @param string $templateName file name
  * @param string $newFileName file name
  * @param array $data list of tokens that should be replaced with the appropriate value, in format: (token => value)
  */
 public function saveFromTemplate($templateName, $newFileName, $data = [])
 {
     $document = new TemplateProcessor($templateName);
     foreach ($data as $key => $value) {
         $document->setValue($key, $value);
     }
     $document->saveAs($newFileName);
 }
예제 #2
0
 public function crearReciboCajaMenorAction(Request $peticion)
 {
     $formulario = $this->createForm(new ReciboCajaMenorType());
     $formulario->handleRequest($peticion);
     if ($formulario->isValid()) {
         $kernel = $this->get('kernel');
         //Se carga la plantilla
         $path = $kernel->locateResource('@FacturaBundle/Template/caja_menor_template.docx');
         $plantilla = new TemplateProcessor($path);
         $datos = $formulario->getData();
         //Se carga el archivo el valor del consecutivo
         $path = $kernel->locateResource('@FacturaBundle/Resources/config/consecutivos.yml');
         $consecutivo = null;
         $value = null;
         try {
             $value = Yaml::parse(file_get_contents($path));
             $consecutivo = $value['consecutivo_caja_menor'];
         } catch (ParseException $e) {
             printf("Problemas con el string: %s", $e->getMessage());
         }
         //Se aumenta el valor del consecutivo almacenado
         $value['consecutivo_caja_menor'] += 1;
         $yaml = Yaml::dump($value);
         file_put_contents($path, $yaml);
         // Se setea el consecutivo
         $plantilla->setValue('consecutivo', $consecutivo);
         //Se setean los datos que estaban en el formulario
         foreach ($datos as $clave => $dato) {
             if ($clave != 'fecha') {
                 $plantilla->setValue($clave, $dato);
             } else {
                 $plantilla->setValue($clave, $dato->format('d/m/Y'));
             }
         }
         //Se almacena la suma en letras
         $conversor = $this->get('numeroLetras');
         $numeroEnLetras = $conversor->numtoletras($datos['valor']);
         $plantilla->setValue('valor_letras', $numeroEnLetras);
         $plantilla->saveAs('descargas/temp.docx');
         //Se manda a guardar al cliente
         $file = 'descargas/temp.docx';
         $response = new BinaryFileResponse($file);
         $response->prepare($peticion);
         $response->send();
     }
     return $this->render('FacturaBundle:Default:creacionReciboCajaMenor.html.twig', array('formulario' => $formulario->createView()));
 }
 /**
  * add body rows
  *
  * @param Tinebase_Record_RecordSet $records
  */
 public function processIteration($_records)
 {
     $record = $_records->getFirstRecord();
     $converter = Tinebase_Convert_Factory::factory($record);
     $resolved = $converter->fromTine20Model($record);
     foreach ($this->_config->properties->prop as $prop) {
         $property = (string) $prop;
         $this->_docTemplate->setValue($property, isset($resolved[$property]) ? htmlspecialchars($resolved[$property]) : '');
     }
 }
예제 #4
0
 /**
  * generate doc
  * @var array $params
  */
 public function generateDoc($params)
 {
     Yii::$app->user->identity = \app\models\User::findIdentityByAccessToken($params['template']['key']);
     header("Content-Description: File Transfer");
     header('Content-Transfer-Encoding: binary');
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
     header('Expires: 0');
     switch ($params['template']['format']) {
         case 'PDF':
             $file = Yii::$app->user->id . '_temp.pdf';
             $writeFormat = 'PDF';
             PhpWordSettings::setPdfRendererPath(dirname(__DIR__) . '/../../../vendor/tecnickcom/tcpdf');
             PhpWordSettings::setPdfRendererName('TCPDF');
             header('Content-Type: application/pdf');
             break;
         case 'Word2013':
             $file = Yii::$app->user->id . '_temp.docx';
             $writeFormat = 'Word2013';
             header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
             break;
         default:
             $file = Yii::$app->user->id . '_temp.doc';
             $writeFormat = 'Word2007';
             header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
             break;
     }
     header('Content-Disposition: attachment; filename="' . $file . '"');
     $document = new TemplateProcessor(dirname(__DIR__) . '/../../../files/' . $this->id . '/' . $this->template_file);
     /**
      * process the fields, that have been send through the rest interface
      */
     foreach ($params['template']['fields'] as $field) {
         foreach ($field as $key => $value) {
             $document->setValue($key, UTF8encoding::fixUTF8($value));
         }
     }
     /**
      * process the tables, that have been send through the rest interface
      */
     foreach ($params['template']['tables'] as $tables) {
         foreach ($tables as $name => $rows) {
             //first we create a clone for the master row
             $document->cloneRow($name, count($rows));
             //our walking variable for the table
             $ii = 1;
             foreach ($rows as $row) {
                 foreach ($row as $cell) {
                     $document->setValue(key($cell) . '#' . $ii, current($cell));
                 }
                 $ii++;
             }
         }
     }
     // save as a random file in temp file
     $temp_file = tempnam(sys_get_temp_dir(), $file);
     $document->saveAs($temp_file);
     switch ($params['template']['format']) {
         case 'PDF':
             $phpWord = IOFactory::load($temp_file);
             $xmlWriter = IOFactory::createWriter($phpWord, $writeFormat);
             $xmlWriter->save("php://output");
             break;
         case 'Word2007':
             $phpWord = IOFactory::load($temp_file);
             $xmlWriter = IOFactory::createWriter($phpWord, $writeFormat);
             $xmlWriter->save("php://output");
             break;
         default:
             readfile($temp_file);
             break;
     }
     unlink($temp_file);
     $LogEvent = new TemplateEvent();
     $LogEvent->aTemplateCreated(Yii::$app->user->identity->username, $this->id);
     \Yii::$app->end();
 }
 /**
  * @covers ::setValue
  * @covers ::saveAs
  * @test
  */
 public function testVariablesCanBeReplacedInHeaderAndFooter()
 {
     $templateProcessor = new TemplateProcessor(__DIR__ . '/_files/templates/header-footer.docx');
     $this->assertEquals(array('documentContent', 'headerValue', 'footerValue'), $templateProcessor->getVariables());
     $docName = 'header-footer-test-result.docx';
     $templateProcessor->setValue('headerValue', htmlspecialchars('Header Value', ENT_COMPAT, 'UTF-8'));
     $templateProcessor->setValue('documentContent', htmlspecialchars('Document text.', ENT_COMPAT, 'UTF-8'));
     $templateProcessor->setValue('footerValue', htmlspecialchars('Footer Value', ENT_COMPAT, 'UTF-8'));
     $templateProcessor->saveAs($docName);
     $docFound = file_exists($docName);
     unlink($docName);
     $this->assertTrue($docFound);
 }