创建一个按钮,允许用户将页面保存为文件?

时间:2013-02-18 23:29:14

标签: php javascript html css printing

有没有什么好方法可以让用户将页面保存为文件以便以后清理查看,可能是PDF?需要尊重@media print CSS。

考虑的选项:

  1. http://www.web2pdfconvert.com - 样式是超基本的,不考虑@media打印 - 如果使用@media打印CSS将是可以接受的
  2. 触发打印到文件的“打印”按钮,例如Microsoft XPS Document Writer - 我的理解是,这是不可行的,如果用户理解他们可以轻松打印到文件,他们就不需要按钮
  3. Word doc - 具有可编辑的优势,但我的理解是这非常复杂,尤其是动态格式化
  4. 按钮打开一个单独的PHP文件,提供pdf,就像使用http://www.fpdf.org/一样 - 我的理解是会有大量的工作重新创建我已经使用CSS制作的格式,并且可能无法获得100%那里
  5. 使用Word保存可查看的html - 因为CSS在单独的文件中很难发送到电子邮件,而Word无论如何都很难处理CSS
  6. 我缺少一种更简单的方法吗?或者通过其中一个选项找到障碍的好方法?

1 个答案:

答案 0 :(得分:0)

我以前必须这样做,所以我知道你的痛苦。让我告诉你我的解决方案,然后给你正确的代码。

我决定让用户下载整个页面的PDF。我想要一个将HTML呈现为PDF的库。另外,我知道我需要不同的CSS而不是我的核心网站。但是,我不想复制它(比如媒体查询支持......用于制作新的换行符等)。所以,我最终使用dompdf,媒体类型的投影仪,并通过使用Zend Framework的一些内置工具加载我的同一页面来加载我的网站。 (此解决方案不需要ZF。)

让我们这样做(哦 - 是的,这不是完美的,但它会让你非常接近!)

1)下载domPDF

2)在dompdf_config.custom.inc.php文件中,取消注释或添加或以下任何行(是的,这不是完美的,但我不知道很多投影机使用这种媒体类型):

define("DOMPDF_DEFAULT_MEDIA_TYPE", "projection");

3)然后,修改您的CSS以获得媒体查询:

@media projection {
    // all of your css to make sure this works fine - like page breaks
}

4)当然,最后使用像file_get_contents()或curl这样的内容来获取整个页面。

这是我最后一段代码的样子($ html =要保存的页面的全部内容)

require_once(APPLICATION_PATH . '/../library/dompdf/dompdf_config.inc.php');
$dompdf = new DOMPDF();
$dompdf->set_protocol('http://');
$dompdf->set_host($options->domain);
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream('Printed.pdf');