如何将 .pdf 从 post 方法转换为 PHP 中的 .jpg

How to convert .pdf from post method to .jpg in PHP

因此,在开发 Web 应用程序时,我遇到了一个无法找到答案的问题。假设我们有这个 html

<form method="post" enctype="multipart/form-data" action="/upload.php">
    <label> Upload .pdf here 
        <input name="menu" type="file" accept=".pdf"> 
    </label>  
    <button>Submit</button>
</form>

现在 PHP 来处理它:

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
        $menu = $_POST['menu'];

        //convert whatever type menu is to something readable for Imagick

         // create Imagick object
        $imagick = new Imagick();
        // Reads image from PDF
        $imagick->readImage($menu);
        // Writes an image or image sequence Example- converted-0.jpg, converted-1.jpg
        $imagick->writeImages('menu.jpg', false);
        echo $imagick;

我在其他任何地方都找不到任何解决方案,所以我想我会在 Whosebug 上问我的第一个问题。谢谢你帮我!

如果您上传名称为“menu”的文件,实际文件数据包含在 $_FILES['menu'][“tmp_name”] 提交给 php脚本。

因此,请将代码中的 $_POST['menu'] 更改为 $_FILES['menu'][""tmp_name"] 以便进一步处理。

HTML

<form method="post" enctype="multipart/form-data" action="pdfconvert.php">
    <label> Upload .pdf here 
        <input name="menu" type="file"> 
    </label>  
    <button>Submit</button>
</form>

pdfconvert.php(我修改了代码以便处理 pdf 文件中的多个页面)

<?php

$im = new Imagick($_FILES['menu']["tmp_name"]);


$pages = $im->getNumberImages(); 



for ($i = 0; $i < $pages; $i++) { 

$url = $_FILES['menu']["tmp_name"].'['.$i.']'; 

$image = new Imagick($url);
$image->setImageFormat("jpg"); 
$image->writeImage('menu_'. $i. '.jpg'); 

echo "writing page " . $i. "<br>"; 
}

?>

最后但同样重要的是:

  1. 请确保目标文件夹可写(否则系统无法写入jpg文件
  2. 最好为处理创建一个单独的文件夹(例如./upload/),这样系统就不会将生成的 jpg 文件与您的 php 脚本“混合”
  3. 最好在生成的文件名中添加一个随机字符串,这样即使您上传两个同名文件,旧文件也不会被覆盖。