我正在一个网站上使用不同的jQuery表单输出到html结果页面,这个html转换为带有DOMPDF库的pdf文件。当在本地进行转换时,没有问题,但是当它在服务器中发生时,生成的pdf图像的质量低于原始图像,带有白色划痕和模糊(如果需要,我可以上传示例)。
做了一些研究,我尝试了以下解决方案:
- 尝试了不同的图像格式(jpg,png,gif)
- 尝试了“DOMPDF_PDF_BACKEND”的不同值(渲染后端使用)(CPDF,PDFLib,GD)
- 尝试了不同的“DOMPDF_DPI”值
- “DOMPDF_ENABLE_REMOTE”值设置为“true”
- 尝试用不同的应用程序打开生成的pdf(ubuntu pdf viewer,adobe acrobat pdf,gimp,photoshop)
都具有相同的结果。
还在本地和服务器上查看了phpinfo():
PHP版本
local:PHP Version 5.5.11
服务器:PHP版本5.3.29
GD版:
两者:捆绑(2.1.0兼容)
GD FreeType版本:
当地:2.4.8
版本:2.4.9
libPNG版本:
当地:1.5.9
服务器:1.2.49
我不知道要比较的其他参数。
我不知道还有什么可以尝试。
提前致谢。
答案 0 :(得分:0)
感谢anwswer,我昨天看到那篇文章,我曾尝试过不同的图像格式,但我还在等待使用这些库。
最后,评论关于想象图像处理的代码" //使用PECL imagick + ImageMagic来处理透明的PNG图像"解决了这个问题,这是由于包含透明度(alpha)的图像,如png和gif。
// Use PECL imagick + ImageMagic to process transparent PNG images
}elseif (extension_loaded("imagick")) {
$imagick = new Imagick($file);
$imagick->setFormat('png');
// Get opacity channel (negative of alpha channel)
$alpha_channel = clone $imagick;
$alpha_channel->separateImageChannel(Imagick::CHANNEL_ALPHA);
$alpha_channel->negateImage(true);
$alpha_channel->writeImage($tempfile_alpha);
// Cast to 8bit+palette
$imgalpha_ = imagecreatefrompng($tempfile_alpha);
imagecopy($imgalpha, $imgalpha_, 0, 0, 0, 0, $wpx, $hpx);
imagedestroy($imgalpha_);
imagepng($imgalpha, $tempfile_alpha);
// Make opaque image
$color_channels = new Imagick();
$color_channels->newImage($wpx, $hpx, "#FFFFFF", "png");
$color_channels->compositeImage($imagick, Imagick::COMPOSITE_COPYRED, 0, 0);
$color_channels->compositeImage($imagick, Imagick::COMPOSITE_COPYGREEN, 0, 0);
$color_channels->compositeImage($imagick, Imagick::COMPOSITE_COPYBLUE, 0, 0);
$color_channels->writeImage($tempfile_plain);
$imgplain = imagecreatefrompng($tempfile_plain);
}
然后它将使用"} else {"提取没有Alpha通道的图像的选项。
您还可以在php.ini
中禁用imagick模块