当前位置: 首页 > 知识库问答 >
问题:

警告:使用DPI渲染时,您没有关闭PDF文档循环

郎羽
2023-03-14

我想按页分割pdf到图像文件,但我得到了警告:你没有关闭PDF文档循环时renderImageBackDPI仍然有警告更新代码:

    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");
         */

    }

错误循环

总警告与页数相同。。。我已经尝试关闭但无法工作,这个过程使我的服务器成为java。lang.OutOfMemoryError:Java堆空间

更新:

        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);
        }

这是调用拆分方法的代码......

共有1个答案

公西苗宣
2023-03-14

这在一定程度上与问题无关,但原因是未能关闭splitter生成的文档。split()。

 类似资料:
  • 我正在尝试加载PDF文档并打印它。整个过程都正常,但我收到了以下警告“警告:您没有关闭PDF文档”,我不明白为什么在我关闭文档后会出现这种情况。它出现在第11行(job.print();)。因为它是在打印时发生的,所以我无法调试它。

  • 在对PDF文档进行数字签名后,我在Apache PDFBox中关闭了PDF文档。我收到警告:

  • 当我使用像或这样的IO类时,Eclipse会显示一个警告。如何使Eclipse在我自己的类未关闭时为它显示此警告? 我想知道的是,是否有一个接口或我需要实现的东西来使我的类被视为IO类,以便它独立于任何一个IDE,例如,命令行在资源未关闭时也会显示警告。

  • 我想知道我是否可以使用MathJax渲染LaTeX符号,而不封装LaTeX符号周围的\(......\)。例如,对于\frac{2}{3}而不是\(\frac{2}{3}\),如果是,我如何设置它? 非常感谢!

  • 我需要能够删除安全/加密从一些PDF文档,最好与itextsharp库。这在过去是可能的(如何通过使用C#提供文件的密码作为参数来解密pdf文件?),但最近对库的更改意味着该解决方案不再起作用。