2012-03-06 127 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