Pimcore\Document\Adapter\LibreOffice::getPdf PHP Method

getPdf() public method

public getPdf ( null $path = null ) : null | string | void
$path null
return null | string | void
    public function getPdf($path = null)
    {
        if ($path) {
            $path = $this->preparePath($path);
        }
        $pdfPath = null;
        if (!$path && $this->path) {
            $path = $this->path;
        }
        try {
            // if the document is already an PDF, delegate the call directly to parent::getPdf() (Ghostscript)
            $pdfPath = parent::getPdf($path);
            return $pdfPath;
        } catch (\Exception $e) {
            // nothing to do, delegate to libreoffice
        }
        $pdfFile = PIMCORE_TEMPORARY_DIRECTORY . "/document-pdf-cache/document_" . md5($path . filemtime($path)) . "__libreoffice.pdf";
        if (!is_dir(dirname($pdfFile))) {
            File::mkdir(dirname($pdfFile));
        }
        $lockKey = "soffice";
        if (!file_exists($pdfFile)) {
            // a list of all available filters is here:
            // http://cgit.freedesktop.org/libreoffice/core/tree/filter/source/config/fragments/filters
            $cmd = self::getLibreOfficeCli() . " --headless --nologo --nofirststartwizard --norestore --convert-to pdf:writer_web_pdf_Export --outdir " . escapeshellarg(PIMCORE_SYSTEM_TEMP_DIRECTORY) . " " . escapeshellarg($path);
            Model\Tool\Lock::acquire($lockKey);
            // avoid parallel conversions
            $out = Console::exec($cmd, PIMCORE_LOG_DIRECTORY . "/libreoffice-pdf-convert.log", 240);
            Model\Tool\Lock::release($lockKey);
            Logger::debug("LibreOffice Output was: " . $out);
            $tmpName = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/" . preg_replace("/\\." . File::getFileExtension($path) . "\$/", ".pdf", basename($path));
            if (file_exists($tmpName)) {
                File::rename($tmpName, $pdfFile);
                $pdfPath = $pdfFile;
            } else {
                $message = "Couldn't convert document to PDF: " . $path . " with the command: '" . $cmd . "'";
                Logger::error($message);
                throw new \Exception($message);
            }
        } else {
            $pdfPath = $pdfFile;
        }
        return $pdfPath;
    }