【问题标题】:PHP Excel: Saving created PDF to remote server and not user downlaodPHP Excel:将创建的 PDF 保存到远程服务器而不是用户下载
【发布时间】:2013-02-04 02:19:18
【问题描述】:

这与我之前的问题 re (DOMPDF) 类似,不同的是我现在使用 PHPExcel 来创建 PDF。

我尝试了 file_put 方法,但它下载的是一个空的 PDF。那么我哪里出错了,还是不能这样做?

下面是我输出字段的最终代码以及我尝试过的内容

  header('Content-Type: application/pdf');
  header('Content-Disposition: attachment;filename="TestSheet.pdf"');
  header('Cache-Control: max-age=0');

  $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
  $objWriter->save('php://output');

  $file_location = $save_Path;
  file_put_contents($file_location,$objWriter);
  exit;

似乎一旦保存它就会清除数据,因此是空白 PDF

谢谢

【问题讨论】:

    标签: php phpexcel


    【解决方案1】:

    丢弃标题......它们都是关于告诉网络浏览器期待一个 PDF 文件,但您不会将任何内容发送回浏览器(更不用说 PDF 文件了)。

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
    $objWriter->save('php://output');
    

    告诉 PHPExcel 将生成的 PDF 直接发送到 Web 浏览器....您说您不想这样做,而是保存到远程服务器。

    您需要拦截来自 $objWriter->save() 的结果,这样它就不会进入浏览器。使用输出缓冲捕获它:

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
    ob_start();
    $objWriter->save('php://output');
    $myPdfData = ob_get_contents();
    ob_end_clean();
    

    然后您在 $myPdfData 中捕获了 PDF 数据流,然后可以执行以下操作:

    file_put_contents($file_location, $myPdfData);
    

    请注意,这可能会占用大量内存

    【讨论】:

    • 非常感谢我永远不会得到那个,但是非常感谢
    • @Mark Ba​​ker:很好的答案。它对我有用。你说的内存饥渴是什么意思?我使用 Ajax 请求从 excel 文件创建了 pdf 文件。当我生成的 Excel 文件包含超过 50 行时,ajax 调用将中止。我不知道为什么。但是当我尝试单独创建纯 xls 文件时,它正在工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多