【发布时间】:2025-11-24 11:55:02
【问题描述】:
我在下面有以下将本地 PDF 文件转换为图像的 php 函数。简而言之,我希望将每个 PDF 页面转换为单独的图像。
该函数将 PDF 转换为图像 - 但仅限于最后一页。我希望将 PDF 的 每一页 转换为图像并编号。不仅仅是 PDF 的最后一页。
目前,此函数将example.pdf 的最后页转换为example-0.jpg。我确定问题在于for 方法。我错过了什么?
$file_name = 'example.pdf'; // using just for this example, I pull $file_name from another function
function _create_preview_images($file_name) {
// Strip document extension
$file_name = basename($file_name, '.pdf');
// Convert this document
// Each page to single image
$img = new imagick('uploads/'.$file_name.'.pdf');
// Set background color and flatten
// Prevents black background on objects with transparency
$img->setImageBackgroundColor('white');
$img = $img->flattenImages();
// Set image resolution
// Determine num of pages
$img->setResolution(300,300);
$num_pages = $img->getNumberImages();
// Compress Image Quality
$img->setImageCompressionQuality(100);
// Convert PDF pages to images
for($i = 0;$i < $num_pages; $i++) {
// Set iterator postion
$img->setIteratorIndex($i);
// Set image format
$img->setImageFormat('jpeg');
// Write Images to temp 'upload' folder
$img->writeImage('uploads/'.$file_name.'-'.$i.'.jpg');
}
$img->destroy();
}
【问题讨论】:
-
我不知道是否发生了变化,但上次我生成 pdf 缩略图时是
$img = new imagick('file.pdf[0]');只获取第一页。 -
是的...我知道这一点。但我不想要第一页、中间页或最后一页 - 我想要将所有页面转换为单个图像。
-
我知道,我想说的是 PDF 不能像其他多图像格式那样工作,所以可能你必须获取页数并在循环中创建新的 imagick 实例,将
[$i]附加到文件名。 -
你看过所有代码了吗……这正是我想要做的……
-
此方法不适用于多页 PDF。
$img->flattenImages();将所有页面相互合并并将文件导出为单个图像,无论页面数量如何。有关具有黑色背景的多页 PDF 的解决方案,请参阅*.com/q/26793063/2028547
标签: php codeigniter pdf imagemagick imagick