【问题标题】:Get the 1st page of a pdf as Image from the Byte Array of the pdf从 pdf 的字节数组中获取 pdf 的第一页作为图像
【发布时间】:2012-06-07 10:35:41
【问题描述】:

我在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 文件的字节数组中获取第一页的图像(第一页作为图像)?

【问题讨论】:

  • 我认为getPageContent 不会返回图像。你确定这个库提供这样的功能吗?
  • @Banthar - getPageContentreturns byte array 我通过它得到一个ByteArrayInputStream 然后我正在尝试写一个Image。

标签: java image bytearray itext pdf-reader


【解决方案1】:

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

但您可以使用来自Apache PDFBox 的PDFToImage:

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 中可用。

【讨论】:

    【解决方案2】:

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

    看看这个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);
    

    【讨论】:

    • 你知道do-pdf其实是建立在PDFBox之上的吗?
    猜你喜欢
    • 1970-01-01
    • 2018-02-27
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多