PDFRenderer создает изображения большего размера, чем сам PDF - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть образец отсканированных PDF-файлов, которые мне нужно отредактировать и повторно экспортировать. Я использую PDFBox для рендеринга PDF в серию изображений (по одному изображению на страницу), я выполняю некоторые расчеты OpenCV для растрированных JPEG-файлов и затем собираюсь вставить их обратно в новый файл PDF.

Пример: PDF - 423 КБ, страница 1 - 313 КБ, страница 2 - 287 КБ, страница 3 - 319 КБ, страница 4 - 485 КБ, страница 5 - 470 КБ.

Проблема в том, что выходные изображения имеют больший размер, чем сам PDF. Это приводит к тому, что мои усилия по распознаванию текста занимают намного больше времени, чем допустимо (5 минут против 30 секунд на документ). Единственный способ предотвратить увеличение размера jpeg-файла - оставить для него значение DPI по умолчанию, равное 72. Это приводит к получению изображений низкого качества, которые нельзя использовать.

Почему это происходит? Я должен быть в состоянии вернуть изображения, размер которых меньше или равен рассматриваемому PDF (без ущерба для качества). Я не делаю ничего странного с изображениями, просто убираю водяные знаки.

Вот некоторый код, иллюстрирующий, как я извлекаю JPEG из PDF.

File file = new File(fileName);
PDDocument document = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(document);
BufferedImage[] pageArray = new BufferedImage[document.getNumberOfPages()];
int pageCounter = 0;
for(PDPage page : document.getPages()) {
    pageArray[pageCounter] = renderer.renderImageWithDPI(pageCounter, 160);
    pageCounter++;
}
...