2012-12-13 199 views
1

我有一个名为preview的窗体和按钮。我需要一种方法来生成预览,将生成的HTML转换为图像。将Html渲染为图像

点击预览按钮开始对控制器动作(我使用Yii Framework)的ajax调用,所以我收集了表单中的所有数据并生成了预填充的数据。

我需要将生成的HTML转换为图像;通过这种方式,我可以重新调整到我需要的尺寸。

我已经尝试生成一个.pdf,然后生成从pdf的图像,并使用mpdf扩展和imagick。但imagick要求PDF是一个现有的文件,而我更喜欢用mpdf生成.pdf字符串(我无法为预览按钮上的每次点击生成和删除pdf)。

什么是一个很好的方法来生成一个图像从HTML或PDF字符串生成“即时”?

这是我使用的代码,但它从imagick返回一个错误,说没有图像尺寸:

$html2pdf = Yii::app()->ePdf->mpdf('','A4');   
    $html2pdf->WriteHTML($this->render('preview', array("data" => $data, "imageProvider" => $arrayImage),true));   
    $content_PDF = $html2pdf->Output('', EYiiPdf::OUTPUT_TO_STRING);   
    $im = new Imagick();   
    $im->readImageBlob($content_pdf);   
    //$im->setIteratorIndex(0); 
    $im->setResolution(800, 600); 
    $im->setImageFormat("jpeg"); 
    header("Content-Type: image/jpeg");   
    echo $im->getImage(); 

回答

0

你需要重新考虑采取HTML和产生它的映像文件的要求。

我需要将生成的HTML转换为图像;通过这种方式,我可以将 重新设置为我需要的尺寸。

您可以使用适当的CSS轻松调整表单中的尺寸和所有元素。这是我将采取的路线。

生成一个图像似乎是矫枉过正。

+0

是的,我知道这是不是一个很好的解决方案,但这种方式的结果是一个对象,无法点击,只有图像)。我需要这个结果。 有什么想法? –

+1

您可以随时在预览窗体中放置叠加div,增加叠加层上的z-index并将不透明度降低到0.然后用户将无法单击预览窗体,但可以查看它。我仍然认为HTML解决方案不是图像选项。 – Lowkase

0

为了使用Imagick,您需要设置图片的大小,不仅是解决方案: 您可以先尝试这样的事情,看看会发生什么?

$thumb = new imagick("/path/".$filename); 
$thumb->setImageFormat("png"); 
$thumb->thumbnailImage(128, 128);