我正在使用DOMPDF生成动态表。提交表单后,$ _POST变量将发送到 test.php :
<?php
session_start();
$theTemplate = 'test.php';
function renderToPDF($templateFile)
{
require_once("./dompdf/dompdf_config.inc.php");
ob_start();
include $templateFile;
$contents = ob_get_clean();
if ($contents !== false)
{
$dompdf = new DOMPDF();
$dompdf->load_html($contents);
$dompdf->render();
$dompdf->stream("Custom_Data.pdf");
}
}
renderToPDF($theTemplate);
?>
tabletest.php 有一个包含动态值的表,包括表单中的一些$ _POST和来自MYSQL表的一些变量。提交表单后,PDF会成功生成,但在下载PDF后有没有办法重定向到另一个页面?我没有找到类似问题的确凿答案(Create PDF with DOMPDF and Redirect和How to generate pdf file using dompdf and redirect to another page)......
答案 0 :(得分:1)
简短回答:你不能。
当您致电$dompdf->stream()
时,PDF的内容会立即发送到浏览器并且脚本执行结束。此时,您无法再将浏览器重定向到另一个页面。
您可能会尝试将用户首先发送到目标网页,然后将用户从那里重定向到PDF呈现。您可以使用HTML元标头或JavaScript来实现。如果您指定PDF应作为附件发送,则用户将在登录中间页面后收到下载对话框。
这是网站用于下载的技术,当他们显示一个页面时会显示“您的下载将以...开始”。
答案 1 :(得分:0)
发布以希望将来对某人有所帮助。
我解决这个问题的方法是在流事件之后设置一个cookie。就我而言,单击按钮后我将下载标签,下载完成后将删除事件监听器。
这是一个非常特殊的用例,在链接标记上使用target
属性时,这里给出的答案是一个更简单的方法:https://stackoverflow.com/a/11315861/4484799不幸的是,我无法将其用于特定用途-案例。
我的解决方法是:
<?php
$dompdf->stream($filename);
// Set cookie after stream. From what I noticed the cookie doesn't
// get set until the stream is done
setcookie('my_cookie', 'download complete', time() + 86400, "/");
?>
在Javascript中,我正在检查此cookie是否存在(using this tried and tested library for js cookie handling),如果存在,则刷新页面:
(jQuery)
$( window ).load(function() {
function checkLabelDownloadCookie(){
const cookie = Cookies.get('my_cookie');
if( cookie ){
Cookies.remove('my_cookie'); //remove cookie
location.reload(); //reload page
}else{
console.log("PDF download cookie not found yet");
}
}
function monitorLabelDownloadCookie(){
// check if the cookie exists every 500ms
setInterval( checkLabelDownloadCookie, 500 );
}
monitorLabelDownloadCookie();
});
这是我的解决方案,您当然可以在用例代码中添加更多条件