我使用php和TCPDF从几个MySQL查询生成一个定制的PDF文件。一旦用户单击"Generate“按钮,就会打开一个新的选项卡,并启动PDF进程。平均而言,构建PDF大约需要10秒。一旦文件准备就绪,浏览器将关闭空白页并显示“另存为”对话框窗口。
我想在PDF创建时向用户显示某种类型的消息。谈到AJAX/JQUERY,我有点像个新手,但我尝试过实现几种解决方案,但都没有成功。
要注意的事情:
$pdf->Output('example.pdf','D')生成pdf$pdf-Output以避免"TCPDF: Data已经输出“错误。我已经尝试过将一个<div>添加到页面末尾的方法,以及一些jQuery/CSS,它将在页面加载时显示一个动画gif。它不起作用,我觉得这是由ob_end_clean或Joomla造成的!框架。
发布于 2014-02-15 00:33:45
1)对于进度条,必须通过ajax运行脚本
2)您有pdf页count...on,每页创建一个可以更改进度条值的页面。
3)必须使用php输出控制函数,用于创建php的每个pdf页面,并为此提供一个良好的函数列表。
我没有看到你的代码,但你必须这样做
$i = 1;
while($i< PDF_PAGE_COUNT){
ob_start();
pdf_create_page($i);
echo $i/PDF_PAGE_COUNT;
ob_flush();
flush();
$i++;
}如需更好的答案,请将您的代码粘贴在这里!
发布于 2015-05-04 22:07:01
$(document).ready(function(){
$("#PDF").click(function(){
/*-------------- validate filters -------------------------------*/
if(!(validarFecha(fecha_ymd(rj.Get('#TxtFechaIni').value())))){Warn2.show();return false; }
if(!(validarFecha(fecha_ymd(rj.Get('#TxtFechaFin').value())))){Warn3.show();return false; }
if(Date.parse(fecha_ymd(rj.Get('#TxtFechaIni').value()))>=Date.parse(fecha_ymd(rj.Get('#TxtFechaFin').value()))){Warn.show();return false; }
/* is alll right */
else {
/* show a message while generating report*/
WinSnd.Message({type:'info', title:'generating report', value:'Please, wait ...', buttons:' '}).show();
/* url with params to send */
var url="report.php?&slash="+'<?php echo(isset($_POST['slash'])?@$_POST['slash']:@$_GET['slash']);?>'+"&module="+'<?php echo (isset($_POST['module'])?@$_POST['module']:@$_GET['module']);?>'
+"&TxtCheck=excel"
+"&TxtFechaIni="+rj.Get('#TxtFechaIni').value()
+"&TxtFechaFin="+rj.Get('#TxtFechaFin').value()
+"&LkpTdoc="+rj.Get('#LkpTdoc').value();
var filename = <?php echo '"'.$gSave.'"';?>; /* name for report, i set*/
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onload = function(){
WinSnd.hide(); /* hide message */
var a = document.createElement('a');
a.href = window.URL.createObjectURL(xhr.response); // xhr.response es un blob file
a.target = '_blank';
a.download = filename; // file name
a.style.display = 'none';
document.body.appendChild(a);
a.click(); // action
delete a; //
};
xhr.open('GET', url);
xhr.send();
}// fin validaciones
});//fin function
});// fin
https://stackoverflow.com/questions/21788888
复制相似问题