如何使用PHP Imagick (ImageMagick)将图像转换为PCL时设置为高质量


how do i set the image to high quality when converting to PCL using PHP Imagick (ImageMagick)

代码如下:

$im=new Imagick();
$im->readImageBlob($pdf_data);
$im->setImageFormat('pcl');
$b64pages = array();
for ($x = 1;$x <= $im->getNumberImages(); $x++) {
    $im->previousImage();
    $pclpage = $im->getImageBlob();
    $b64page = base64_encode($pclpage);
    $b64pages[] = $b64page;
    $count--;
}

当我将生成的PCL图像直接发送到客户端的PCL打印机时,输出是模糊的。通过windows驱动程序打印时,PDF不模糊。驱动程序做了什么,我没有做,以确保PCL输出是清晰的?

好的,所以我找到了一个shell脚本调用ghostscript与所有正确的参数在这里:https://gist.github.com/ongardie/6800587。我把它安装在我的服务器上。现在我的文件格式转换php代码看起来像这样:

chdir("../pdf_to_pcl");
$ident = uniqid();
$pdf_filename = $ident.".pdf";
$pdf_file = fopen($pdf_filename,'w+');
fwrite($pdf_file,$pdf_data);
fclose($pdf_file);
exec("./pdf2pcl $pdf_filename");
$pcl_filename = $ident.".pcl";
$pcl_file = fopen($pcl_filename,"r+");
while($dt = fread($pcl_file,4096)) {
    $pcl_data .= $dt;    
}
fclose($pcl_file);
unlink($pdf_filename);
unlink($pcl_filename);

我要转换的图像数据在$pdf_data中。pcl格式的数据在$pcl_data中。我可以为PCL打印机打开一个到RAW打印服务器(端口9100)的套接字,并直接向它写入$pcl_data,它就可以工作了。