Как я могу взять PDF-файл и преобразовать в нем любые изображения jpeg2000 / jpx / jp2 в изображения jpeg? - PullRequest
0 голосов
/ 16 июня 2020

Я использую MacOS Mojave на Ma c Mini, и я также использую старый Kindle Dx, который не может читать изображения jpeg2000. У него также есть проблемы со слишком большим количеством или слишком большими изображениями jpeg.

Я не могу использовать сенсорные экраны, поэтому новые электронные книги и планшеты не являются решением.

Пока что я нашел некоторые решения с ошибками -

Я могу использовать k2pdfopt Виллуса с -mode copy и -dev dx, который растрирует все. Это хорошее решение для отсканированных PDF-файлов. Если требуется больше деталей, -mode copy без -dev dx сохранит более высокое разрешение. Это что-то последнее средство для pdf -born-pdf, поскольку текст может быть уродливее и труднее для чтения, а размеры файлов могут тревожно увеличиваться.

Я также могу использовать Ghostscript с -dCompatibilityLevel = 1.4, чего нет t растеризовать все. Он конвертирует изображения jpeg2000 в изображения jpeg. Но он не работает с некоторыми слишком большими или плохо построенными изображениями, он часто создает темные прямоугольники, которые могут скрыть текст, и иногда теряет возможность поиска или выбора текста. [PS Я имею в виду, что он берет PDF-файл, в котором есть доступный для поиска PDF-файл, и выводит тот, в котором его нет. Кроме того, если я выполняю понижающую дискретизацию или удаление изображений, это иногда изменяет масштаб всего или теряет страницы.]

Я экспериментировал с параметрами сжатия изображений в Ghostscript, но с переменным успехом и с сохранением вышеуказанных ошибок. [PS Думаю, я использовал понижающую дискретизацию, да.]

По какой-то причине фильтры MacOS Quartz работают только в том случае, если они уменьшают размер изображения. Поэтому они, как правило, не работают с ошибочными изображениями.

Теперь мое идеальное решение - сохранить сам текст, желательно распутывая лигатуры, и сжать изображения, как k2pdfopt Виллуса. Но я понятия не имею, возможно ли это и как.

Короче - мне интересно, есть ли способ использовать Ghostscript для преобразования изображений jpeg2000 без появления серых прямоугольников или потери возможности поиска или выделите текст.

или если есть способ использовать кварцевые фильтры, чтобы они работали. В некоторых старых версиях MacOS они действительно работали.

или, если есть способ пакетной печати этих файлов pdf с соответствующим разрешением, очевидно, 800x1180, обрабатывая изображения в процессе.

Я не У меня мало опыта программирования. Я в основном использую homebrew для установки инструментов командной строки, очень неаккуратных bash скриптов и Automator для их запуска.

PS Для минимального примера серых прямоугольников в Ghostscript используйте бесплатный PDF-файл отсюда: https://www.peginc.com/store/test-drive-savage-worlds-the-wild-hunt/

gs -sDEVICE = pdfwrite -dNOPAUSE -dQUIET -dBATCH -o out.pdf in.pdf

замена этого pdf на in.pdf.

Для минимального примера потери текста, доступного для поиска, используйте бесплатный PDF-файл отсюда: http://datafortress2020.com/fileproject/details.php?image_id=498

тот же минимальный скрипт

Уровень совместимости

gs -sDEVICE = pdfwrite -dNOPAUSE -dQUIET -dBATCH -dCompatibilityLevel = 1.4 -o out.pdf in.pdf

Агрессивное понижение разрешения и градации серого

gs -sDEVICE = pdfwrite -dNOPAETUSE -dNOPA dBATCH -dCompatibilityLevel = 1.4 -g800x1080 -r150 -dPDFFitPage \ -dFastWebView -sColorConversionStrategy = Gray \ -dDownampleColorImages = true -dDownsampleGrayImages = true -dDownampleMonoImages = true -dColImageResol -esoImages = true -dColImageResol -esoImages = 75 -dColimageResolution = 75ResolutionResolution = 75 on = 150 -dColorImageDownsampleThreshold = 1.0 -dGrayImageDownsampleThreshold = 1.0 -dMonoImageDownsampleThreshold = 1.0 \ -o out.pdf in.pdf

PPS Я могу использовать k2pdfopt для растеризации в соответствии с моим Kindle. Если в файле есть доступный для поиска текст, он сохраняется, если нет, я могу запустить tesseract в k2 или запустить ocrmypdf впоследствии.

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

1 Ответ

0 голосов
/ 16 июня 2020

Если вы думаете, что нашли ошибку, то полезно сообщить о ней. Если вы этого не сделаете, это никогда не будет исправлено. Вы можете сообщить об ошибке по номеру https://bugs.ghostscript.com, обязательно приложите файл с примером, чтобы воспроизвести проблему и указать используемую командную строку.

Устройство Ghostscript pdfwrite никогда не создавать изображения в формате JPEG2000 (из-за проблем с патентами). Таким образом, вам вообще не нужно устанавливать CompatibilityLEvel, и я бы рекомендовал вам этого не делать. Устанавливая CompatibilityLevel, вы ограничиваете вывод. Если ваше устройство не может обрабатывать более поздние версии, не делайте этого.

Без просмотра файла примера, командной строки и знания версии и операционной системы, очевидно, что никто не сможет прокомментировать ваши «серые прямоугольники» .

Вы можете уменьшить размер изображений (в байтах), уменьшив их разрешение (в отличие от сжатия), вы ничего не можете сделать с количеством изображений.

Обратите внимание, что доступный для поиска текст зависит от конструкции файла PDF и не может быть гарантирован. Текст с возможностью поиска (в смысле ToUnicode CMaps) был более поздним дополнением к справочнику PDF и всегда является необязательным, потому что можно получить ввод, из которого невозможно определить кодовые точки Unicode (без использования программного обеспечения OCR), но идеально читаемый файл PDF все еще могут быть созданы.

Ghostscript сам может создавать PDF-файл, который является визуализированным представлением оригинала, упакованным в PDF-файл. См. Устройства pdfimage *.

Tesseract может снимать изображения и создавать PDF-файлы с доступным для поиска текстом, созданным путем распознавания изображений. Мне кажется, что это ваш лучший вариант, хотя, очевидно, я не знаю, будет ли одно большое изображение приемлемым для вашего устройства.

[EDIT]

Редактирование моего ответа так как это слишком долго для комментария, а его уже достаточно.

Я уже согласился с тем, что поиск по тексту по сути не поддерживается в PDF, за исключением необязательного дополнения. В отчете об ошибке, на который вы указали, говорится о «повреждении текстовых слоев». В PDF нет текстовых слоев, и текст не поврежден и не отсутствует, просто ts больше не кодируется как ASCII.

Причина, по которой вы не должны устанавливать разрешение и размер в пикселях, заключается в том, что PDF - это не формат изображений. Этим вы ничего не добьетесь. Все, что происходит, - это то, что pdfwrite делит значение g на разрешение, чтобы получить размер носителя в дюймах, и записывает это как MediaBox. Проще просто установить размер носителя. Если вы устанавливаете разрешение, вы исправляете все, что делает рендерится с этим разрешением. Выберите низкое разрешение, и вы получите ужасный результат. Если вы используете более высокое разрешение, изображение можно уменьшить и сгладить, что даст лучший результат. . Также возможно, что тот, кто создал Ghostscript для вас, внес ошибку. Боюсь, мы не сможем вам помочь ни с одним из них.

Я предлагал прямо в конце исходного поста визуализировать контент в изображение (Ghostscript сделает это за вас ), затем используйте Tesseract для преобразования изображения обратно в PDF и в то же время OCR текста.

Это решит ваши проблемы с JPEG2000, сделает ** лучшую * работу по созданию текста с возможностью поиска , поскольку даже файлы, которые еще не доступны для поиска, станут такими, и вы сможете указать разрешение.

...