我正在尝试从用户必须上传的pdf进行预览。我正在使用1and1托管服务器,所以我无法完全控制安装什么,我不知道如何安装ImageMagick。我跟着these steps我正在使用这个代码(使用VPS在不同的项目中工作):
private function preViewPDF($filename)
{
$img_path = './assets/uploads/previews';
$file_name = explode(".", $filename)[0].".jpg";
$dir = './assets/upload/files/';
$img = new Imagick($dir."/".$filename.'[0]');
$img->setImageFormat('jpg');
$img->writeImage($img_path."/".$file_name);
return "previews/".$id.$type."/".$file_name;
}
尝试并获得Imagick Class not Found Exception后,我尝试使用exec命令进行转换:
private function preViewPDF($filename)
{
$file_name = explode(".", $filename)[0].".jpg";
$dir = getcwd().'/assets/uploads/files/';
if(file_exists($dir."/".$filename))
{
exec("convert ".$dir."/".$filename.'[0]'." ".$dir."/".$file_name, $output, $return_var);
var_dump($output);
echo "<br>";
var_dump($return_var);
}
else echo "no file";
echo "<br>".$dir."/".$filename.'[0]'."<br>";
echo "<br>".$file_name."<br>";
}
var_dump($ output);抛出一个空数组。并且$ return_var是1 ...一般错误:(
如果我更改[](我要转换的页面的数量)之间的值$ output throws:
array(3) {
[0]=> string(0) ""
[1]=> string(70) "Requested FirstPage is greater than the number of pages in the file: 1"
[2]=> string(53) " No pages will be processed (FirstPage > LastPage)."
}
所以...任何想法我做错了什么?谢谢。
只有两件小事(可能很明显)。第一个,如果我在SSL连接上模拟它的顺序就可以了(我从pdf中得到一个图像)。第二,权限不是原因(我尝试创建和编写文件 - 使用fopen和fwrite-并且它可以工作)。
首先,解释一下我的实际代码:
$file_name = explode(".", $filename)[0].".jpg";
这一行是因为$ filename的扩展名是.pdf,所以我需要删除这部分并连接正确的扩展名.jpg(来自hello.pdf我得到hello.jpg)。
$dir = getcwd().'/assets/uploads/files/';
这是上传pdf的文件夹,必须保存jpg预览。
if(file_exists($dir."/".$filename))
我把这一行放在了这一行,仅仅因为我认为pdf的上传没有完成,这就是不起作用的原因。
exec("convert ".$dir."/".$filename.'[0]'." ".$dir."/".$file_name, $output, $return_var);
这是执行命令转换的行...但不起作用。
第二件事是我刚试过的一个新的简单代码:
if(file_exists("./DpRPJTmfSArPRuGZrOddLendfbhgHTrydwukMRvOMuSzVMDuBb.pdf"))
{
exec("convert ./DpRPJTmfSArPRuGZrOddLendfbhgHTrydwukMRvOMuSzVMDuBb.pdf[0] ./DpRPJTmfSArPRuGZrOddLendfbhgHTrydwukMRvOMuSzVMDuBb.jpg", $output, $return_var);
var_dump($output);
echo "<br>";
var_dump($return_var);
}
else echo "no hay fichero";
$ output为空,$ return_var为1。
答案 0 :(得分:1)
忘掉所有的渣滓并开始使用与代码相同的文件夹中的文件,以查看Imagemagick是否正常工作。
convert input.pdf output.jpg
你在Imagemagick代码中有很多变量等,很难读懂它。 我也对你的代码感到困惑,我会在转换代码之外创建文件名和路径,你可以回应它以确保它包含你期望的内容。
这看起来不对:
$filename.'[0]'
我会尝试:
$filename[0]
我认为你的pdf有多个页面?
修改强>
尝试使用此代码 - 它有一种不同的方式来显示任何错误,并允许您在有很多变量等时查看命令的内容。
$error=array();
echo "<pre>";
$cmd = "./DpRPJTmfSArPRuGZrOddLendfbhgHTrydwukMRvOMuSzVMDuBb.pdf[0] ./DpRPJTmfSArPRuGZrOddLendfbhgHTrydwukMRvOMuSzVMDuBb.jpg";
// You can use this line to see what the $cmd ontains when using a lot of variables
echo $cmd;
exec("$cmd 2>&1", $error);
echo "<br>".print_r($error)."<br>";
echo "</pre>";
答案 1 :(得分:0)
我用这个预览:
exec('convert -density 300 -trim "'.$file.'" -resize 600 -quality 85 -colorspace RGB -background white "'.$destination.'" &', $output, $return_var);
其中$ file是原始的,$ destination是图像的名称。 与&amp;最后,每个图像都将命名为image-0.jpg,image-1.jpg ..
$ return_var == 0,一切正常