Ghostscript для сжатия пакета PDF-файлов

У меня нет опыта программирования.

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

Это большие PDF-файлы, объемом до 1500-2000 страниц с изображениями. Один из них был файлом размером 80 МБ или около того. Я попытался распечатать его с помощью Foxit, чтобы преобразовать изображения в JPG из JPEG2000, но размер файла подскочил до 800 МБ ... плюс это занимает слишком много времени.

Я наткнулся на Ghostscript, но не знаю, как использовать интерфейс командной строки.

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

Очень сожалею о своей неопытности и беспомощности. Может ли кто-нибудь скормить мне шаги для этого?

Обновлено: Я хочу переключить JPEG2000 на любой другой формат, который дает меньшее увеличение размера файла и вызывает минимальную потерю качества (в пределах разумного). Я понятия не имею, как использовать Ghostscript. Я в основном хочу изменить сжатие изображений на то, что будет правильно отображаться на iPad, сохранив при этом качество остального текста, а также встроенных закладок.

Повторюсь, у меня НЕТ опыта работы с командной строкой ... Я даже не знаю, как указать GS на папку, в которой находятся мои PDF-файлы ...

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
Включение UTF-8 в jsPDF с помощью Angular
Включение UTF-8 в jsPDF с помощью Angular
Привет, разработчики, я предполагаю, что вы уже знаете, как экспортировать pdf через jsPDF. Если ответ отрицательный, то вы можете ознакомиться с моей...
1
0
1 268
1

Ответы 1

Вы на самом деле не сказали, чего хотите. Как именно «конвертировать» PDF-файлы?

Обратите внимание, что переключение с JPX (JPEG2000) на JPEG приведет к потере качества, поскольку данные изображения будут квантоваться (с другой схемой квантования, чем JPX) кодировщиком JPEG. Вместо этого вы можете использовать схему сжатия без потерь, но тогда вы не получите такого же сжатия. В любом случае вы не получите такой же коэффициент сжатия, как JPX, что бы вы ни использовали, результат будет больше.

Простая команда Ghostscript будет такой:

gs -sDEVICE = pdfwrite -o out.pdf in.pdf

Поскольку кодировка JPEG2000 защищена патентом (или, по крайней мере, была), устройство pdfwrite не записывает изображения в формате JPX <по умолчанию, оно будет записывать их несколько раз с разными схемами сжатия, а затем использовать ту, которая дает наилучшее сжатие (практически всегда JPEG).

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

[РЕДАКТИРОВАТЬ]

Что ж, помощь по выполнению командной строки - это немного не по теме для Stack Overflow, это должен быть сайт для разработчиков программного обеспечения :-)

Не зная, какую операционную систему вы используете, трудно дать вам подробные инструкции, я также понятия не имею, что использует iPad, я обычно не использую устройства Apple, и мой единственный опыт работы с Mac.

Предположительно вы знаете, где (каталог) вы установили Ghostscript. Либо откройте там командную оболочку и введите команду ./gs, либо выполните команду, указав полный путь, например:

/usr/bin/gs

Я думал, что аргументы в командной строке не требуют пояснений, но ....

Переключатель -sDEVICE=pdfwrite указывает Ghostscript использовать устройство pdfwrite, как можно догадаться по названию, это устройство записывает файлы PDF в качестве вывода.

Переключатель -o - это имя (и полный путь, если требуется) выходного файла.

Последний аргумент - это имя (и снова полный путь, если он не в текущем каталоге) входного файла.

Итак, команда может выглядеть так:

/usr/bin/gs -sDEVICE=pdfwrite -o /home/me/output.pdf /home/me/input.pdf

Или, если Ghostscript и входной файл находятся в одном каталоге:

./gs -sDEVICE=pdfwrite -o out.pdf input.pdf

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

AcridSmoke 08.11.2018 12:39

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

KenS 08.11.2018 14:52

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

AcridSmoke 08.11.2018 16:43

Спасибо за ваше терпение! Моя проблема была настолько эзотерической, что я не мог использовать для нее обычные форумы. Я на винде. У меня есть папка с моими PDF-файлами на Onedrive. Я бы хотел их переименовать, так как они обрабатываются ghostscript. Как мне изменить эти команды так, чтобы он брал файл «ABC.pdf» и переименовывал вывод в «ABC new.pdf»?

AcridSmoke 09.11.2018 09:45

Кроме того, что такое «устройство pdfwrite»? Я планирую пересмотреть все это и изучить это, просто сейчас нет времени. Кроме того, это может помочь любому, кто столкнется с этой конкретной проблемой.

AcridSmoke 09.11.2018 09:50

Устройства имеют номенклатуру Ghostscript. Его различные выходные «вещи» называются устройствами. Итак, есть устройство PNG (ну, на самом деле несколько, pngalpha, png16m и т. д.), То же самое для вывода TIFF. Для вывода PostScript существует устройство ps2write, которое записывает уровень языка PostScript 2 и т. д. Устройство pdfwrite не имеет никакого волшебства для присвоения имени выходному файлу, вам нужно указать ему, как вы хотите, чтобы он назывался. Поэтому, если вам нужен ABC.new.pdf, вам нужно указать «-o ABC.new.pdf». Я думаю, вы можете программировать сценарии оболочки, чтобы делать то, что вы хотите, но у меня нет опыта в этой области на Mac.

KenS 09.11.2018 12:25

Извините, я все еще немного запутался. Если я хочу добавить число к имени файла исходного входного PDF-файла, как я буду использовать команду -o? Есть ли звездочка или другой символ, который мне нужно использовать, чтобы он повторно использовал исходное имя и добавлял к нему номер? Я хочу, чтобы «Файл A» превратился в «Файл A1», «Файл B» стал «Файл B1» и так далее.

AcridSmoke 09.11.2018 15:38

Для вывода имен файлов доступны два «специальных» формата:% d и% s. Они такие же, как спецификаторы формата printf в языке C. Пока мы проигнорируем% s. Спецификатор формата% d означает «выводить каждую страницу ввода в новый файл и добавлять порядковый номер страницы к имени файла вместо% d». Итак, для конкретного примера: если у вас есть 10-страничный PDF-файл и выполните «-o out% d.pdf» с помощью pdfwrite, тогда вы получите файлы размером 10x1 страниц с именами out0.pdf в out9.pdf.

KenS 09.11.2018 16:16

Вы не могу "повторно используете" исходное имя файла, а не помещаете это имя в переключатель -o. Чтобы перейти из входного файла с именем «Файл A.pdf» в выходной файл с именем «Файл A1.pdf», вам необходимо указать -o «Файл A1.pdf» в командной строке. Чтобы делать то, что вы пытаетесь делать, вам нужно делать это на более высоком уровне, вам нужно написать сценарий оболочки, как я предложил пару комментариев назад. Я не могу вам с этим помочь, потому что я ничего не знаю о написании сценариев оболочки на любой ОС Apple.

KenS 09.11.2018 16:17

Я на винде. Спасибо, что научили меня! Я попробую (после предстоящих экзаменов).

AcridSmoke 09.11.2018 22:05

Я предполагал, что будет операционная система Apple с тех пор, как вы упомянули iPad. Вы можете сделать что-то вроде этого в командной оболочке WIndows: "для% s в (* .pdf) выполните gswin64c -sDEVICE = pdfwrite -o% ~ ns1.pdf% s" Так что (в текущем каталоге) все файлы с расширением .pdf. Затем он загружает их один за другим в переменную с именем% s и вызывает командную строку Ghostscript. % ~ Ns извлекает только имя из переменной% s, затем я добавил в конец «1.pdf». Наконец,% s используется как имя входного файла для обработки Ghostscript.

KenS 10.11.2018 12:24

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