Как конвертировать отсканированный PDF-файл с текстом OCRed в текст без текста OCRed?

У меня есть отсканированный PDF-файл с низким качеством текста OCRed.

Я хотел бы иметь файл PDF без текста OCRed.

Как конвертировать отсканированный PDF-текст с текстом OCRed без текста OCRed?

Я думаю о том, какие способы могут восстановить исходный отсканированный PDF-файл до OCR, насколько это возможно, без изменения ширины и высоты каждой страницы в пикселях и без изменения пикселей на дюйм каждой страницы?

Помогает ли какая-то растеризация? Будет ли растеризация снова потерять качество изображения?

Несколько attmepts:

  1. Я использую print для файла в Evince, который, я думаю, использует cups-pdf , он не удаляет текст OCRed.
  2. Следующая команда, использующая gs , не удаляет OCRed-текст (я думаю, что не нашел, как правильно использовать gs ):

     gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \ -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf toc.pdf 

3 Solutions collect form web for “Как конвертировать отсканированный PDF-файл с текстом OCRed в текст без текста OCRed?”

Вот как я должен удалить текст OCR-ed, если мне нужно …

Во-первых, вам нужно знать, что текст OCR-ed в PDF не является слоем , а особым режимом текстового рендеринга . Следующий скриншот из официальной спецификации PDF перечисляет все доступные режимы рендеринга текста:

Для получения дополнительной информации см. Мои ответы на StackOverflow:

  • «Как мы можем сделать невидимый текст видимым?»
  • «Создание« текста »в OCR-ed PDF»

Теперь для процедуры я предусматриваю:

0. Сделайте резервную копию исходного файла PDF

'достаточно…

1. Используйте qpdf чтобы сжать большинство PDF-объектов

qpdf – прекрасный инструмент командной строки для преобразования большинства PDF-файлов в форму, которая упрощает управление через текстовый редактор (или через sed ):

 qpdf \ --qdf \ --object-streams=disable \ input.pdf \ editable.pdf 

2. Найдите места, где PDF-код содержит 3 Tr

Все пятна в editable.pdf где есть «невидимый» (он же ни заполненный, ни поглаженный ) текст, отмечен первоначальным определением

 3 Tr 

Теперь измените их на

 1 Tr 

Это должно сделать видимым ранее скрытый текст. Символы появятся в толстых очертаниях, накладывая оригинальные отсканированные изображения страниц.

Это будет выглядеть очень уродливо.

Сохраните отредактированный PDF.

3. Измените Tj и TJ операторов поглаживания текста на «no-ops»

Всякий раз, когда текстовая строка подготовлена ​​для визуализации, фактический оператор, который отвечает за это, называется Tj или TJ .

Посмотрите на все это. Замените их на tJ и tj . Это изменит их на «no-ops»: они вообще не имеют смысла в исходном коде PDF; ни один просмотрщик или процессор в формате PDF не будет «понимать» их. (Будьте внимательны, чтобы не менять количество байтов при замене материала в исходном коде PDF, потому что иначе вы можете заставить его стать «поврежденным».)

Сохраните файл PDF.

4. Посмотрите, как выглядит файл PDF.

Теперь PDF должен выглядеть «чистым». Переименованные текстовые операторы больше не имеют никакого значения для средства просмотра PDF и для любого PDF-интерпретатора.

5. Используйте Ghostscript для создания окончательного PDF-файла.

Эта команда должна достичь того, чего вы хотите:

 gs \ -o final.pdf \ -sDEVICE=pdfwrite \ -dPDFSETTINGS=/prepress \ editable.pdf 

Этот последний шаг использует editable.pdf качестве входных данных. Он выводит final.pdf . На выходе будут удалены все следы текста. У входа все еще был текст, хотя и в «непригодной» форме, потому что оператор переименовывал. Поскольку Ghostscript не «понимает» переименованные операторы, он просто пропускает их по умолчанию.

Существует несколько способов избавиться от текста OCRed в файле.

  1. Экспортируйте отсканированные изображения из PDF и перекомпилируйте их. Вы можете использовать pdfimages для извлечения (из poppler-utils ) и convert (из imagemagick ) для их преобразования:

     pdfimages toc.pdf toctmp convert toctmp*.pbm newtoc.pdf 
  2. Печать в PDF (с поддержкой PDF из cups-pdf )

PDF – это ужасный формат для отсканированных изображений, но довольно часто используется, поскольку он может содержать несколько страниц в одном файле. Формат памяти, однако, часто является несоответствующим (для сканирования) формате JPEG. Восстановление исходных изображений (например, оригинального отсканированного PDF-файла отсутствует) из PDF, вероятно, не может быть сделано, поскольку отсканированные изображения PDF чаще всего являются результатом снижения качества после сканирования. Вы можете попытаться получить изображения из PDF с помощью pdfimage (или pdftoppm ), но программное обеспечение OCR, которое работает с изображениями в PDF, уже знает, как получить лучшие (только) качественные изображения из этих PDF-файлов, маловероятно, что вы можете сделать улучшить это.

Вероятно, проблема связана с вашим программным обеспечением для сканирования, а не с программным обеспечением OCR. Если у вас все еще есть исходный материал, сканируйте его еще на многостраничный TIFF (сжатый lzw), который дает намного лучшее OCR, чем все, что было преобразовано в PDF, когда оно включает JPEG.

Когда я попытался получить доступ к ссылке на ваш отсканированный файл раньше, это не сработало для меня. Тем не менее, пока я скачал его и посмотрел ближе.

1. Используя pdfimages -list для исследования встроенных изображений

Если вы запустите недавнюю (!) Версию варианта Poppler pdfimages , у вас будет доступный параметр pdfimages . Этот параметр печатает полезный список изображений, содержащихся в вашем файле PDF. Самые последние версии также расскажут вам дополнительную информацию (например, разрешение изображения и степень сжатия), которые раньше были недоступны.

К сожалению, ваш файл PDF содержит некоторые синтаксические ошибки, которые дают этот искаженный вывод:

 kp@mbp:#175536> pdfimages -l 1 -list toc.pdf Syntax Warning: Couldn't link the profiles Syntax Warning: Can't create transform Syntax Warning: Couldn't link the profiles Syntax Warning: Can't create transform Syntax Warning: Couldn't link the profiles Syntax Warning: Can't create transform Syntax Warning: Couldn't link the profiles Syntax Warning: Can't create transform page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio -------------------------------------------------------------------------------------- 1 0 image 2000 2650 icc 1 1 jbig2 no 51 0 300 300 12.4K 1.9% 

Итак, давайте перенаправим вывод <stderr> в /dev/null и повторите попытку:

 kp@mbp:#175536> pdfimages -list toc.pdf 2>/dev/null page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio -------------------------------------------------------------------------------------- 1 0 image 2000 2650 icc 1 1 jbig2 no 51 0 300 300 12.4K 1.9% 2 1 image 2012 2659 icc 1 1 jbig2 no 616 0 300 301 16.1K 2.5% 3 2 image 2014 2661 icc 1 1 jbig2 no 696 0 301 300 16.0K 2.4% 4 3 image 2000 2650 icc 1 1 jbig2 no 778 0 300 300 16.2K 2.5% 5 4 image 2000 2650 icc 1 1 jbig2 no 855 0 300 300 16.2K 2.5% 6 5 image 2000 2650 icc 1 1 jbig2 no 938 0 300 300 15.7K 2.4% 7 6 image 2000 2650 icc 1 1 jbig2 no 1026 0 300 300 15.5K 2.4% 8 7 image 2022 2667 icc 1 1 jbig2 no 1103 0 300 300 15.7K 2.4% 9 8 image 2000 2650 icc 1 1 jbig2 no 1190 0 300 300 15.5K 2.4% 10 9 image 2011 2658 icc 1 1 jbig2 no 1271 0 300 301 15.7K 2.4% 11 10 image 2000 2650 icc 1 1 jbig2 no 1347 0 300 300 15.7K 2.4% 12 11 image 2010 2657 icc 1 1 jbig2 no 1429 0 300 300 15.5K 2.4% 13 12 image 2000 2650 icc 1 1 jbig2 no 1504 0 300 300 16.8K 2.6% 14 13 image 2000 2650 icc 1 1 jbig2 no 1589 0 300 300 15.4K 2.4% 15 14 image 2000 2650 icc 1 1 jbig2 no 1666 0 300 300 17.6K 2.7% 16 15 image 2010 2657 icc 1 1 jbig2 no 1740 0 300 300 18.7K 2.9% 17 16 image 2006 2654 icc 1 1 jbig2 no 1823 0 300 301 17.7K 2.7% 18 17 image 2007 2656 icc 1 1 jbig2 no 1905 0 300 300 16.9K 2.6% 19 18 image 2000 2650 icc 1 1 jbig2 no 1983 0 300 300 16.7K 2.6% 20 19 image 2000 2650 icc 1 1 jbig2 no 2065 0 300 300 17.4K 2.7% 21 20 image 2000 2650 icc 1 1 jbig2 no 2148 0 300 300 17.4K 2.7% 22 21 image 2011 2658 icc 1 1 jbig2 no 2229 0 300 301 17.2K 2.6% 23 22 image 2006 2654 icc 1 1 jbig2 no 2305 0 300 301 17.5K 2.7% 24 23 image 2000 2650 icc 1 1 jbig2 no 2377 0 300 300 14.5K 2.2% 

Этот выход означает:

  • 24 изображения (с номерами 0-23) на 24 страницах (каждое изображение на странице 1).
  • Все изображения имеют очень похожие размеры (ширина / высота) и разрешение 300 PPI.
  • Все изображения используют один и тот же метод сжатия, JBIG2 .

Эти результаты дают мне уверенность предложить другой метод удаления текста OCR-ed из вашего PDF:

  1. Извлеките все изображения.
  2. Создайте новый PDF-файл с этих изображений.

2. Извлечение всех изображений из PDF

Если у вас есть одна из последних версий pdfimages Poppler, вы можете извлекать изображения в сжатии JBIG2:

 pdfimages -jbig2 toc.pdf toc-- 

Полученные файлы изображений будут содержать имена файлов toc---000.jb2e , toc---000.jb2e , … (суффикс .jb2e ). Каждый из этих файлов должен иметь еще один с ним: toc---000.jb2g , toc---000.jb2g , … (суффикс .jb2g ).

Если вы не получите изображения .jb2e в результате, но вместо .pbm вам придется использовать преобразование ImageMagick для создания JPEG-файлов:

 for i in toc--*.pbm; do convert $i ${i/.pbm/.jpg} done 

Однако изображения JPEG будут намного больше, чем у JBIG2. (Я попробовал: JPEG-файлы в общей сложности составляют 15 Мбайт, PBM – всего 15 Мбайт, JBIG2 – всего 436 кбайт для 24 изображений!)

3. Создайте новый PDF-файл из извлеченных изображений.

Если вам не повезло и пришлось конвертировать в JPEG, теперь вы можете преобразовать их в PDF:

 convert toc--*.jpg -density out.pdf 

Voila !, у вас теперь есть 15-мегабайтный PDF-файл без текста OCR-ed, в котором у вас раньше был файл PDF объемом 1,6 мегабайта с текстом OCR-ed! (Но вы не потеряете большую часть предыдущего качества …)


Поскольку мои собственные pdfimages составляются из источников, я время от времени страдаю от ошибок. В настоящее время он неправильно извлекает изображения в виде файлов JBIG2. Вот почему я не могу создать PDF-файл из них. Но размер этого PDF-файла будет похож на размер оригинала toc.pdf ….

  • Как преобразовать PDF в 4-up в ландшафтном режиме (в идеале с использованием ghostscript)?
  • сделать настройки «печать в файл» постоянными в Iceape
  • pdftoppm (v 3.0) очень медленно конвертирует миниатюру в более новую версию
  • Преобразовать .out файл в .pdf с помощью сценария оболочки
  • Что случилось с ePDFview?
  • Конвертировать блог в PDF или Epub Book
  • Есть ли способ восстановить несохраненные аннотации в Okular после сбоя системы
  • Поиск PDF-ридера, который обрабатывает большие файлы
  • Как преобразовать prc в pdf в Ubuntu cli?
  • Как я могу обойти или исправить смещение принтера x0y?
  • Как можно сохранить текст OCRed при преобразовании файлов djvu и pdf?
  • Linux и Unix - лучшая ОС в мире.