2012-12-13 254 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);