/** * Converts xhtml to pdf * * @param $xhtml * @return Binary pdf content or false if error */ public function generatePDF($xhtml) { //check if $tmpdir exists else try to create it if (!eZFileHandler::doExists($this->tmpDir)) { if (!eZDir::mkdir($this->tmpDir, eZDir::directoryPermission(), true)) { eZDebug::writeWarning("ParadoxPDF::generatePDF Error : could not create temporary directory {$this->tmpDir} ", 'ParadoxPDF::generatePDF'); eZLog::write("ParadoxPDF::generatePDF Error : could not create temporary directory {$this->tmpDir} ", 'paradoxpdf.log'); return false; } } elseif (!eZFileHandler::doIsWriteable($this->tmpDir)) { //check if $tmpdir is writable eZDebug::writeWarning("ParadoxPDF::generatePDF Error : please make {$this->tmpDir} writable ", 'ParadoxPDF::generatePDF'); eZLog::write("ParadoxPDF::generatePDF Error : please make {$this->tmpDir} writable ", 'paradoxpdf.log'); return false; } $rand = md5('paradoxpdf' . getmypid() . mt_rand()); $tmpXHTMLFile = eZDir::path(array($this->tmpDir, "{$rand}.xhtml")); $tmpPDFFile = eZDir::path(array($this->tmpDir, "{$rand}.pdf")); //fix relative urls to match ez root directory $xhtml = $this->fixURL($xhtml); eZFile::create($tmpXHTMLFile, false, $xhtml); $pdfContent = ''; //run jar in headless mode $command = $this->javaExec . " -Djava.awt.headless=true"; if ($this->debugEnabled && $this->debugVerbose) { $command .= " -Dxr.util-logging.loggingEnabled=true"; } $command .= " -jar " . $this->paradoxPDFExec . " {$tmpXHTMLFile} {$tmpPDFFile}"; //fix to get all command output $command .= " 2>&1"; //Enter the Matrix exec($command, $output, $returnCode); //Cant trust java return code so we test if a plain pdf file is genereated if (!(eZFileHandler::doExists($tmpPDFFile) && ($this->size = filesize($tmpPDFFile)))) { $this->writeCommandLog($command, $output, false); return false; } $this->writeCommandLog($command, $output, true); $pdfContent = file_get_contents($tmpPDFFile); //cleanup temporary files //if debug enabled preseves the temporary pdf file //else remove all temporary files if (!$this->debugEnabled) { eZFileHandler::unlink($tmpPDFFile); eZFileHandler::unlink($tmpXHTMLFile); } return $pdfContent; }