You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP Imagick库将图片转为PDF时指定8.5×11英寸纵向页面

将图片转换为8.5×11英寸纵向PDF的PHP Imagick解决方案

要让图片适配8.5×11英寸(Letter规格)的纵向PDF页面,你需要手动创建对应尺寸的画布,将图片按比例缩放后居中放置,再输出PDF。默认情况下Imagick会直接沿用图片的尺寸作为PDF页面大小,因此需要额外处理页面布局。

修改后的代码:

$source_image = '你的图片路径';
$destination_pdf = '输出PDF路径';

// 定义Letter页面的像素尺寸(基于72DPI,PDF标准分辨率)
$letterWidth = 8.5 * 72; // 612像素
$letterHeight = 11 * 72; // 792像素

$imagick = new Imagick();
// 读取原图,改用'r'只读模式更合理
$source_handle = fopen($source_image, 'r');
$imagick->readImageFile($source_handle);
fclose($source_handle);

// 创建新的Letter尺寸画布,白色背景
$canvas = new Imagick();
$canvas->newImage($letterWidth, $letterHeight, 'white', 'pdf');

// 计算图片缩放比例,保持宽高比且不超出画布
$imageWidth = $imagick->getImageWidth();
$imageHeight = $imagick->getImageHeight();
$scale = min($letterWidth / $imageWidth, $letterHeight / $imageHeight);

// 按比例缩放图片
$imagick->scaleImage($imageWidth * $scale, $imageHeight * $scale);

// 计算图片在画布中的居中位置
$x = ($letterWidth - $imagick->getImageWidth()) / 2;
$y = ($letterHeight - $imagick->getImageHeight()) / 2;

// 将缩放后的图片合成到画布上
$canvas->compositeImage($imagick, Imagick::COMPOSITE_OVER, $x, $y);

// 写入并输出PDF文件
$output_handle = fopen($destination_pdf, 'w');
$canvas->writeImageFile($output_handle);
fclose($output_handle);

// 清理Imagick资源,避免内存泄漏
$imagick->destroy();
$canvas->destroy();

关键说明:

  • 页面尺寸转换:以PDF行业标准的72DPI为基准,将8.5×11英寸转换为612×792像素的画布;如果需要更高分辨率(如300DPI),可将72替换为300,对应像素尺寸为2550×3300。
  • 缩放逻辑:通过min()计算最大适配比例,确保图片完整显示且不超出页面边界。
  • 居中布局:通过画布与图片的尺寸差计算偏移量,实现图片在页面内的居中效果。

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:17:12