警告:您在 renderImageWithDPI 时没有关闭循环的 PDF 文档

Warning: You did not close a PDF Document looping when renderImageWithDPI

我想按页将 pdf 拆分为图像文件,但我收到警告:当 renderImageWithDPI 时,您没有关闭 PDF 文档循环 仍然有警告 更新代码:

    public void splitImage(PDDocument document, File checkFile, File theDirSplit, String fileExtension, File theDir, File watermarkDirectory, int numberOfPages)
            throws InvalidPasswordException, IOException {

        String fileName = checkFile.getName().replace(".pdf", "");
        int dpi = 300;
        if (theDirSplit.list().length < numberOfPages)
        {
            for (int i = 0; i < numberOfPages; ++i)
            {       
                if (i == numberOfPages)
                    break;
                
                if (theDirSplit.list().length != numberOfPages)
                {
                    File outPutFile = new File(theDirSplit + Constan.simbol + fileName + "_" + (i + 1) + "." + fileExtension);
                    document = PDDocument.load(checkFile);
                    PDFRenderer pdfRenderer = new PDFRenderer(document);
                    BufferedImage bImage = pdfRenderer.renderImageWithDPI(i, dpi, ImageType.RGB);
                    ImageIO.write(bImage, fileExtension, outPutFile);
                                            
                }
                // splitService.watermark(outPutFile, (i + 1), watermarkDirectory, "pdf");
            }
            document.close();
            //System.out.println("Converted Images are saved at -> " + theDirSplit.getAbsolutePath());
        }
        System.out.println("Done Partial SPlit");
        /*
         * int i = 1; while (iterator.hasNext()) { PDDocument pd = iterator.next();
         * pd.save(theDirSplit + Constan.simbol + i++ + ".pdf"); }
         * System.out.println("Multiple PDF’s created");
         */

    }

error looping

警告总数与页数相同... 我已经尝试关闭但无法正常工作,此过程使我的服务器 java.lang.OutOfMemoryError: Java 堆 space

更新:

        else if ("pdf".equalsIgnoreCase(typeFile)) {
            System.out.println(
                    "target file " + downloadPath + R_OBJECT_ID + Constan.simbol + R_OBJECT_ID + "." + typeFile);
            
            //get jumlah halaman
            try(PDDocument document = PDDocument.load(checkFile)){
                File theDirSplit = new File(theDir.getAbsolutePath() + Constan.simbol + "splitImage");
                createFolder(theDirSplit);
                String fileExtension = "jpeg";
                File watermarkDirectory = new File(theDir.getAbsolutePath() + Constan.simbol + "watermarkImage");
                createFolder(watermarkDirectory);
                // split 2 page image
                if (theDirSplit.list().length <= document.getNumberOfPages()) {
                    try {
                        splitImage(document,checkFile, theDirSplit, fileExtension, theDir, watermarkDirectory, document.getNumberOfPages()/2);
                    } catch (IOException e) {
                        System.out.println("ERROR SPLIT PDF " + e.getMessage());
                        e.printStackTrace();
                    }
                }
                res.setTotalPages(document.getNumberOfPages());
                document.close();
                return new ResponseEntity<>(res, HttpStatus.OK);
            }
        } else {
            res.setTotalPages(1);
            return new ResponseEntity<>(res, HttpStatus.OK);
        }

这是调用 split 方法的代码....

这个问题有些丢失,但原因是未能关闭由 splitter.split() 生成的文档。