从上传的pdf

时间:2016-02-02 01:37:11

标签: php pdf imagemagick

我正在尝试从用户必须上传的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。

2 个答案:

答案 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,一切正常