Как узнать, поворачивается или инвертируется изображение при извлечении из PDF с помощью PDFBox? - PullRequest
0 голосов
/ 26 марта 2020

Задача: Моя задача - извлечь все изображения из pdf и сохранить их в локальном файле.

Проблема: Когда я пытался извлечь изображения из pdf, я увидел, что не все изображения загружаются в должным образом. Рассмотрим мой PDF как 3 изображения. Когда я пытался извлечь изображения, я видел, что немногие изображения сохраняются в повернутых, инвертированных или с некоторыми другими углами поворота. Я не уверен, из каких свойств состоит это изображение в pdf.

Вопрос: 1. Я хочу знать, повернуто ли изображение или нет? 2. Если да, то я хочу знать, под каким углом это повернуто. Так что я могу изменить это вращение и сохранить его в своем локальном.

Есть ли какой-либо метод или свойство, с помощью которого мы можем узнать вышеуказанные свойства?

Ниже приведен код, который я использовал:

@Override
protected void processOperator(Operator operator, List<COSBase> operands) throws IOException {
    String operation = operator.getName();
    if ("Do".equals(operation)) {
        COSName objectName = (COSName) operands.get(0);
        PDXObject xobject = getResources().getXObject(objectName);
        if (xobject instanceof PDImageXObject) {
            PDImageXObject image = (PDImageXObject) xobject;
            int imageWidth = image.getWidth();
            int imageHeight = image.getHeight();
            System.out.println(image.getMetadata());//output null
            // same image to local
            BufferedImage bImage = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_ARGB);
            bImage = image.getImage();
        System.out.println(bImage.getPropertyNames());//output null
            ImageIO.write(bImage, "PNG", new File("C:/PdfBox_Examples/" + "image_" + imageNumber + ".png"));
            System.out.println("Image saved.");
            imageNumber++;

        } else if (xobject instanceof PDFormXObject) {
            PDFormXObject form = (PDFormXObject) xobject;
            showForm(form);
        }
    } else {
        super.processOperator(operator, operands);
    }
}
...