Замените все глифы шрифта в PDF-файле, преобразовав их в контурные формы.

Я ищу способ обвести весь текст/шрифты в файле PDF, т.е. преобразовать их в кривые.

Я бы предпочел сделать это без необходимости конвертировать PDF в PostScript и обратно. Кроме того, я хотел бы использовать бесплатные легкие кроссплатформенные инструменты, которые можно автоматизировать из командной строки, такие как Ghostscript или MuPDF.


person Szabolcs    schedule 01.03.2015    source источник
comment
LaTeXiT может это сделать, и я полагаю, что он использует GhostScript (не уверен). Я пытался копаться в источнике и найти, как он это делает, но безуспешно.   -  person Szabolcs    schedule 01.03.2015
comment
Теперь Ghostscript может сделать это, но раньше это было невозможно (вам пришлось бы использовать PostScript). Я добавил информацию в качестве ответа ниже.   -  person KenS    schedule 01.03.2015


Ответы (3)


Да, вы можете использовать Ghostscript для достижения желаемого.

I. Для версий Ghostscript до 9.14

Вам необходимо пройти 2 шага:

  1. Преобразуйте PDF в файл PostScript, но используйте побочный эффект относительно неизвестного параметра: он называется -dNOCACHE. Это преобразует все используемые шрифты в контурные формы:

    gs -o somepdf.ps -dNOCACHE -sDEVICE=pswrite somepdf.pdf
    
  2. Преобразуйте PS обратно в PDF (и, возможно, снова удалите промежуточный PS):

    gs -o somepdf-with-outlines.pdf -sDEVICE=pdfwrite somepdf.ps
    
    rm somepdf.ps
    

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

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


II. Ghostscript версии 9.15 или новее

Версия Ghostscript 9.15 (выпущенная в сентябре 2014 г.) поддерживает новый параметр командной строки:

 -dNoOutputFonts

Это приведет к тому, что устройства вывода pdfwrite, ps2write и eps2write "сведут глифы в "базовые" операции маркировки (а не запишут шрифты в вывод)".

Это означает: двух шагов, описанных для версий до 9.15 GS, можно избежать. Желаемый результат достигается одной командой:

 gs -o file-with-outlines.pdf -dNoOutputFonts -sDEVICE=pdfwrite file.pdf

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

person Kurt Pfeifle    schedule 01.03.2015
comment
Привет, Курт, На самом деле я создал фотокнигу в формате PDF с изображениями, подписями и смайликами.. И мне нужно распечатать PDF. Каков идеальный способ преобразовать любую фотокнигу в формате PDF в готовый к печати формат PDF. Какие параметры можно использовать в ghostscript? Можете ли вы направить меня или указать на некоторые ресурсы? Заранее большое спасибо. На самом деле я попытался обрисовать шрифты в моей фотокниге в формате pdf с помощью команды, которую вы упомянули в этом ответе ... она отлично работает. Но так как этот PDF-файл содержит изображения, смайлики, текст... Не уверен, что это точная команда? или мне нужно использовать некоторые дополнительные параметры в долгосрочной перспективе...? - person Kaviraj Kanagaraj; 13.01.2016
comment
@Kurt, хороший ответ, вам действительно следует добавить ссылку на другой ваш ответ о том, как сохранить разрешение растрового изображения: superuser.com /а/373740/207447 - person Libin Wen; 06.12.2019
comment
Добавьте ссылку на соответствующий документ для -dNoOutputFonts. Но обратите внимание, что новый выходной PDF-файл, созданный Ghostscript, не обязательно намного более интеллектуален (в целом меньшие, лучше оптимизированные файлы из раздутого входного PDF-файла) с настройками по умолчанию. См. также Как удалить повторяющиеся объекты в PDF с помощью ghostscript? - person samm; 14.06.2020

Этот commit добавляет новый переключатель -dNoOutputFonts в Ghostscript. устройства pdfwrite и ps2write, которые создадут файл PDF (или PostScript, в зависимости от выбранного устройства), в котором все глифы созданы в виде векторов, а не текста.

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

person KenS    schedule 01.03.2015
comment
Да, я проверил, я обнаружил, что причина большего размера была не только в преобразовании шрифтов в контурные фигуры/векторы/кривые. Например, у меня был PDF-файл с одним изображением водяной маски, встроенным и упоминаемым/косвенно используемым на каждой странице. После ghostscript я обнаружил, что выходной PDF-файл содержит дублированные изображения на каждой странице, используя itext-rups-7.1.11. .jar. ``` Страницы: ... Страница 3 124 0 R => Поток изображений Страница 4 171 0 R => Поток изображений ... XRef: ... 124 => Поток изображений 171 => Поток изображений ... ``` - person samm; 14.06.2020
comment
Комментарий выше, похоже, не имеет ничего общего с исходным вопросом или ответом. Samm, если у вас есть проблема, пожалуйста, начните новый вопрос. Для других читателей устройство pdfwrite Ghostscript (по умолчанию) будет хешировать все изображения и использовать только одно, если они идентичны. Конечно, samm не предоставил входной файл, командную строку, выходной файл или даже информацию о том, какая ОС или версия Ghostscript, что делает невозможным расследование или комментарий. - person KenS; 14.06.2020
comment
Ну, похоже, это мало связано с преобразованием текстов в кривые без встроенных шрифтов. Я просто хотел добавить примечание о большем размере выходного PDF-файла, если кого-то беспокоит размер. Я использовал gs v9.52 в Windows 10 с помощью `gs -o book.vectored.pdf -dNoOutputFonts -sDEVICE=pdfwrite book.optimized.pdf`, и в pdf было более 300 страниц. Я использовал тот же алгоритм оптимизации для book.vectored.pdf, что и для book.optimized.pdf, я смог уменьшить размер на 10 МБ. - person samm; 15.06.2020

III. Версии Ghostscript 9.54.0 (Windows 10)

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

(Примечание! Вы должны добавить папку bin-/ и lib Ghostscript в путь Windows, чтобы заставить Ghostscript что-либо делать) Инструкции здесь

  1. Распечатайте PDF-файл, содержащий векторные шрифты или другие векторные элементы, с помощью Acrobat Reader и Microsoft PS Class Driver в файл YourFile.prn. (Для установки этого драйвера -- Панель управления -- Устройства -- Принтеры и сканеры -- Добавьте принтер или сканер -- и дайте сначала Windows некоторое время искать подключенный принтер, а когда он остановится, выберите вариант -- нужного мне принтера нет в списке — Добавить локальный принтер или сетевой принтер с настройками вручную — Далее — Использовать существующий порт: › Файл:(Печать в файл) — Далее — Microsoft: драйвер Microsoft PS Class — Далее)

  2. Откройте командную строку, перейдите в папку, в которой находится файл YourFile.prn, и введите: "C:\Program Files\gs\gs9.54.0\bin\gswin64c.exe" -dNOPAUSE -dNOCACHE -dBATCH -sDEVICE=eps2write -sOutputFile=YourFile.eps YourFile.prn

Если у вас есть постоянная потребность в этом, вы также можете создать файл prn2eps.bat, содержащий следующее:

"C:\Program Files\gs\gs9.54.0\bin\gswin64c.exe" -dNOPAUSE -dNOCACHE -dBATCH -sDEVICE=eps2write -sOutputFile=%1.eps %1.prn

Чтобы использовать этот bat-файл, вам просто нужно ввести: prn2eps YourFile. (Примечание! bat-файл и Yourfile.prn должны находиться в одном каталоге)

По какой-то причине новейшая функция Ghostscript ps2epsi не работала в Windows 10, а Adobe создала PDF-файлы, например. незначительные, но постоянные ошибки в некоторых символах шрифта, когда я импортировал их в программное обеспечение для проектирования, отличное от Adobe, в формате PDF:s. За годы работы я выяснил, что формат EPS-файла является одним из самых надежных форматов, когда векторы должны сохраняться из одной программы в другую. Много раз может быть достаточно распечатать PDF снова в PDF с помощью другого драйвера принтера или изменить формат одного файла с помощью Ghostscript, но не всегда.

person Supernuija    schedule 22.06.2021
comment
Решение II из принятого ответа работает в Ghostscript 9.54 так же, как и раньше (я регулярно его использую). Другие ответы не полагались на GSView. Я не уверен, какую проблему пытается решить ваш ответ. - person Szabolcs; 23.06.2021
comment
Я попробовал это решение, но по какой-то причине в некоторых конкретных шрифтах все еще были некоторые ошибки (некоторые искаженные символы, как будто некоторые вершины или управляющие векторы отсутствовали), которые были исправлены только при печати первого PS с собственным драйвером Windows 10, и затем преобразовать это в EPS. Я десятилетиями использовал Ghostscript для исправления всевозможных странных визуальных ошибок при преобразовании векторных файлов, это отличный инструмент! Gsview сделал его очень простым в использовании, так как у него был графический интерфейс, а он больше не доступен. - person Supernuija; 23.06.2021
comment
Читателям будет полезно, если вы объясните (в самом ответе), для решения какой проблемы предназначено ваше решение. - person Szabolcs; 23.06.2021
comment
Хорошо, я изменил текст, чтобы сосредоточиться на этом больше... - person Supernuija; 23.06.2021