我现在正在尝试使用ImageMagick和PHP和CakePHP将PDF文件转换为JPG。 PDF的形状完美无缺,是正确的,但是从PDF生成的图像总是溢出文件的边框。
直到现在,我一直在尝试无故障地调整代码,从PHP文档(http://php.net/manual/pt_BR/book.imagick.php)中学到了很多东西。
以下是转换代码:
$image = new Imagick();
$image->setResolution(300,300);
$image->setBackgroundColor('white');
$image->readImage($workfile);
$image->setGravity(Imagick::GRAVITY_CENTER);
$image->setOption('pdf:fit-to-page',true);
$image->setImageFormat('jpeg');
$image->setImageCompression(imagick::COMPRESSION_JPEG);
$image->setImageCompressionQuality(60);
$image->scaleImage(1200,1200, true);
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$image->writeImage(WWW_ROOT . 'files' . DS . 'Snapshots' . DS . $filename);
结果如下: https://imgur.com/a/ISBmDMv
第一个图像是转换前的PDF,第二个图像是从PDF生成的图像,其中右侧文本溢出。
那么,为什么会这样呢?而且,如果有人为使用的任何技术(GhostScript,ImageMagick等)提供了替代方案,那么也欢迎您!
谢谢大家!
答案 0 :(得分:1)
很难说为什么看到结果却没有看到原始PDF文件,而不是图片。
最可能的解释是您的原始PDF文件使用了一种字体,但没有将该字体嵌入到PDF中。当Ghostscript将其渲染为图像时,它必须用“某物”代替丢失的字体。如果替换字体的度量(例如间距)与丢失字体的度量不完全匹配,则渲染的文本将放错位置/大小不正确。当然,由于它没有使用相同的字体,因此也不会匹配字符的形状。
这可能会导致几种不同类型的问题,但是您展示的内容是此类问题中的典型代表。尽管您没有提到它,但我也可以在文档中的多个位置看到文本覆盖的地方,这是完全相同的问题的另一个征兆。
如果是这种情况,那么Ghostscript反向通道转录本将告诉您它找不到字体,并用一种命名的字体替换丢失的字体。我无法告诉您Imagemagick是否将其存储在任何地方,我想可能不是。但是,您可以从ImagMagick profile.xml文件复制命令行,然后使用该命令行自己运行Ghostscript,然后便可以查看是否正在发生这种情况。
如果这是正在发生的事情,那么您要么要么;