从pdf的字节数组中获取pdf的第一页作为图像

时间:2012-06-02 14:05:41

标签: java image bytearray itext pdf-reader

我在byte array收到了一个pdf。我想将pdf的第一页转换为image

我已经厌倦了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文件的字节数组中获取第1页图像(第1页为图像)?

2 个答案:

答案 0 :(得分:1)

据我所知,iText无法做到这一点(至少在不久前我搜索类似的问题时)。

但您可以使用PDFToImage中的Apache 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中同时可用。

答案 1 :(得分: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);