Php 进度条

Php 进度条,php,jquery,joomla,tcpdf,Php,Jquery,Joomla,Tcpdf,我使用php和TCPDF从几个MySQL查询生成一个自定义PDF文件。用户单击“生成PDF”按钮后,将打开一个新选项卡,并启动PDF过程。构建PDF平均需要10秒左右。一旦文件准备好,浏览器关闭空白页并显示“保存为对话框”窗口。 我想在创建PDF时向用户显示某种类型的消息。谈到AJAX/JQUERY,我有点不懂装懂,但我尝试过实现几种解决方案,但都没有成功 注意事项: 后端是Joomla 使用$pdf->Output('example.pdf','D')生成pdf 在$pdf输出之前使用ob_e

我使用php和TCPDF从几个MySQL查询生成一个自定义PDF文件。用户单击“生成PDF”按钮后,将打开一个新选项卡,并启动PDF过程。构建PDF平均需要10秒左右。一旦文件准备好,浏览器关闭空白页并显示“保存为对话框”窗口。

我想在创建PDF时向用户显示某种类型的消息。谈到AJAX/JQUERY,我有点不懂装懂,但我尝试过实现几种解决方案,但都没有成功

注意事项:

  • 后端是Joomla
  • 使用
    $pdf->Output('example.pdf','D')
    生成pdf
  • $pdf输出之前使用ob_end_clean以避免“TCPDF:数据已输出”错误
  • 我尝试过在页面末尾添加一个
    的方法,以及一些jQuery/CSS,在页面加载时显示动画gif。它不起作用,我不知何故觉得这要么是因为ob_end_clean,要么是Joomla!框架。

    1)对于进度条,必须通过ajax运行脚本

    2) 您有pdf页面计数…在创建的每个页面上,您可以更改进度条值

    3) 您必须为创建的每个pdf页面使用php输出控制函数 php有一个很好的函数列表

    我看不到你的代码,但你必须这样做

    $i = 1;
    while($i< PDF_PAGE_COUNT){
            ob_start();
            pdf_create_page($i);
            echo $i/PDF_PAGE_COUNT;
            ob_flush();
            flush();
    $i++;
    }
    
    $i=1;
    而($i
    p、 为了更好的回答,请把你的代码贴在这里

    $(文档).ready(函数(){
    $(“#PDF”)。单击(函数(){
    /*--------------验证过滤器-------------------------------*/
    if(!(validarFecha(fecha_ymd(rj.Get('#TxtFechaIni').value())){Warn2.show();返回false;}
    if(!(validarFecha(fecha_ymd(rj.Get('#TxtFechaFin').value())){Warn3.show();返回false;}
    if(Date.parse(fecha#u ymd(rj.Get('#TxtFechaIni').value())>=Date.parse(fecha#u ymd(rj.Get('#TxtFechaFin').value()){Warn.show();返回false;}
    /*一切都好吗
    否则{
    /*生成报告时显示消息*/
    消息({类型:'info',标题:'generating report',值:'Please,wait…',按钮:'})。show();
    /*带有要发送的参数的url*/
    var url=“report.php?&slash=“+”+”&module=“+””
    +“&TxtCheck=excel”
    +“&TxtFechaIni=“+rj.Get('#TxtFechaIni').value()
    +“&TxtFechaFin=“+rj.Get('#TxtFechaFin').value()
    +“&LkpTdoc=“+rj.Get('#LkpTdoc').value();
    var filename=;/*报告的名称,我设置*/
    var xhr=new XMLHttpRequest();
    xhr.responseType='blob';
    xhr.onload=函数(){
    WinSnd.hide();/*隐藏消息*/
    var a=document.createElement('a');
    a、 href=window.URL.createObjectURL(xhr.response);//xhr.response-es-un-blob文件
    a、 目标='u blank';
    a、 下载=文件名;//文件名
    a、 style.display='none';
    文件.正文.附件(a);
    a、 单击();//操作
    删除一条//
    };
    xhr.open('GET',url);
    xhr.send();
    }//鱼翅
    });//fin函数
    
    });// fin
    我建议只设置
    标题('Content-disposition:attachment')
    ,这样就不会打开任何窗口。这样,我相信,文件将通过浏览器的普通文件下载程序下载。类似这样的内容:
    header('Content-Disposition:attachment;filename=“download.pdf”');标题(“内容类型:应用程序/pdf”)我正在通过POST将所需信息发送到新页面。我不能在同一页上输出PDF,因为我们在TCPDF中使用HTML/CSS格式。这是非常敏感的,所以在一个干净的页面上构建PDF是首选。我也不能切换PDF类,因为使用TCPDF要花很长时间才能做到这一点。我知道,我也使用过TCPDF。如果你想要一个进度条,你必须通过AJAX发送帖子数据。所以如果我通过AJAX发送帖子数据,我前面描述的AJAX方法应该可以工作吗?AJAX用于接收数据和更改进度条值。首先,您必须在服务器端代码中处理进度状态。答案通常没有提供足够的信息,好像他们对如何回答问题做了一些解释。