PDFBox - Extract rotated text

35 Views Asked by At

I am currently trying to extract text from PDF files using PDFBox, but the problem is that these PDFs are rotated, so I need to find the rotation angle and rotate them accordingly.

This is the code:

    public void wawa(String pdfRoute) {
        try (PDDocument document = PDDocument.load(new File(pdfRoute))) {
            for (int i = 0; i < document.getNumberOfPages(); i++) {
                PDPage page = document.getPage(i);
                
                PDFTextStripper stripper = new PDFTextStripper();
                
                stripper.setSortByPosition(true);
                stripper.setAddMoreFormatting(true);
                
                String text = stripper.getText(document);
                
                Matrix matrix = stripper.getTextMatrix();
                
                if (matrix != null) {
                    double rotationAngle = detectRotationAngle(matrix);
                    System.out.println("Page rotation angle: " + (i + 1) + ": " + rotationAngle + " grados");
                } else {
                    System.out.println("Couldn't get text matrix for page " + (i + 1));
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public int detectRotationAngle(Matrix matrix) {
        int direction = -1;
        if (direction < 0) {
            float a = matrix.getScaleY();
            float b = matrix.getShearY();
            float c = matrix.getShearX();
            float d = matrix.getScaleX();
            // 12 0 left to right
            // 0 12
            if (a > 0 && Math.abs(b) < d && Math.abs(c) < a && d > 0) {
                direction = 0;
            }
            // -12 0 right to left (upside down)
            // 0 -12
            else if (a < 0 && Math.abs(b) < Math.abs(d) && Math.abs(c) < Math.abs(a) && d < 0) {
                direction = 180;
            }
            // 0 12 up
            // -12 0
            else if (Math.abs(a) < Math.abs(c) && b > 0 && c < 0 && Math.abs(d) < b) {
                direction = 90;
            }
            // 0 -12 down
            // 12 0
            else if (Math.abs(a) < c && b < 0 && c > 0 && Math.abs(d) < Math.abs(b)) {
                direction = 270;
            } else {
                direction = 0;
            }
        }
        return direction;
    }

i'm getting warnings saying

2024-03-12T10:32:39.497-03:00  WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont     : No Unicode mapping for 81 (81) in font null

These warnings go from 0 to 90.

This is the output:

2024-03-12T10:32:39.491-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 0 (0) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 1 (1) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 2 (2) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 3 (3) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 4 (4) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 5 (5) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 6 (6) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 7 (7) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for .notdef (8) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 9 (9) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 10 (10) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 11 (11) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 12 (12) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 13 (13) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 14 (14) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 15 (15) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 16 (16) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 17 (17) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 18 (18) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 19 (19) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 20 (20) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 21 (21) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 22 (22) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 23 (23) in font null 2024-03-12T10:32:39.492-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 24 (24) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 25 (25) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 26 (26) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 27 (27) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 28 (28) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 29 (29) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 30 (30) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 31 (31) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 32 (32) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 33 (33) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 34 (34) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 35 (35) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 36 (36) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 37 (37) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 38 (38) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 39 (39) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 40 (40) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 41 (41) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 42 (42) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 43 (43) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 44 (44) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 45 (45) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 46 (46) in font null 2024-03-12T10:32:39.493-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 47 (47) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 48 (48) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 49 (49) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 50 (50) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 51 (51) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 52 (52) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 53 (53) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 54 (54) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 55 (55) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 56 (56) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 57 (57) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 58 (58) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 59 (59) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 60 (60) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 61 (61) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 62 (62) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 63 (63) in font null 2024-03-12T10:32:39.494-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for .notdef (64) in font null 2024-03-12T10:32:39.495-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 65 (65) in font null 2024-03-12T10:32:39.495-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 66 (66) in font null 2024-03-12T10:32:39.495-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 67 (67) in font null 2024-03-12T10:32:39.495-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 68 (68) in font null 2024-03-12T10:32:39.495-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 69 (69) in font null 2024-03-12T10:32:39.495-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 70 (70) in font null 2024-03-12T10:32:39.495-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 71 (71) in font null 2024-03-12T10:32:39.495-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 72 (72) in font null 2024-03-12T10:32:39.495-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 73 (73) in font null 2024-03-12T10:32:39.495-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 74 (74) in font null 2024-03-12T10:32:39.496-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 75 (75) in font null 2024-03-12T10:32:39.496-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 76 (76) in font null 2024-03-12T10:32:39.496-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 77 (77) in font null 2024-03-12T10:32:39.496-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 78 (78) in font null 2024-03-12T10:32:39.497-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 79 (79) in font null 2024-03-12T10:32:39.497-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 80 (80) in font null 2024-03-12T10:32:39.497-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 81 (81) in font null 2024-03-12T10:32:39.501-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 82 (82) in font null 2024-03-12T10:32:39.503-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 83 (83) in font null 2024-03-12T10:32:39.504-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 84 (84) in font null 2024-03-12T10:32:39.504-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 85 (85) in font null 2024-03-12T10:32:39.505-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 86 (86) in font null 2024-03-12T10:32:39.505-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 87 (87) in font null 2024-03-12T10:32:39.505-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont
: No Unicode mapping for 88 (88) in font null 2024-03-12T10:32:39.505-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 89 (89) in font null 2024-03-12T10:32:39.505-03:00 WARN 8234 --- [nio-8080-exec-1] o.a.pdfbox.pdmodel.font.PDSimpleFont : No Unicode mapping for 90 (90) in font null Couldn't get text matrix for page 1 Couldn't get text matrix for page 2 Couldn't get text matrix for page 3

Is there anything I can do?

0

There are 0 best solutions below