/** * Calls the wkhtmltopdf executable to generate a PDF. * * @param DOMDocument $structure * @param DocBlox_Transformer_Transformation $transformation * * @return void */ public function transform(DOMDocument $structure, DocBlox_Transformer_Transformation $transformation) { $artifact = $transformation->getTransformer()->getTarget() . DIRECTORY_SEPARATOR . $transformation->getArtifact(); $transformation->setArtifact($artifact); $source = substr($transformation->getSource(), 0, 1) != DIRECTORY_SEPARATOR ? $transformation->getTransformer()->getTarget() . DIRECTORY_SEPARATOR . $transformation->getSource() : $transformation->getSource(); $transformation->setSource($source); $options = ''; if ($transformation->getParameter('toc', 'false') == 'true') { $options = ' toc '; } // TODO: add parameter to provide a cover HTML // TODO: add a parameter to provide a header HTML // TODO: add a parameter to provide a footer HTML // first try if there is a wkhtmltopdf in the global path, this helps windows users exec('wkhtmltopdf ' . $options . ' ' . $transformation->getSource() . ' ' . $transformation->getArtifact() . ' 2>&1', $output, $error); $output = implode(PHP_EOL, $output); // this notice is linux specific; if it is found no global wkhtmltopdf was installed; try the one which is included // with docblox if (strpos($output, 'wkhtmltopdf: not found') !== false) { exec($this->getConfig()->paths->application . '/src/wkhtmltopdf/wkhtmltopdf-i386 ' . $options . ' ' . $transformation->getSource() . ' ' . $transformation->getArtifact() . ' 2>&1', $output, $error); $output = implode(PHP_EOL, $output) . PHP_EOL; } // log message and output $this->log('Generating PDF file ' . $transformation->getArtifact() . ' from ' . $transformation->getSource()); $this->log($output, $error == 0 ? DocBlox_Core_Log::INFO : DocBlox_Core_Log::CRIT); // CRASH! if ($error != 0) { throw new Exception('Conversion to PDF failed, see output for details'); } }
/** * Invokes the query method contained in this class. * * @throws InvalidArgumentException * * @param DOMDocument $structure * @param DocBlox_Transformer_Transformation $transformation * * @return void */ public function transform(DOMDocument $structure, DocBlox_Transformer_Transformation $transformation) { $artifact = $transformation->getTransformer()->getTarget() . DIRECTORY_SEPARATOR . $transformation->getArtifact(); $transformation->setArtifact($artifact); $method = 'executeQuery' . ucfirst($transformation->getQuery()); if (!method_exists($this, $method)) { throw new InvalidArgumentException('The query ' . $method . ' is not supported by the FileIo writer'); } $this->{$method}($transformation); }