我有以下问题:
我目前正在使用一种软件(MicroStrategy,BI),它具有将报告导出为pdf的功能,它的工作原理如下:
每个报告都有一个唯一的ID,因此您选择要导出的报告,并使用jsp i将此报告的ID发送到导出工具,它会生成一个完整的URL,其中包含MicroStrategy服务器将读取的一些参数以生成PDF 。
我正在尝试捕获此pdf网址并将其发送到Java方法,该方法将此pdf保存在硬盘驱动器中,而不会向用户提示任何内容。
我的问题是这个URL不会立即生成,需要一段时间,并且,在此过程中会进行一些重定向。
所以,在所有那些闲聊之后,我怎么能捕获该死的URL?
我正在做的是将pdf加载到iframe中,然后使用我发现搜索的js代码提取url,将其分配给JSP变量,然后,一旦我有了pdf url,就调用Java方法。但它没有用。
JavaScript函数是这样的:
<script language="text/javascript">
function getSrc()
{
var CurrentUrl = document.getElementById('miframe').contentWindow.location.href;
if(currentUrl.substr(length-5)==".pdf")
{
return currentUrl;
}
else
{
setTimeout(getSrc(),5000);
}
}
</script>
这是我对它的电话:
<% jsp code
String currentUrl="<script>document.writeln(getSrc();)</script>";
more jsp code %>
其余的代码实际上很好,用普通的pdf URL尝试了它,并将pdf保存到磁盘中。
希望它是可以理解的,并提前感谢!
答案 0 :(得分:0)
您的主要问题是您正在呼叫getSrc
,而不是将其传递给setTimeout
(您实际上是将null
传递给setTimeout
,除非第二次呼叫{{} 1}}碰巧工作,在这种情况下你传递一个字符串,getSrc
由于“语法错误”而无法处理。
相反,使用setTimeout
- setTimeout(getSrc,5000);
后没有括号。这传递了函数,而不是结果。
此外,getSrc
错误,部分原因是currentUrl.substr(length-5)
未定义(您需要length
),部分原因是您需要currentUrl.length
才能获得最后四个字符
答案 1 :(得分:0)
我不知道您对MicroStrategy有什么样的访问权限,但是有一个MicroStrategy java api可以让您执行文档并获取pdf而无需捕获URL。 查看他们的知识库以获取示例。
答案 2 :(得分:0)
为什么不直接保存PDF格式的报告/文档,这样当您打开报告时,它将自动以PDF格式生成。
如果您不喜欢以PDF格式保存报表的想法(例如,因为您还需要它作为常规报表,并且您不想维护同一对象的两个版本),则可以使用URLAPI生成使用&executionMode=3
和¤tViewMedia=32
的PDF。
不确定这些参数,最好的方法是找出它们(除了一些MicroStrategy TN)之外是以PDF格式导出报告并检查网址。