Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP Imagick(ImageMagick)转换为PCL时,如何将图像设置为高质量_Php_Pdf_Imagemagick_Imagick_Printer Control Language - Fatal编程技术网

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

使用PHP Imagick(ImageMagick)转换为PCL时,如何将图像设置为高质量,php,pdf,imagemagick,imagick,printer-control-language,Php,Pdf,Imagemagick,Imagick,Printer Control Language,代码如下: $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 =

代码如下:

$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--;
}
$im=new Imagick();
$im->readImageBlob($pdf\U数据);
$im->setImageFormat('pcl');
$b64pages=数组();
对于($x=1;$x getNumberImages();$x++){
$im->previousImage();
$pclpage=$im->getImageBlob();
$b64page=base64_编码($pclpage);
$B64页[]=$B64页;
$count--;
}

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

好的,所以我找到了一个shell脚本,在这里使用所有正确的参数调用ghostscript:。我在我的服务器上安装了它。现在,我的文件格式转换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_数据。pcl格式的数据在$pcl_数据中。我可以打开一个用于PCL打印机的原始打印服务器(端口9100)的套接字,直接向其写入$PCL_数据,它就可以工作了。希望这有帮助。

最佳猜测-PDF是文本上的矢量格式,PCL是一个2色(黑色/白色)位图-您需要非常非常非常高的DPI以保持文本清晰,如1200+DPI IIRC。。。这意味着您的PCL需要比原始PDF大得多。Printint使用Windows打印作为向量,该代码正在从页面
$im->getImageBlob()
创建光栅(位图)图像。你正在失去质量。问题应该是“当使用PHP Imagick(ImageMagick)转换为PCL时,如何将图像设置为高质量?”谢谢。修正了这个问题。@CD001,我同意PCL变大,只是当我增加使用
$im->setResolution()
的分辨率时,它也会使图像尺寸变小很多,比如
$im->setPage()
$im->setSize()
别帮我的ImageMagick有点生锈,因为我不久前回到了GD库(不太需要处理器),但我认为您需要
setResolution()
resizeImage()
-假设您使用的DPI为1200,PDF为A4大小,则需要执行类似
resizeImage()的操作(992014030,imagick::FILTER_LANCZOS,1,true)