首页 文章

iText pdf生成在Android浏览器上失败

提问于
浏览
0

我在使用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 回答

  • 0

    我想我的例子(并再次感谢你!) .

    这个东西上的原始开发人员像这样调用了PdfWriter,

    PdfWriter.getInstance(document, response.getOutputStream());
    

    似乎 response.getOutputStream() 是罪魁祸首,在Android上造成了这种奇怪的行为 .

    在示例代码中,我将其更改为使用ByteArrayOutputStream:

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PdfWriter.getInstance(document, baos);
    

    然后将输出写回servlet输出流:

    // write ByteArrayOutputStream to the ServletOutputStream
    OutputStream os = response.getOutputStream();
    baos.writeTo(os);
    os.flush();
    os.close();
    

    就像这样,Android设备上的一致行为 .

相关问题