我正在使用 pdfcrowd API从我的动态PHP网页生成PDF,其中我从数据库获取一些数据,并运行一些jQuery函数,setTimeout
函数有2到3在jQuery的文档就绪函数内页面底部的秒延迟。
这个jQuery函数用于根据使用Lightweight Responsive jQuery - Waterfall plugin的内容动态设置页面布局高度,这需要一些时间来完成。
因此,当我尝试下载PDF时,它会在不运行我的JavaScript / jQuery函数的情况下下载页面,该函数会延迟大约2到3秒。
我正在使用的代码详细信息:
MyWebPage代码看起来像这样:
//HTML + PHP code here at top of page
//jQuery code to set page height dynamically
function setContainerHeight(containerDiv) {
//function code here..
}
$(document).ready(function() {
setTimeout(
function() {
$(containerDiv).waterfall({gridWidth:[0,500,1000,1500,2000],gap:10});
setTimeout(function() {setContainerHeight(containerDiv);},2000);
},1000
);
});
下载页面
$client->setPageLayout(Pdfcrowd::CONTINUOUS);
$pdf = $client->convertURI($myWebPageUrl);
// Set HTTP response headers
header("Content-Type: application/pdf");
header("Cache-Control: no-cache");
header("Accept-Ranges: none");
header("Content-Disposition: attachment; filename=\"Resume.pdf\"");
// send the generated PDF
echo $pdf;
请帮助我,我可以延迟PDF扫描,直到我的页面完全加载。
提前致谢。
答案 0 :(得分:3)
由于您无法保持要呈现的网页,因为您的JavaScript
功能在页面加载后正在使用setTimeout
运行,您应该只对页面加载执行任何操作。
所以,你应该在插件工作完成后尝试调用你的函数setContainerHeight()
,这意味着你应该尝试回调插件的功能。
请记住在使用回调函数后删除setTimeout
因为不需要它们。此外,如果你的插件没有回调,那么你应该介意从插件文件中调用你的函数,虽然这不是正确的方法,但它应该可以解决问题。
在您的情况下,您应该在sorting
API中搜索名为waterfall
的函数,并在最后一个函数中添加函数调用。
希望,这可以帮助你...... !!!
答案 1 :(得分:1)
您的问题并未澄清问题的真正原因,可能是javascript不知道PDF文件何时完全加载的问题,您可以通过ajax调用来调用它吗? 如果要将PDF加载到IFrame,可以试试这个:
$("#iFrameId").on("load", function () {
$(containerDiv).waterfall({gridWidth:[0,500,1000,1500,2000],gap:10});
});
如果问题出在php中,可能是api减速的PDF输出可能会停止输出缓冲区,直到进程完成为止:
ob_start(); //at the begining
//Your code until echo
ob_end_flush(); //at the end