2012-06-02 24 views
1

我在byte array获得pdf。我只想将pdf的第一页转换为image获取pdf的第一页作为pdf的字节数组的图像

我已经累com.lowagie.text.pdf提供的类如下 -

PdfReader reader = new PdfReader(input); 
reader.selectPages("1"); 
File file = new File("D:/img1.jpg"); 
BufferedImage pdfImage = ImageIO.read(new ByteArrayInputStream(reader.getPageContent(1))); 
ImageIO.write(pdfImage, "jpg", file); 

这样做让我当ImageIO.write被称为异常? 当我获取由reader.getPageContent(1)返回的字节数组的大小时,我得到了一个1000+的值。令我困惑的是为什么我会得到例外。

例外 -

java.lang.IllegalArgumentException: image == null! 

我试图iText的很好,但它是没有用的。

你能否建议我一种从pdf文件的字节数组中获取第一页图像(第一页作为图像)的方法?

+0

我不认为'getPageContent'返回一个图像。你确定这个库提供这样的功能吗? –

+0

@Banthar - 'getPageContent'returns'byte array',我通过获得'ByteArrayInputStream',然后我试图写一个'Image'。 – JHS

回答

1

回答我自己的问题,以便其他人可以从中受益。 经过一番研究,我发现它并得到了解决方案。

看看这个link

PDFDocumentReader document = new PDFDocumentReader(<byteArraOfThePDF>); 
PageDetail pageDetail = new PageDetail("<docIDanything>", "", <pagenumber>, ""); 
ResourceDetail det = document.getPageAsImage(pageDetail); 

BufferedImage image = ImageIO.read(new ByteArrayInputStream(det.getBytes())); 
File file = new File("d:/img2.jpg"); 
ImageIO.write(image, "jpg", file); 
+2

您是否知道do-pdf实际上是建立在PDFBox上的? – MaxArt

1

据我所知,这是iText不可能的(至少在前一段时间,我搜索了类似的问题)。

但是你可以使用PDFToImageApache PDFBox

String [] args = new String[7]; 
args[0] = "-startPage"; 
args[1] = "1"; 
args[2] = "-endPage"; 
args[3] = "1"; 
args[4] = "-outputPrefix"; 
args[5] = "MyJpgFile"; 
args[6] = "MyPdfFile"; 

PDFToImage.main(args); 

很容易为此编写的包装。与此同时,在PDFBox中也许可以使用这种封装。

相关问题