我正在使用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]');
,但没有任何改善。
答案 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);
}