使用DOMPDF和重定向创建PDF


Create PDF with DOMPDF and Redirect

在PHP项目中,我需要创建一个PDF文件,并在用户单击"提交"按钮时重定向到另一个页面。我已经设法使用DOMPDF创建了pdf文件。PDF创建是在一个单独的文件('PDFRecipt.php')中完成的。当用户单击主页上的按钮时,我调用了该页面。这就是如何调用PDF页面

header('location:PDFRecipt.php');

但问题是当我尝试在调用PDF页面后重定向时

header('location:Other.php');

它不创建PDF(仅重定向)。我试着改变header('location:PDFRecipt.php');include_once('PDFRecipt.php');

则它没有正确创建PDF(损坏的PDF文件)

如何创建PDF文件&重定向到其他页面?

编辑:

PDFRecipt.php 中的代码

$html='SOME HTML';
include("../../dompdf/dompdf_config.inc.php");
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream('FileName.pdf');        
//header('location:Other.php);

问题答案

为此,您需要将第二个header调用移动到PDFRecipt文件中。现在,当它们都在一个文件中时,对header的第二次调用将覆盖第一次调用。

请记住,当输出发送到用户浏览器时会发送头,这就是为什么您经常看到有人在header('Location: http://example.org');之后调用exit()

因此,任何设置相同标头的后续调用(在本例中为Location)都将覆盖第一个标头,直到标头被发送。

同样值得指出的是,您应该在Location:中使用完整的web URL

HTTP/1.1需要一个绝对URI作为»位置:包括方案、主机名和绝对路径,但有些客户端接受相对URI。您通常可以使用$_SERVER['HTTP_HOST'],$_SERVER['HP_SELF']和dirname()从相对一个你自己

根据本手册header页:http://php.net/manual/en/function.header.php

根据评论更新

因此,您使用stream()方法向客户端发送PDF——您不能将其与Location:标头组合。这是因为DOMPDF已经将内容刷新到屏幕上。我假设您的PDFRecipt.php文件正在将PDF存储到磁盘的某个位置。

有关更多详细信息,请参阅DOMPDF源代码:http://code.google.com/p/dompdf/source/browse/trunk/dompdf/lib/class.pdf.php#3061