从上传的 pdf 创建缩略图


Create a thumbnail from uploaded pdf

我正在尝试从用户必须上传的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 当一切正常时