2012-03-06 65 views
6

我有一個網站,我正在構建一個從表單中獲取數據(人員姓名)並將其張貼到下一頁表格中的自定義「註釋」中的網站。我希望用戶能夠將他們的「筆記」保存爲一張帶有自定義名稱的圖像。有沒有辦法將一個SPECIFIC HTML TABLE保存爲PNG?也許截取網頁上的特定座標的截圖?將HTML表格保存爲圖像

如果不是有沒有辦法在HTML畫布中呈現張貼的PHP內容?

任何幫助將是偉大的。我現在有點頭痛。

+2

看看php的內置圖像功能:http://nz.php.net/manual/en/refs.utilspec.image.php – 2012-03-06 20:15:26

回答

0

可行的解決方案

  • 使用FPDF來創建HTML(表)PDF
  • 使用ImageMagick的PDF格式轉換爲PNG
0

你可以也使用Xvfb。這是一個Linux軟件包。它代表「X-window虛擬幀緩衝器」(如果你想知道爲什麼它有這麼深奧的名字)。

這將做什麼,是加載一個頁面,執行任何JavaScript並將CSS中的不同樣式應用於服務器的幀緩衝區。然後你可以保存圖像。

Xvfb可能不會在大多數共享託管服務上可用,但是,如果沒關係,那麼它將是一個可行的解決方案。

2

雖然您可以使用各種工具呈現HTML,但您無法確定這些工具是否會像瀏覽器呈現HTML一樣呈現HTML。

如果你的最終目標是它生成的文本圖像,然後讓我們來解決,而不是試圖讓您建議的工作解決了這個問題。

看看PHP的imagettftext()函數。它包含一個示例#1它從文本創建一個小的,簡單的圖像,可以存儲在任何變量中......包括一個表單變量。

通過使用這個例子,並添加一些其他的PHP's GD functions,你可以做一個體面的副本的表,並確保它看起來完全按照你想要的方式,而不是html2ps或其他工具呈現它的方式。

<?php 
// Set the content-type 
header('Content-Type: image/png'); 

// Create the image 
$im = imagecreatetruecolor(400, 30); 

// Create some colors 
$white = imagecolorallocate($im, 255, 255, 255); 
$grey = imagecolorallocate($im, 128, 128, 128); 
$black = imagecolorallocate($im, 0, 0, 0); 
imagefilledrectangle($im, 0, 0, 399, 29, $white); 

// The text to draw 
$text = isset($_POST['name']) ? $_POST['name'] : "name"; 
// Replace path by your own font path 
$font = 'arial.ttf'; 

// Add some shadow to the text 
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text); 

// Add the text 
imagettftext($im, 20, 0, 10, 20, $black, $font, $text); 

// Using imagepng() results in clearer text compared with imagejpeg() 
imagepng($im); 
imagedestroy($im); 
?> 

這裏是由上面的腳本生成的樣本輸出:

enter image description here

注意,您需要提供arial.ttf按照指示在上面的鏈接。

如果事情不起作用,請在繼續操作之前在屏幕上和Web服務器的錯誤日誌中查找錯誤。您的Web服務器上可能沒有安裝PHP的GD模塊。如果是這種情況,您應該與您的服務器管理員聯繫,確保您需要的是可用的。

+0

我認爲做這個服務器端對於這項任務來說是一種矯枉過正可以通過@Anber建議的圖書館以更簡單的方式完成。這裏的示例http://jsfiddle.net/arthurcamara/6phhb5g9 – 2016-04-28 20:52:14

+0

@ArthurCamara - 我同意做這個客戶端提供了一個更清晰的解決方案,但OP的問題是關於如何在PHP中生成PNG。 – ghoti 2016-04-29 13:53:55

+0

我認爲他的問題是關於用表格生成PNG。和「如果不是有辦法呈現張貼的PHP」。所以PHP是第二種選擇,因爲它應該是:) – 2016-05-04 17:49:10

2

您可以在客戶端嘗試this JS library

+0

對我來說,這也是一個更清潔的解決方案。 JSFiddle示例(html2canvas)在這裏:https://jsfiddle.net/arthurcamara/6phhb5g9/ – 2016-04-28 20:49:45

+0

這是一個有用的庫。如果這個鏈接的回答[提供了上下文](http://stackoverflow.com/help/how-to-answer),並且解決了問題中提到的要求,那也是非常好的:「*我希望用戶能夠能夠將他們的「筆記」保存爲一張帶有其定製名稱的圖像。*「 – ghoti 2016-04-29 13:55:46

+0

與@ghoti達成一致:)更多的上下文和更深入的回答將非常棒。使用畫布還可以在畫面上顯示自定義名稱的註釋,因此爲此提供客戶端解決方案應該沒有問題。 – 2016-05-04 17:52:04