我正在尝试从用户必须上传的pdf进行预览。我使用的是 1and1 托管服务器,所以我无法完全控制要安装的内容,也不知道如何安装 ImageMagick。我遵循了这些步骤,并且我正在使用以下代码(使用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 类未找到异常后,我正在尝试使用 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抛出:
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(从你好.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。
忘记所有的渣滓,从与代码位于同一文件夹中的文件开始,看看 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>";
我用这个进行预览:
exec('convert -density 300 -trim "'.$file.'" -resize 600 -quality 85 -colorspace RGB -background white "'.$destination.'" &', $output, $return_var);
其中$file是原始的,$destination是图像的名称。在末尾使用 &,每个图像将被命名为 image-0.jpg、image-1.jpg.。
$return_var == 0 当一切正常时