Извлечение фоновых изображений из файла PDF?

13778
Will Martin

У меня есть файл PDF, содержащий карты здания, в котором я работаю, здесь:

http://www.libsys.und.edu/dev/FloorPlans_All.pdf

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

До сих пор я пробовал следующие программы с графическим интерфейсом:

  • Adobe Reader: позволяет мне выбирать текст, но не фоновые изображения
  • FoxIt PDF Viewer: позволяет мне выбирать текст, но не фоновые изображения
  • XPDF в Ubuntu 10.10: позволяет выбирать текст, но не фоновые изображения

А также следующие программы командной строки:

  • pdfimages: извлекает значки, обозначающие ванные комнаты просто отлично, но не фоновые изображения
  • pdftohtml: так же, как pdfimages, плюс он делает плохо размеченный HTML-документ
  • pdfextract: такой же, как pdfimages
  • конвертировать: успешно сохраненные изображения, но с записанным в них текстом

Я даже пытался открыть PDF вручную в текстовом редакторе и извлечь объекты потока, вставив их в новый файл и сохранив его с расширением .jpg, .png или .bmp (каждый по очереди). Учитывая то, как мало я знаю о внутренней структуре файлов PDF, неудивительно, что это не сработало.

Итак ... есть ли способ получить изображения карты из этой вещи, не получая также текст и значки?

8
Как я обычно решаю эту задачу: (1) Используйте `qpdf`, чтобы преобразовать двоичные части в ASCII, насколько это возможно. (2) Используйте текстовый редактор, чтобы сделать весь текст невидимым, который я не хочу видеть на экране или в распечатках (можно легко и без повреждения таблицы XRef переключить флаг * invisible *). (3) Повторно отогнать результат с помощью Ghostscript, чтобы свести к минимуму его размер. - К сожалению, ваш файл больше не загружается для демонстрации процедуры ... Kurt Pfeifle 12 лет назад 0

6 ответов на вопрос

6
mybluevan

Вы можете загрузить библиотеку XPDF с http://www.foolabs.com/xpdf/download.html для Linux и Windows. Затем запустите, pdfimages -j input.pdf outputи вы должны получить output-000.jpg, output-001.jpgи т. Д. Кроме того, проверьте http://linuxcommand.org/man_pages/pdfimages1.html для получения дополнительных возможностей использования.

Исправление, похоже, что изображение является векторной графикой, непосредственно встроенной в PDF. Попробуйте открыть его в чем-то вроде Inkscape или Adobe Illustrator, который обрабатывает векторную графику. mybluevan 12 лет назад 1
Ах, ха! Карты - векторная графика - неудивительно, что у меня были такие проблемы! Inkscape, кажется, открыл его очень хорошо, и я могу отредактировать его в соответствии с моим сердцем. Спасибо! Will Martin 12 лет назад 0
2
Craig H

Хорошо, после того, как я возился с этим в течение 5 минут, мой анализ состоит в том, что PDF даже страннее, чем я думал, и это о чем-то говорит.

Не уверен, каков ваш бюджет, но с Acrobat Pro Extended 9 вы можете использовать:

A. Инструменты, Расширенное редактирование, Touchup Text Tool

-Select All -Right click, Properties -Text tab -Select a standard font (e.g. Arial), close -Hit Delete 

B. Инструменты, Расширенное редактирование, Инструмент Touchup Object

-Выберите объект (вы можете получить большинство, но не все, из них (например, значки компьютеров учеников не могут быть выбраны), затем удалите

Вот как выглядела Страница 1 после быстрой очистки: http://dl.dropbox.com/u/7434256/p1test.pdf

Странно преуменьшение. Я не знаю историю этого файла, но Acrobat Pro 8 доставил нам неприятности. Inkscape добился цели, хотя, слава богу. Теперь, чтобы преобразовать все это в некоторые правильные SVG-файлы, из которых мы можем генерировать растровую графику ... Will Martin 12 лет назад 0
Работа, которую вы проделали над оригинальным PDF (который, к сожалению, больше не доступен для меня), не самая лучшая. Ваш файл все еще ~ 3 МБ. Он содержит много + много неиспользуемых объектов. Он даже содержит экземпляр оператора `/ AA` (для * Automatic Action *), делающий его потенциально опасным PDF-файлом. Ghostscript смог довести его до 60 кБайт без потери видимого содержимого. (Метаданные, содержащиеся в файле, распространяются на 17 различных объектов. Метаданные предполагают, что существует 17 различных версий / модификаций этого файла с момента его создания 2011-01-18.) Kurt Pfeifle 12 лет назад 1
@pipitas Я рад, что проверил это снова, оказалось, что Apache не работал на этом сервере. Оригинальный PDF снова доступен. Это все еще раздражает, хотя. С тех пор я обнаружил, что карты были сгенерированы из файлов AutoCAD DXF, которые создают очень уродливую векторную графику. На каждой карте сотни отдельных путей, каждый из которых представляет собой отдельную линию с двумя конечными точками. Это, вероятно, облегчило для архитектора изменение отдельных участков стены или чего-то еще, но это боль в заднице для всего остального. Will Martin 12 лет назад 0
@Will Martin: Ой! Это довольно большой PDF-файл, содержащий множество внутренних, скрытых обновлений файлов (и поэтому: мусор с точки зрения пользователя). - 16 страниц по 16 Мбайт довольно «тяжелые» для просто выглядящей векторной графики. Не менее 16 различных слоев («Дополнительный контент» на языке PDF), по одному на каждую страницу. Я бы не стал разбираться в этом беспорядке только с помощью текстового редактора ... Kurt Pfeifle 12 лет назад 0
@pipitas: Спасибо - честно. Хотя я бы не назвал то, что я делал, «работой» - я просто демонстрировал (после пары минут игры), что это возможно с Acrobat. Гарантия возврата денег и все такое. ;) Craig H 12 лет назад 2
1
Kurt Pfeifle

Возьмите PDF, созданный Крейгом Н, и немного оптимизируйте его, запустив его через Ghostscript. В Windows командная строка:

gswin32c.exe ^ -o p1test-gs-optimized.pdf ^ -sDEVICE=pdfwrite ^ -dPDFSETTIINGS=/prepress ^ p1test.pdf 

В Linux / Unix / Mac OS X выполните:

gs \ -o p1test-gs-optimized.pdf \ -sDEVICE=pdfwrite \ -dPDFSETTIINGS=/prepress \ p1test.pdf 

Это уменьшит размер файла с 3.000 кБайт до 60 кбайт без потери содержимого. Тогда его импорт в Inkscape (или InDesign, Illustrator, ...) должен быть намного быстрее ....

1
aart12

... вы можете попробовать Photoshop. Он читает PDF, и «возможно», он возник в PS и, возможно, все еще содержит слои ... но это очень далеко.

0
XavierStuvw

In a Linux environment I have used pdfmod to extract all the images in one go. See https://wiki.gnome.org/Apps/PdfMod or, for Ubuntu users, https://apps.ubuntu.com/cat/applications/pdfmod/

To download and install it in Ubuntu, it is sufficient to type sudo apt-get install pdfmod.

  • Start the pdfmod GUI (type in pdfmod in the dashboard or command-line terminal)
  • Open the PDF document
  • Select all the pages (or any that you want to extract the images from)
  • The Edit menu item will present the option of extracting as many images as they can be extracted within the selected range (export n images, with n the appropriate number). You can also access this command by hovering with your mouse on the selection and activating the local menu (right-click for the right-handed).
  • Once you go ahead with this, a new window will open up where you select the location to save the images into.

Hope this helps.

Пожалуйста, прочтите [Как я рекомендую программное обеспечение] (https://meta.superuser.com/questions/5329/how-do-i-recommend-software-in-my-answers/5330#5330), чтобы узнать, как Вы должны рекомендовать программное обеспечение. Предоставьте больше, чем просто ссылку, например, а также некоторую дополнительную информацию о самом программном обеспечении и о том, как его можно использовать для решения рассматриваемой проблемы. Вы могли бы даже включить некоторые примеры командных строк. DavidPostill 8 лет назад 0
@DavidPostill. Спасибо за указание на это. Готово, я верю. XavierStuvw 8 лет назад 0
Намного лучше ... ;) DavidPostill 8 лет назад 0
Теперь я знаю, что могу требовать от ответов на мои посты :-) XavierStuvw 8 лет назад 0
-1
Will Gunn

Откройте документ на экране, увеличьте изображение, чтобы сделать его как можно больше, но все еще видно. Нажмите alt + prnt scrn (или эквивалент в вашей операционной системе), и он должен сделать снимок экрана программы. Теперь откройте краску или ваш любимый графический редактор (фотошоп, gimp и т. Д.), Вставьте изображение и обрежьте все, что вам не нужно.

Это также включает в себя значки, которые над фоновым изображением на снимках экрана, а также использует разрешение экрана. Должен быть лучший способ. Zachiel 7 лет назад 0

Похожие вопросы