PDFBOX прочитать PDF-файл, созданный Skia

Я читаю PDF-файл (Skia/PDF m118 Google Docs Renderer) с помощью PDFBOX, но он ничего не читает. Документ состоит только из одной страницы и не содержит изображений. Я пытаюсь прочитать контент с помощью PDFTextStripper.

Есть идеи, как читать Документы Google Skia/PDF m118 с помощью PDFBOX?

Я могу открыть его с помощью Acrobat Reader.

Фрагмент кода

    Document dataDocument = new Document();
    try {
        PDFTextStripper pdfTextStripper = new PDFTextStripper();

        pdfTextStripper.setParagraphStart("/t");
        pdfTextStripper.setSortByPosition(true);

        for (int i = 0; i < document.getNumberOfPages(); i++) {
            pdfTextStripper.setStartPage(i);
            pdfTextStripper.setEndPage(i);
            for (String line : pdfTextStripper.getText(document).split(pdfTextStripper.getParagraphStart())) {
                if (!line.isBlank() && line.length() > 3) {
                    dataDocument.getText().add(line);
                }
            }
            dataDocument.getText().add(":page = " + i);
        }

...

Версия PDFBox

 implementation 'org.apache.pdfbox:pdfbox:2.0.30'

PDF-файл

Это ссылка на документ, https://jmp.sh/s/vTpGFHq6nLjzWXzBfxIA Злая

«К сожалению, я не могу поделиться документом» — это печально, поскольку, по-видимому, это проблема, специфичная для типа вашего документа. Но в своем вопросе вы спрашиваете, как читать Skia/PDF. Таким образом, вы, должно быть, протестировали множество различных PDF-файлов, созданных Skia, чтобы определить, действительно ли ваша проблема возникает для таких документов в целом. Так что наверняка есть один из них, которым вы можете поделиться...

mkl 11.04.2024 10:05

Я только что добавил ссылку на документ!

zlaja 11.04.2024 10:30

Хорошо. Я посмотрю на это позже на этой неделе. Возможно, у @tilman есть время до этого.

mkl 11.04.2024 12:51

Я обновился до 2.0.31, но без каких-либо изменений. Я могу сохранить как текст из Adobe Reader и получить текстовый файл с содержимым в формате PDF. Я заметил, что каждое слово в этом файле — это новая строка.

zlaja 15.04.2024 07:52

Вот новая ссылка: drive.google.com/file/d/1dihCDkH4c0vv_IP0xPYFkbk_WJQK4wvl/…

zlaja 18.04.2024 08:01

При использовании ExtractText я получаю «Ovo je neki primer tekst t». Я не проверял ваш код, мне интересно, имеет ли функция Split() какой-либо плохой эффект в зависимости от содержимого параметра.

Tilman Hausherr 18.04.2024 10:20

Я попробовал pdfTextStripper.getText(document) без разделения, но не получил текста.

zlaja 18.04.2024 22:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
155
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

И setStartPage(), и setEndPage() требуют, чтобы параметр начинался с 1 (см. Javadoc). Таким образом, измените свой код на:

pdfTextStripper.setStartPage(i + 1);
pdfTextStripper.setEndPage(i + 1);

Ах, хорошо, в конце концов, это не связано со Skia.... (Возможно, код должен выдать предупреждение, если он вызывается с неположительным startPage или endPage.)

mkl 19.04.2024 09:15

Да, хороший вопрос. Если страницы начинаются с индекса 1, то это должна быть даже ошибка.

zlaja 19.04.2024 13:53

Другие вопросы по теме