我在使用iText的应用程序的Android设备上遇到了一些奇怪的行为 . 这是一个典型的Java / Spring网络应用程序,没什么特别的,它使用iText生成一些简单的pdf(没什么大不了的,文件大小约为50k) .
它只是标准的 response.setContentType("application/pdf");
,它在我测试过的每个桌面浏览器中都能正常工作 . 好吧,大部分失败了......
在三星Galaxy设备上,我自己的Note 4(运行Android 5.0.1)和10个" tablets, on both the stock browser and Chrome, it fails to download at all - it tosses a notification " controllerName.bin中的一个无法下载“,其中pdf的实际名称被生成它的激活控制器的名称所取代 .
它实际上会在股票浏览器和Chrome上的HTC One M9(运行Android 5.1)上下载,但它仍然用控制器名称替换pdf名称,并将其下载为.bin而不是pdf . 将文件重命名为pdf可以完美地打开它 . 它还可以在Galaxy设备上以这种方式在Firefox for Android上下载 .
Windows和Apple设备没有问题,它只在Android上执行此操作 . 我试图找到适用于大多数设备的任何一致方法,我只是在Android方面的深度 . 任何指针或建议将不胜感激 .
1 回答
我想我的例子(并再次感谢你!) .
这个东西上的原始开发人员像这样调用了PdfWriter,
似乎
response.getOutputStream()
是罪魁祸首,在Android上造成了这种奇怪的行为 .在示例代码中,我将其更改为使用ByteArrayOutputStream:
然后将输出写回servlet输出流:
就像这样,Android设备上的一致行为 .