Как мне полностью сгладить PDF в Mac OS в командной строке?

16

Я использую Mac OS X Snow Leopard. У меня есть PDF с полями формы, аннотациями и штампами. Я хотел бы заморозить (или «сгладить») этот PDF-файл, чтобы поля формы не могли быть изменены и аннотации / штампы больше не редактировались. Поскольку у меня действительно много таких PDF-файлов, я хочу сделать это автоматически в командной строке.

Некоторые вещи, которые я пробовал / рассматривал, с их степенью успеха:

  • Откройте в режиме предварительного просмотра и распечатать в файл. Это создает абсолютно плоский PDF без изменения размера файла. Похоже, что единственным способом автоматизации является написание хитрого AppleScript на основе пользовательского интерфейса , которого я старался избегать.
  • Откройте в Acrobat Pro и используйте функцию JavaScript для выравнивания . Опять же, не уверен, как автоматизировать это в командной строке.
  • Используйте pdftkс flattenопцией. Но это только выравнивает поля формы, а не штампы и другие аннотации.
  • Используйте cupsfilterкоторый может создавать PDF из многих форматов файлов. Так pdftkсглаживаются только поля формы.
  • Используйте, cups-pdfчтобы подключиться к принтеру Mac и сохранить файл PDF вместо печати. Я использовал версию MacPort . Полученный файл плоский, но огромный. Я попробовал это на 8 МБ файле; формат PDF был 358 МБ! Возможно, это можно сочетать с вызовом ghostscript, как в Ubuntu. Совет: как уменьшить размер файла PDF из командной строки .

Любые другие предложения будут оценены.

Мэтью Лейнган
источник
1
Automator.app имеет несколько встроенных опций обработки PDF. Возможно, один из них может помочь напрямую или в сочетании с одним из вышеуказанных действий.
Касым Дорсель
Можете ли вы предоставить образец документа в формате PDF, который содержит эти элементы?
Даниэль Бек
Я думаю так. Прямо сейчас все мои образцы - студенческие тесты, таким образом, я должен что-то макетировать.
Мэтью Лейнган

Ответы:

11

Попробуйте использовать pdf2psи ps2pdfпоследовательно. Это немного громоздко, но это помогло мне уменьшить мой 30 МБ документ до 17 МБ. Не так много, как хотелось бы, но все же лучше. Я получил эту идею от друга, который использовал этот метод, чтобы избавиться от прав доступа к паролю в PDF.

pdf2ps your_pdf_file.pdf your_pdf_file.ps
ps2pdf your_pdf_file.ps your_pdf_file_from_ps.pdf

Надеюсь, это поможет!

Ольга Ботвинник
источник
3
GhostScript FTW! Я получил его вниз к однострочнику с помощью трубы: pdf2ps file.pdf - | ps2pdf - file_flat.pdf. Размер файла увеличился с 300К до 500К, что является большим процентным приростом, но ничего подобного 4400% -ному увеличению, полученному cups-pdfметодом.
Мэтью Лейнган,
На самом деле, мне повезло больше pdf2ps -q -sOutputFile=- file.pdf | ps2pdf - file_flat.pdf.
Мэтью Лейнган
4
Отмечая , что на Mac можно установить Ghostscript , чтобы вышеперечисленные команды доступны через доморощенного с brew install ghostscript.
Ник
5

Так что это то, что я использовал в последнее время. Я думаю, что функционально это делает то же самое pdf2ps file.pdf - | ps2pdf - file_flat.pdf, но мне показалось, что это работает лучше.

gs -sDEVICE=pdfwrite -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -sOutputFile=<newfile> <oldfile>
Мэтью Лейнган
источник
Решения ps2pdf потерпели неудачу для меня. Это сработало, по-видимому, переиндексации шрифтов в PDF.
ℝaphink
Ни одна из этих команд не сглаживается. Вы можете скопировать нижележащие слои, используя Предварительный просмотр, и будет присутствовать оригинальный контент.
Ален О'Ди
1

Это может быть необязательным, но рассматривали ли вы цепочку cups-pdf с pdftk или cupsfilter? Как вы упомянули, cups-pdf создаст плоский файл pdf и затем пропустит его через pdftk или cupsfilter, чтобы уменьшить его до приемлемого размера?

В качестве альтернативы взглянуть на /System/Library/Printers/Libraries/convert Вы должны быть в состоянии сделать что-то вроде

/System/Library/Printers/Libraries/convert -f input_file.pdf -o output_file.pdf -j "application/pdf"
Mxx
источник
Мой макинтош не имеет /System/Library/Printers/Libraries/convert. Я попробовал cupsfilter. При конвертации из PDF в PDF в файл не было внесено никаких изменений. При преобразовании из PDF в PS, а затем в PDF аннотации были потеряны.
Мэтью Лейнган,
1

ВНИМАНИЕ: gs и pdf2ps | ps2pdf НЕ Сглаживайте PDF-файлы!

Использование gs или pdf2ps с последующим ps2pdf приведет к получению многослойного PDF с содержимым под аннотациями, представленными в оригинальном виде . Вы можете проверить этот недостаток в Preview, используя Select All, затем Copy, затем Paste в окно TextEdit (в режиме форматированного текста). Вы увидите текст или графику под примечаниями к редактированию, например. Это явно очень плохо, если вам по закону нужно, чтобы этот контент был удален из вывода.

Рабочее решение

ImageMagick может создавать настраиваемые многостраничные однослойные сглаженные PDF-файлы с растрами на каждой странице с помощью следующей команды:

convert -density 150 document_original.pdf document_flat.pdf

Эта команда растеризует document_original.pdf, создавая пиксельное изображение каждой страницы с разрешением 150 DPI и выводит результат в виде document_flat.pdf.

Примечание о качестве изображения

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

Изменяя плотность , вы можете обменять больший размер файла на более высокое разрешение.

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

Ален О'Ди
источник
1
Спасибо за помощь в ответе. 5 лет назад решение, которое я написал, работало на меня. Но я попытаюсь ответить на ваш вопрос в следующий раз, когда мне придется это сделать (на самом деле очень скоро).
Мэтью Лейнган,
Это имеет смысл. Я полагаю, что поведение Ghostscript изменилось по отношению к сглаживающим аннотациям. Я попытался добавить -PreserveAnnots = false, и он все еще не работал. Под капотом конвертируем используя Ghostscript для обработки PDF. Мне бы хотелось что-то, что делает то, что делает Acrobat: он хранит аннотации, удаляет содержимое позади них и сохраняет непокрытые векторные изображения. Часть Document Cloud с новым Acrobat действительно заставляет меня нервничать, используя ее для конфиденциальных данных.
Ален О'Ди
0

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

JRobert
источник
Но как проще всего сгладить PDF в AppleScript? Я бы предпочел не создавать сценарии для имитации печати в файл. Это кажется грязным и медленным.
Мэтью Лейнган,