【问题标题】:Save pdf to local server将pdf保存到本地服务器
【发布时间】:2012-02-15 12:43:02
【问题描述】:

我正在从原始二进制数据创建一个 PDF 文件,它运行良好,但由于我在 PHP 文件中定义的标题,它会提示用户“保存”文件或“打开方式”。有什么办法可以将文件保存在本地服务器上的某处http://localhost/pdf

以下是我在页面中定义的标题

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Transfer-Encoding: binary");

【问题讨论】:

    标签: php stream raw-data


    【解决方案1】:

    如果您想将文件保存在服务器上而不是让访问者下载它,则不需要标题。标头用于告诉客户您要发送什么内容,在这种情况下什么都不是(尽管您可能会显示一个链接到您新创建的 PDF 或其他内容的页面)。

    因此,只需使用 file_put_contents 之类的函数将文件存储在本地,最终让您的 Web 服务器处理文件传输和 HTTP 标头。

    // Let's say you have a function `generate_pdf()` which creates the PDF,
    // and a variable $pdf_data where the file contents are stored upon creation
    $pdf_data = generate_pdf();
    
    // And a path where the file will be created
    $path = '/path/to/your/www/root/public_html/newly_created_file.pdf';
    
    // Then just save it like this
    file_put_contents( $path, $pdf_data );
    
    // Proceed in whatever way suitable, giving the user feedback if needed 
    // Eg. providing a download link to http://localhost/newly_created_file.pdf
    

    【讨论】:

    • 函数generate_pdf()在哪里?
    • @skjulikaka:因为问题不在于使用 PHP 创建 PDF 数据,而在于如何保存超出范围的此类数据。我的代码示例中的第一行还明确指出“假设您有一个函数 generate_pdf() 可以创建 PDF”。但我相信你可以通过searching for "generate pdf using php" 或类似的方式找到合适的答案。
    • 是的,我遇到了很多 generate php content to pdf 的图书馆,但仍然不能接受,因为我的语言无法理解 pdf :( ,,我现在疯了();
    • 这对我有用,使用 fpdf 库,$pdf_data = $pdf->Output();这 3 行允许我保存 .pdf,以便我可以将其附加到电子邮件中(在后续脚本中)。
    【解决方案2】:

    您可以使用输出控制功能。将 ob_start() 放在脚本的开头。最后使用 ob_get_contents() 并将内容保存到本地文件。

    之后,您可以使用 ob_end_clean() 或 ob_end_flush() ,具体取决于您是否也想将 PDF 输出到浏览器,或者将用户重定向到其他页面。如果您使用 ob_end_flush(),请确保在刷新数据之前设置标头。

    【讨论】:

    • 如果内存中已经有 PDF 数据,输出缓冲会不会有点像打印文件只是再次扫描?即使您想在让用户下载它的同时将它保存到磁盘,难道您不能只 1. 保存它,2. 发送标题,3. 打印 PDF 数据吗?
    • 这取决于您使用哪个库来创建 PDF 文件。有些库只能直接输出到浏览器,所以不能“直接保存”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    相关资源
    最近更新 更多