我是imageMagick的新手。我在将pdf上传到目录后尝试显示pdf缩略图。 exec()函数似乎不适用于我的代码。 pdf正在完美地上传到目录中,但是没有显示缩略图,而是显示了指向pdf的链接。我希望缩略图显示在屏幕上。请帮帮我!!!!
<html>
<head>
<meta charset="utf-8" />
<title>PDF Preview Image</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<table>
<tr><td>Select only pdf's<input type="file" name="pdfupload" id="pdfupload" placeholder="Select only pdf" multiple="multiple"></td>
<td><input type="submit" name="submit" value="Upload" /></td></tr></td>
</table>
</form>
</body>
</html>
<?php
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
//Define the directory to store the uploaded PDF
$pdfDirectory = "pdf/";
//Define the directory to store the PDF Preview Image
$thumbDirectory = "pdfimage/";
//Get the name of the file (Basename)
$filename = basename( $_FILES['pdfupload']['name'], ".pdf");
// Clean the filename
//Remove all characters from the file name other than letters, numbers, hyphens and underscores
$filename = preg_replace("/[^A-Za-z0-9_-]/", "", $filename).(".pdf");
//Name the thumbnail image (Same as the pdf file - You can set custom name)
$thumb = basename($filename, ".pdf");
//Upload the PDF
if(move_uploaded_file($_FILES['pdfupload']['tmp_name'], $pdfDirectory.$filename)) {
//Set path to the PDF file
$pdfWithPath = $filename;
//Add the desired extension to the thumbnail
$thumb = $thumb.".jpg";
//execute imageMagick's 'convert', setting the color space to RGB
//This will create a jpg having the widthg of 200PX
exec("convert \"{$pdfWithPath}[0]\" -colorspace RGB -geometry 200 $thumbDirectory$thumb");
// Finally display the image
echo '<p><a href="'.$pdfWithPath.'"><img src="pdfimage/'.$thumb.'" alt="" /></a></p>';
}
}
?>
答案 0 :(得分:0)
捕获exec()的结果,然后粘贴结果。
我认为这是因为你的shell命令字符串没有正确构建。在PHP中构建shell命令时,如果将变量注入字符串(例如文件名),则实际上应该使用escapeshellarg
函数来避免在命令行中没有转义字符的问题。
'convert '.escapeshellarg($pdfWithPath).' -colorspace RGB -geometry 200 '.
$thumbDirectory .escapeshellarg($thumb)
答案 1 :(得分:0)
经过长时间的研究,我发现了使用xpdf的简单解决方案。
重要-此示例可在Windows操作系统上运行,但xpdf也可用于Mac OS和Linux。
每个人都建议使用ImageMagick和GhostScript,对于这样的小任务,我认为这太过分了。
首先从https://www.xpdfreader.com/下载xpdf文件
您将获得几个.exe文件,将所有文件放在您的Apaches服务具有访问权限的文件夹中(例如“ C:\ xpdf”)。
用法:
$filepath = YOUR_PDF_FILE_PATH;
$thumbnail_file = 'C:\\temp\\thumbnail.png'; \\there is no such file yet, xpdf will create it shortly
$xpdf_path = 'C:\\xpdf\\pdftopng.exe';
$xpdf_cmd = $xpdf_path.' -f 1 -l 1 -r 100 '.$filepath.' '.$thumbnail_file;
exec($xpdf_cmd);
参数说明: -f =要转换为图像的首页-我想要首页,例如1个 -l =转换为图像的最后一页-我也希望第一页1个 您可以同时删除“ -f 1 -l 1”,输出将是每个页面在单独的PNG图像文件中。
-r = DPI分辨率(默认为150),我不希望rsult的PNG文件很大,因为它仍然只是缩略图,因此我使用了“ -r 100”,这导致了大约50kb的png文件。 / p>
现在,您可以选择如何处理新创建的PNG图像文件。 在我的项目中,我只需要显示它并在使用后将其删除,因此我将使用PHP标头作为image / png返回结果并取消链接文件。
header("Content-type: image/png");
readfile($thumbnail_file);
unlink($thumbnail_file);
在HTML中使用此代码的一种可选方式:
<img src=thumbnail.php?path=PDF_PATH />
有很多使用方法,每种方法都会找到最适合自己需要的实现。
希望有帮助!