我正在使用带有 javascript 和 jquery 的 Phonegap。我创建了一个 java servlet,它返回一个 pdf 文件。我可以在浏览器中正确获取 de 文件,但不能在 Phonegap 上。
我的代码是这样的(javascript):
$.ajax({
type: "GET",
url: "http://x.x.x.x:xxxx/MyApp/PDF",
success: function(data, textStatus, request) {
alert("pdf OK");
window.open(data, "_system");
},
error: function(data, textStatus, request) {
alert("pdr error");
}
这里是servlet(这在浏览器中可以正常工作):
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
try {
// Create PDF (this works fine)
String ruta = getServletContext().getRealPath(reportTemplateUrl);
InputStream resourceAsStream = new FileInputStream(ruta);
jasperDesign = JRXmlLoader.load(resourceAsStream);
jasperReport = JasperCompileManager.compileReport(jasperDesign);
jasperPrint = JasperFillManager.fillReport(jasperReport, null, new JRBeanCollectionDataSource(findReportData(name)));
File pdf = new File("output.pdf");
JasperExportManager.exportReportToPdfStream(jasperPrint, new FileOutputStream(pdf));
// Send PDF
response.setContentType("application/pdf");
response.addHeader("Content-Disposition", "attachment; filename=output.pdf");
response.setContentLength((int) pdf.length());
InputStream fileInputStream = new FileInputStream(pdf);
OutputStream responseOutputStream = response.getOutputStream();
int bytes;
while ((bytes = fileInputStream.read()) != -1) {
responseOutputStream.write(bytes);
}
System.out.println("CREATED!");
} catch (JRException e) {
e.printStackTrace();
}
此代码在带有 Phonegap 的 iPad 上运行,我总是收到 OK 警报。从 iPad 的浏览器中,我可以下载并阅读 pdf(我将 URL 作为普通页面放在浏览器中),一切正常。
我认为问题是来自javascript的“数据”,我不知道我是否需要先保存文件或如何显示它......
是的,我需要使用 servlet 和 ajax,PDF 是动态的。我不介意用内部或外部浏览器打开它,但我需要看到它。
谢谢!:)