将PDF保存到本地服务器

7

我正在从原始二进制数据创建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");
2个回答

12

如果你想将文件保存在服务器上而不是让访问者下载它,那么你就不需要头信息。头信息用于告诉客户端你要发送给他们什么,而在这种情况下,你没有发送任何内容(尽管你可能正在显示一个页面链接到新创建的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

1
生成PDF的函数在哪里? - sk juli kaka
1
@skjulikaka:由于问题不是关于使用PHP创建PDF数据,而是关于如何保存这样的数据超出了范围。我的代码示例中的第一行也明确说明了“**假设您有一个函数 generate_pdf(),它创建PDF”。但我相信您可以通过搜索“使用[tag:php]生成[tag:pdf]”或类似内容找到合适的答案。 - Simon
是的,我遇到了许多用于“生成 PHP 内容到 PDF”的库,但仍然无法接受,因为我的语言不理解 PDF :( ,我现在很疯狂(); - sk juli kaka
这对我有用,使用fpdf库,$pdf_data = $pdf->Output(); 这三行允许我保存.pdf文件,以便我可以将其附加到电子邮件中(在后续脚本中)。 - Jason

0
你可以使用输出控制函数。在脚本开头放置ob_start()。在结尾处使用ob_get_contents()并将内容保存到本地文件中。
之后,可以使用ob_end_clean()或ob_end_flush(),具体取决于您是要将PDF输出到浏览器,还是要将用户重定向到其他页面。如果使用ob_end_flush(),请确保在刷新数据之前设置标题。

如果您已经将PDF数据存储在内存中,那么输出缓冲是否有点像打印文件然后再次扫描它呢?即使您想同时将其保存到磁盘并让用户下载,也可以只需执行以下步骤:1. 保存数据,2. 发送标头,3. 打印PDF数据。 - Simon
这取决于您使用哪个库来创建PDF文件。有些库只能直接输出到浏览器,因此您无法“仅保存它”。 - Milan Babuškov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接