imagick:无法读取文件

时间:2018-07-11 08:14:18

标签: php symfony imagick

我正在使用Sonata Media Bundle和Imagick,希望生成PDF的预览图像。 Ghostscript已安装。我尝试以下方法:

    $binaryContent = $media->getBinaryContent();
    $tempPdfFile = tempnam(sys_get_temp_dir(),'pdf');
    $tempJpegFile = tempnam(sys_get_temp_dir(),'jpeg');
    file_put_contents($tempPdfFile, $binaryContent);

    rename($tempPdfFile, $tempPdfFile . '.pdf');
    rename($tempJpegFile,$tempJpegFile . '.jpg');

    $im = new \Imagick($tempPdfFile . '.pdf');
    $im->setImageColorspace(255);
    $im->setResolution(72,72);
    $im->setCompressionQuality(75);
    $im->setImageFormat('jpeg');
    $im->writeImage($tempJpegFile.'.jpg');
    $im->clear();
    $im->destroy();

...但是我收到此错误消息:

  

无法读取文件

...行$im = new \Imagick($tempPdfFile . '.pdf');

我在这里做什么错了?

====

其他信息:我也尝试了$im = new \Imagick($tempPdfFile . '.pdf[0]');,但没有任何改善。

1 个答案:

答案 0 :(得分:0)

为了使我获得Imagick可以读取的文件的有用参考,这里大致是有效的。

public function preUpdate(Document $document)
{
    $media = $document->getMedia();
    if ($media === null) {
        return;
    }
    $mediaName = $media->getName();
    if ($media->getContentType() !== 'application/pdf') {
        return;
    }

    $context = $media->getContext();
    $formats = $pool->getFormatNamesByContext($context);

    if (null === $formats) {
        return;
    }

    $provider = $this->getProvider($media->getProviderName());
    $publicUrls = [];

    $fullFilePath = $provider->getReferenceImage($media);



}

...

private function getPool()
{
    return $this->container->get('sonata.media.pool');
}

...

private function getProvider($name)
{
    return $this->container->get($name);
}