Как преобразовать байтовый массив PDF в байтовый массив изображения jpg в Java, используя apache pdfbox api? - PullRequest
0 голосов
/ 09 декабря 2018

Мне было поручено это задание в моем проекте.Я получаю байтовый массив PDF от службы, и мне нужно преобразовать его в байтовый массив изображения JPG и вернуть байтовый массив JPG.Кто-нибудь может мне помочь, пожалуйста?

Я попробовал приведенное ниже решение, которое преобразует байтовый массив PDF в JPG, но не возвращает байтовый массив JPG.

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.pdfbox.util.PDFImageWriter;

import org.apache.pdfbox.pdmodel.PDDocument;

public class DocumentService{
    public byte[] convertPDFtoImage(byte[] bytes) {
        InputStream targetStream = new ByteArrayInputStream(bytes);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PDDocument document = null;
        try {
            document = PDDocument.load(targetStream);
            PDFImageWriter writer = new PDFImageWriter();
            writer.writeImage(document, "jpg", null, 1, 2, "C:\\Shailesh\\aaa");
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            e.printStackTrace();
        }
    }
}

1 Ответ

0 голосов
/ 10 декабря 2018

Я нашел одно решение, но метод renderer.renderImageWithDPI (pageNumber, 300) принимает номер страницы в качестве аргумента метода и может конвертировать только одну страницу PDF за раз .Но мне нужно полный PDF в JPG в виде байтового массива.

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

public class DocumentService {

    public byte[] convertPDFtoImage(byte[] bytesPDF) {
        InputStream targetStream = new ByteArrayInputStream(bytesPDF);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PDDocument document = null;
        try {
            document = PDDocument.load(targetStream);
            PDFRenderer renderer = new PDFRenderer(document);
            int pageNumber = 1;
            BufferedImage bi = renderer.renderImageWithDPI(pageNumber, 300);
            ImageIO.write(bi, "jpg", baos);
            baos.flush();
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        } finally {
            if (document != null) {
                try {
                    document.close();
                    baos.close();
                    log.info("End convert PDF to Images process");
                } catch (IOException e) {
                    log.error(e.getMessage());
                }
            }
        }
        return baos.toByteArray();
    }
}
...