调用php Imagick扩展无法读取到tcpdf 生成的 pdf文件

Narcist 2016-11-09 10:44:05
功能:将所有需要的内容生成一张图片然后打印出来
思路:听说GD库不好处理复杂的html(里面有大量图片),所以采用 tcpdf先将html内容转成pdf 文件 然后通过 imagick 扩展转成图片格式
参考网址:http://loosky.net/2816.html
出现问题:
$file_dir = '/mnt/disk1/wwwroot/xxxxx/upload_tmp/test.pdf';
当 $im = new imagick($file_dir); 实例化的时候 报错 Failed to read the file
尝试办法:
通过网址访问生成的 pdf 可以访问,下载到本地,pdf 软件可以打开
1:upload_tmp 目录权限设置最大(无效)
2:以为是生成 pdf 内容过于复杂,简单将字符串生成PDF依然无效
3:服务器执行 exec("convert ".$file_dir." ".“test.jpg”) 无效
4:自己在本地新建pdf 文件上传到服务器 , imagick 可以将其转成图片,执行 exec("convert "本地建的pdf文件" ".“test.jpg”),可以转成图片

所以感觉是生成pdf 的时候出的问题。
现在无头绪的地方就在于,我是参考官网的例子生成的pdf ,理论上不应该有问题的。

代码如下:

$file_dir = '/mnt/disk1/wwwroot/XXXXX/upload_tmp/test.pdf';
#生成PDF
$html = ‘test’;
$pdf = new tcpdf('P', 'mm', 'A4', true, 'UTF-8', false);
$pdf->SetFont('stsongstdlight', '', 14);
$pdf->AddPage();
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
$file = $pdf->Output($file_dir, 'F');
#转成 images
$im = new imagick($file_dir); # 执行这句报错
$im->setImageFormat( "jpg" );
$img_name = 'test.jpg';
$im->setSize(800,600);
$im->writeImage('/mnt/disk1/wwwroot/www.glitzcloud.com/upload_tmp/'.$img_name);
$im->clear();
$im->destroy();





...全文
642 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_32525395 2017-07-25
  • 打赏
  • 举报
回复
function pdf2png($pdf,$path,$page=-1) { if(!extension_loaded('imagick')) { return '无php imagick扩展'; } if(!file_exists($pdf)) { return 'PDF文件路径错误'; } $im = new Imagick(); $im->setResolution(120,120); $im->setCompressionQuality(100); //var_dump($pdf);exit; if($page==-1) $im->readImage($pdf); else $im->readImage($pdf."[".$page."]"); foreach ($im as $Key => $Var) { $Var->setImageFormat('png'); $filename = $path."/". md5($Key.time()).'.png'; if($Var->writeImage($filename) == true) { $Return[] = $filename; } } return $Return; } $path="D:/phpStudy/WWW/test/images"; $s=pdf2png("D:/phpStudy/WWW/test/PDF.pdf",$path); var_dump($s);exit; 为什么我在调用$im->readImage($pdf); 的时候 Apache服务就直接崩了呢。。。。
Narcist 2016-11-23
  • 打赏
  • 举报
回复
引用 5 楼 fdipzone 的回复:
这里有个使用php+js把html生成图片的例子,可以参考下:http://www.jb51.net/article/82628.htm
谢谢版主,一直忙项目忘记回帖了,已经成功把问题解决,闲下来的时候看了下版主给的例子,一番折腾还是成功转成图片了,但是当 html 里面有需要打印的条形码,通过这个示例将其转成图片之后条形码会失真导致扫描不出来。
傲雪星枫 2016-11-23
  • 打赏
  • 举报
回复
条形码需要大一点吧。
傲雪星枫 2016-11-09
  • 打赏
  • 举报
回复
Imagick 是生成图片的,不是生成pdf的吧。 应该是先生成图片,然后tcpdf读取图片生成pdf吧。
傲雪星枫 2016-11-09
  • 打赏
  • 举报
回复
这里有个使用php+js把html生成图片的例子,可以参考下:http://www.jb51.net/article/82628.htm
Narcist 2016-11-09
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
Failed to read the file 读取文件失败 你把生成的 pdf 文件换个位置试试 php 官网是这样示例的: $im = new Imagick(); $im->setResolution( 300, 300 ); $im->readImage( "test.pdf" );
位置换过,不行的,官网的示例我在服务器上尝试,如果不写绝对路径会报错,写了绝对路径就没问题。 原因我找到了。我尝试了一下用tcpdf 自带的示例直接生产pdf 然后 imagick去读取这个pdf ,发现是可以生成图片的。所以我就开始对比代码。 问题在这里: # $pdf->SetFont('stsongstdlight', '', 14); $pdf->SetFont('dejavusans', '', 14, '', true); 上面注释的代码是导致报错的原因。用示例的下面的代码就成功了,具体原理还没来得及研究,抽空把这个功能做好之后会研究一下原因
xuzuning 2016-11-09
  • 打赏
  • 举报
回复
Failed to read the file 读取文件失败 你把生成的 pdf 文件换个位置试试 php 官网是这样示例的: $im = new Imagick(); $im->setResolution( 300, 300 ); $im->readImage( "test.pdf" );
Narcist 2016-11-09
  • 打赏
  • 举报
回复
引用 1 楼 fdipzone 的回复:
Imagick 是生成图片的,不是生成pdf的吧。 应该是先生成图片,然后tcpdf读取图片生成pdf吧。
版主可能理解错了,我可能没说清楚,最终我要将html的内容生成图片,根据网上的资料,先将html内容用tcpdf 转成 pdf 文件,然后再利用imagick 扩展读取转成的pdf 文件,将里面内容生成图片。这种转换就间接实现了html内容转图片。

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧