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


Create a button to allow users to save the page as a file?

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

考虑的选项:

  1. http://www.web2pdfconvert.com-样式是超基础的,不考虑@media print-如果使用@media print CSS,则可以接受
  2. 触发打印到文件的"打印"按钮,例如Microsoft XPS Document Writer-我的理解是这是不可行的,如果用户理解他们可以轻松打印到文件,他们就不需要按钮
  3. Word文档具有可编辑的优势,但我的理解是这非常复杂,尤其是在动态格式的情况下
  4. Button打开一个单独的PHP文件,该文件提供pdf文件,如下所示http://www.fpdf.org/-我的理解是,要重新创建我已经用CSS制作的格式,需要大量的工作,但可能无法做到100%
  5. 保存可以用Word查看的html-由于CSS在单独的文件中,Word处理CSS的能力很差,所以很难通过电子邮件发送

有没有一种更简单的方式让我错过了?还是一个克服我在这些选项中发现的障碍的好方法?

我以前不得不这样做,所以我知道你的痛苦。让我告诉你我的解决方案,然后给你合适的代码。

我决定让用户下载整个页面的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');