循环中使用PDFBox加载多份PDF时始终获取第一份内容的问题求助
PDF多文件加载异常的解决方向
针对你遇到的问题——遍历MultipartFile列表加载PDF时,文档信息、页数始终返回第一份文件的结果,以下是具体排查和解决建议:
检查MultipartFile列表的构造正确性
输出每个MultipartFile实例的hashCode(),确认列表中的对象不是重复引用。如果存在重复添加同一个实例的情况,即使文件名显示不同,实际读取的还是同一文件内容。改用输入流方式加载PDF
替换PDDocument.load(multipartFile.getBytes())为PDDocument.load(multipartFile.getInputStream()),直接通过输入流加载文件,避免字节数组可能带来的缓存或复用问题。修改后代码:try (PDDocument document = PDDocument.load(multipartFile.getInputStream())) { System.out.println(multipartFile.getBytes().length); System.out.println(multipartFile.getOriginalFilename()); System.out.println(document.hashCode()); System.out.println(document.getDocumentInformation().getTitle()); System.out.println(document.getNumberOfPages()); } catch (IOException e) { throw new RuntimeException(e); }验证文件字节内容的唯一性
对每次迭代中multipartFile.getBytes()生成MD5哈希值并打印,确认不同MultipartFile对应的字节内容确实存在差异,排除字节数组被意外覆盖的可能。排查PDFBox的资源污染
虽然try-with-resources会自动关闭PDDocument,但可以尝试在代码块末尾手动调用document.close()做双重保障,或者检查是否存在静态的PDFBox配置(如全局的MemoryUsageSetting)导致上下文复用。
内容的提问来源于stack exchange,提问作者pellumb baboci
相关产品推荐
相关产品推荐

