使用pdfbox进行PDF渲染

时间:2016-06-24 08:00:26

标签: java image pdf pdfbox

当我尝试将pdf转换为图像时,对于某些pdf,我会收到“内存不足”错误。所以我增加了堆大小然后我再次得到了一些不同的pdf文件的错误。 暂时假设我没有其他对象的内存泄漏。那么这个内存出错的原因是什么? 它只是图像是如此之大(我认为不是这种情况),它消耗堆,或者pdfbox存储其内存中每个页面的缓冲图像,这有助于增加堆大小? 任何见解都会很棒。

这是我试图呈现的pdf的链接。 https://drive.google.com/file/d/0B_Ke2amBgdpeNFFDem5KVVVzanc/view?usp=sharing 这是代码段。

PDFRenderer pdfRenderer = new PDFRenderer(pdDoc);
BufferedImage image = pdfRenderer.renderImageWithDPI(page-1, 300,ImageType.GRAY);
//image=ImageHelper.convertImageToGrayscale(image);
ImageIOUtil.writeImage(image,"G:/Trial/tempImg.png", 300);

请注意,对于这个特定的pdf问题是通过增加堆大小来解决的,但我想知道的是pdfbox将缓冲的图像存储在其内存中并导致堆大小。

这是另一个即使增加堆大小也面临同样问题的pdf。 https://drive.google.com/file/d/0B_Ke2amBgdpedDBtaG1QcW1oYlU/view?usp=sharing 在这个pdf中,我的代码在呈现第44页时永远需要。 我不知道为什么会这样。

1 个答案:

答案 0 :(得分:0)

好吧看来这个问题不是由于任何错误或内存泄漏造成的,而是由于图像大小造成的。 拟议的解决方案: - 1)增加你的Xmx大小 2)切换到64位JVM。

编辑: - 感谢您的回答。我要把它放在这里。 测试由@Tilman Hausherr执行,结果是堆大小应该增加。注意使用64位jvm。