Уловка компьютерной крысы №8 ( как убрать водяной знак из pdf-файла )

В недавнем материале я упомянул о своём самопальном способе удаления «водяных знаков» из pdf-файлов, скачанных с ProQuest.

«Обратите внимание на то, что страницы скачанного pdf-файла «out.pdf» ухряпаны водяным знаком «PREVIEW» для защиты чего-то там. Может быть, такая надпись появляется только в пробной версии доступа к ProQuest. А может быть и нет. Врать не буду — не знаю.

Если кому-то «ндравится» лицезреть в файле этот «watermark», то так тому и быть. Но некоторых эстетов, вроде меня, он жутко раздражает. Идя навстречу трудящимся всего мира, программистами-умельцами были созданы программы, позволяющие удалять водяные знаки из pdf-файлов, например, «PDF Logo Remover», «PDF Watermark Remover», «Nitro Pro», «PDF Converter Ultimate», «VeryPDF PDF Text Replacer», «VeryPDF PDF to Any Converter» и т.п. И, как утверждают, даже сам «Adobe Acrobat Pro» также позволяет это делать. Перепробовав всё выше упомянутое, скажу: «Ни фига они не удаляют эту надпись PREVIEW из файлов, выдаваемых ProQuest!».

Уловки компьютерной крысы

В принципе, задача изничтожения «watermark» на страницах pdf-файлов для аспирантов не совсем актуальна. Потому что кому нужно уловить лишь суть из многостраничных детищ фирмы Adobe, а, тем более, когда водяной знак не мешает непосредственному выдиранию «оттудова» текста, тому эта проблема — «по барабану».

Однако жизнь гораздо сложней и многообразней аспирантской рутины, поэтому лично у меня не раз возникала задача очистить какой-нибудь pdf-файл от ненужных надписей, типа «PREVIEW», «COPYRIGHT», «DTIC» , «IEEE Proof» и тому подобное. Кстати, не с целью уворовать или присвоить чужой интеллектуальный продукт, Боже упаси, — а совершенно по другим причинам.

Так, что, единожды столкнувшись с такой проблемкой, я действительно перепробовал достаточно много программных изделий. В каких-то случаях срабатывало одно, в других — другое, но гораздо чаще «патентованные врачи» оказывались бессильны. И «чо» делать?

А что, например, делают в деревнях башковитые и рукастые мужики без денег, когда им надо передвигаться по местным ухабам? Они, используя подручные средства, остатки ещё колхозной советской техники, старые шины, куски металлолома во дворе да плюс соседский сварочный аппарат, просто мастрячят себе некий самоходный агрегат. Он, конечно, больно страшненький на вид, но, туды его в качель, — ВЕЗЁТ! А вам шашечки нужны, или ехать?

Поскольку многие вещи я издавна привык делать в командной строке в виде скриптов или батников1)Такой подход на порядок облегчает жизнь при автоматизации различных рутинных операций, которых у меня на работе навалом, или при обработке больших массивов данных. В этом случае всё — под контролем. Причём, написав пару десятков строк и нажав кнопочку, можно идти на все четыре стороны — хоть курить, хоть дремать!, то и в данном случае «безоболочечный» и неказистый «watermark–терминатор» pdf-файлов я «слепил» для личных нужд из того, что было. Ну и ладно! Писать полноценную графическую оболочку, да ещё с новомодным, в стиле надгробных плиток, интерфейсом Windows было «в лом». Вы же специально не переодеваетесь к ужину? А поесть за столом можно и в исподнем.

Алгоритм действий

В большинстве случаев водяной знак в pdf-файлах представляет собой некую надпись или текстовую картинку в фоне за основным текстом. Причём для его изображения в pdf-документах с научно-техническим содержанием используется, как правило, некий оттенок серого — не пятьдесят, как сейчас модно, а один. Параноидальный случай водяного знака с многоцветной заливкой, градиентом, тенями и прочими дизайнерскими прибамбасами рассматривать не будем. У «вчёных» с этим немножко попроще. Поэтому в двух словах алгоритм самопальной «терминации» нежелательной маркировки заключается в следующем:

  • при наличии защиты снимаем ограничения на редактирование pdf-файла,
  • разбиваем pdf-файл на отдельные страницы,
  • конвертируем страницы в графический формат, например, «tif»,
  • из любой tif-страницы вручную вырезаем и копируем небольшой фрагмент с водяным знаком,
  • по этому фрагменту определяем цветовой код водяного знака,
  • во всех изображениях заменяем цвет водяного знака на цвет фона страницы (стопроцентно белый),
  • преобразуем tif-файлы обратно в pdf-странички,
  • и на завершающем этапе объединяем все новоявленные pdf-страницы в один реинкарнированный файл.

Итак, рассмотрим описанный выше алгоритм более подробно.

Предположим, что у нас имеется некий pdf-файл с какой-то дурацкой серой надписью в фоне. Причём, усложним вводную: пусть файл к тому же защищён от изменений.

Вот вам живой пример такого файла — это корректура моей статьи в журнале «Geoscience and Remote Sensing», которую мне прислали оттуда в 2004 году для заключительной правки. Открыв этот файл в «Adobe Acrobat pro», и нажав «Ctrl-D», можно убедиться в «Свойствах документа» в разделе «Защита», что в этом pdf-файле запрещено изменение, компоновка, копирование и извлечение страниц.

1. Снимаем ограничения

Таким образом, первым делом нужно снять установленную защиту или ограничения. Один из способов этого недружелюбного действа был описан мной ещё в «Уловке № 6 — Вскрываем запароленный pdf-файл». Там для этого использовалась, прямо скажем неплохая программа от «Wоndеrshаrе» — «PDF Sрlitter 1.5», взятая, как всегда, у буржуев во временное пользование.

Но, к сожалению, «PDF Sрlitter 1.5» не позволяет работать из командной строки2) Вообще-то, для того, чтобы в скриптах использовать программы без поддержки командной строки, я разработал некую методику — может быть не очень элегантную, но зато работающую. Как-нибудь опишу её в очередной «Уловке».. Поэтому пришлось искать альтернативу, которая и была найдена в лице бесплатной утилиты «qpdf»3)Ссылка на «первоисточник», ссылка на место откуда можно скачать эту утилиту., позволяющей в одну строку

qpdf -decrypt input.pdf output.pdf

снять ограничения с pdf-файла4)При работе используются следующие файлы: «qpdf.exe», «libgcc_s_dw2-1.dll», «libstdc++-6.dll», «qpdf13.dll». Исходная ссылка, информация о QPDF и ссылка на место загрузки, ссылка на место загрузки собственно утилиты.. Простенько и со вкусом.

Особых иллюзий в отношении «qpdf», конечно, строить не следует. Что может, она делает, а уж чего не может, то «Ну, не шмогла я».

2. Бьём на части

Пошли дальше. Для разбивки («split») и объединения («merge») pdf-файлов наворочена хренова туча программ: разного объёма и с разными возможностями5)Например, «A-PDF Merger 2.4», «Free PDF Merger (Splitter)», «PDF Content Split», «PDF Splitter and Merger», «PDF Stitcher 2.0», «Wondershare PDF merger-splitter», «TPDF» и т.д. и т.п.. Но мне всегда было привычней и удобней сварганить батник, прописать туда пару-тройку строк, и не париться.

Например, файл «input.pdf» со снятыми ограничениями можно в мгновение ока «раздраконить» на отдельные страницы с помощью утилит «pdftk», «tpdf», или «cpdf», выполнив в командной строке всего лишь

pdftk input.pdf burst
tpdf -t split -in input.pdf -out out_.pdf -ns —

или

cpdf -split input.pdf -o pg_%%%%%%%%.pdf 6)Эту строку нужно прописать в bat-файл, и запускать уже батник.

После первой и третьей команды в текущей папке появится куча файлов вида «pg_0001.pdf», «pg_0002.pdf», …, а после второй — «out_001.pdf», «out_002.pdf», …

3. Преобразуем pdf в tif

Для этой операции тоже понавыдумывали дофига и больше специальных красивеньких программ и онлайн-сервисов. Но я для подобных целей использую набор программного обеспечения «Ghostscript» (см. краткую информацию). На сегодня имеется версия 9.18, которую можно загрузить отсюда и «за без денег» установить — при желании, естественно. Портативная версия Ghostscript для стареньких и новеньких Windows (необходимая для данного случая) может быть загружена отсюда.

Вот — пример однострочной команды в bat-файле, с помощью которой файл «input.pdf» преобразуется в «output.tif».

gswin32.exe -dNOPAUSE -dQUIET -dNOPROMPT -sDEVICE=tiffgray -sCompression=lzw -r300x300 -dNOPAUSE -sOutputFile=output.tif input.pdf -c quit

4. Извлекаем водяной знак

Это — единственный момент человеческого вмешательства в автоматический процесс волшебного исчезновения watermark. Поначалу я хотел задействовать «Paint Shop Pro 6.02», которую использую беспрерывно, несмотря на 15-летний возраст этой программулины. «Старые люди — старые вещи». Поскольку данная версия — лёгка как птичка, быстра и интуитивно понятна. В отличие от её нынешнего потомка — последней версии X8 — раздувшегося монстра с дистрибутивом порядка 250 Мб с офигенными возможностями, которые на 99% не нужны при моей рутинной работе. Хотя тенденция — налицо. Вместо «Windows 3.11 for Workgroups» на трёх дискетках и 640 килобайт памяти, ныне любая железяка, даже самая пи́галица, оперирует гигабайтами и десятками гигабайт.

Но, потом вспомнил об ещё одной замечательной программе — «IrfanView», которая входит в мой круг «избранных» и «незаменимых» (сейчас у меня версия 4.37). Её использование вместе с утилитами «clipin» и «cmp» (из замечательного 135-утилитного набора «Poof!») позволило максимально автоматизировать этап выборки фрагмента с водяным знаком.

Разумному существу, например, аспиранту, осталось только выделить мышкой в открывшемся в IrfanView файле «кусочек» собственно водяного знака, нажать всемирно известную комбинацию «Ctrl-C» и закрыть IrfanView.

На этом ваша выполнимая миссия заканчивается, после чего можно «оправиться и закурить».

5. Определяем цветовой код водяного знака

Данная операция выполняется с помощью утилиты «identify» из шикарного программного пакета по работе с изображениями «ImageMagick»7)Ссылка на домашнюю страницу, место загрузки текущей версии 6.9.2-4 и портативных вариантов, который я использую.. ImageMagick настолько могуч, что может всё. Для этого нужна одна единственная малость — с ним нужно разбираться. Но точно также, как MiKTeX8)Куча моих ссылок: ссылка 1, ссылка 2, ссылка 3, ссылка 4, ссылка 5, ссылка 6, ссылка 7. по словам Михал Михалыча9)М.М. Жванецкий: «Ну а Швейцария, совсем маленькая страна. Красноярский край покрывает ее, как бык овцу» (ссылка) «покрывает» Word и ещё море всякого издательского софта как «бык овцу», так и ImageMagick открывает безбрежное море возможностей тем, кто хочет из изображений сделать «конфетку».

Одной единственной командой вида

identify -verbose input.tif >info.txt

утилита «identify» «раскалывает» входной файл «input.tif» так, как это не сможет сделать бригада следователей после 10-часового допроса. А уж из его «показаний» (файл «info.txt») можно вытащить всё, что нужно, включая наши скромные потребности в цветовом коде водяного знака.

6. «Казнь» водяного знака

На завершающей стадии, ради которой и была затеяна вся эта возня, в дело вступает ещё одна ImageMagickовская утилита со скромным именем «convert». Определив на предыдущем этапе цветовой код мешающего нам водяного знака, например, в виде #D9D9D9, коротенькой командой

convert input.tif -fill white -opaque #D9D9D9 output.tif

мы полностью заменяем этот цвет в исходном файле «input.tif» на цвет фона страницы («белый»), записывая результат в «output.tif». Теперь только осталось превратить tif обратно в pdf, и на этом можно будет поставить большую и жирную точку.

7. Возвращение к «истокам»

Поскольку всё уже придумано до нас, умные головы на планете «настругали» немало программ и утилит по превращению изображений в pdf-формат. Лично я перепробовал уж совершенно точно с десяток различных «рукоделий» плюс онлайн-сервисы. Но для данной задачи я использовал утилиту «Tiff2Pdf» и библиотеку «BitMiracle.LibTiff.NET.dll» из пакета «LibTiff.Net», скачав архив по ссылке. С её использованием «брюки превращаются в элегантные шорты лёгким движением руки»:

Tiff2Pdf -z -o output.pdf input.tif

8. PDF всех стран, объединяйтесь!

Программ для «склеивания» pdf-файлов также наваяли по «самое не хочу». Но мне всегда было интересно знать, нафига нужна куча программ, если существует уже упомянутый замечательный инструментарий «pdftk». Так, для объединения целой компании pdf-файлов в папке «pdfs» в один общий файл «pdf_out.pdf» достаточно в командной строке набрать всего лишь

pdftk pdfs\*.pdf cat output pdf_out.pdf

И всё!

Послесловие

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

Кстати, до сих пор некоторые товарищи, получая правительственную награду, завершают своё выступление словами: «Но это не только моя заслуга, а заслуга всего нашего коллектива!». Описав практически все утилиты, которые были использованы при решении данной задачи, не могу не упомянуть ту, без которой я ничего не смог бы сделать: потоковый текстовый редактор sed10)Место, где хранится версия 4.1.5, которой я пользуюсь. Ссылка на дистрибутив текущей версии 4.2.1.. Маленький и скромный труженик тыла, кующий победу над текстовыми полчищами — вот какое бы я дал определение этой незаменимой в моей работе утилите. Слава sed-у, вдохновителю и организатору наших свершений!

Коды для любознательных

Я понимаю, что страсть к ковырянию во внутренностях игрушек, как у моих внуков, с годами проходит. Однако для тех аспирантов технических специальностей (про медиков умолчу), кто сумел сохранить эту свою детскую непосредственность, предлагаю глянуть на внутренности данного серемяжного «watermark-терминатора». Вот — ссылка на страницу с кодами всех bat-файлов. При их написании я пытался по максимуму закомментировать (@rem) свои действия для юных аспирантов. Но, скорее всего, что-то обязательно пропущено. «Ну, звиняй, Мыкола! Бананив у мэне для тебе нема».

Инструкция

Ну!?! Таки да, несколько затянувшаяся преамбула закончена! «Гоп-стоп, Мы подошли из-за угла».

Так вот, если вы просите скачать этот самодел, то он есть у меня. Здесь — архивный файл «portable_wm-remove.zip» (на минуточку, 24 894 285 байт). Тот, кто не доверяет мне, но почему-то доверяет Яндекс.диску, может качнуть всё это «студова», имея на руках гарантию, шо вирусо́в нема́. Между прочим, этот «терминатор» водяного знака проверен на чужих машинах с Windows XP, 7-ой и 8-ой версий: всё работает.

По стопам

  1. Скачиваете архив и разворачиваете его в какую-нибудь папку у себя на компьютере.
  2. Закидываете в эту папку pdf-файл, из которого вы хотите попробовать удалить безобразие в виде серого водяного знака.
  3. Переименовываете этот файл как «pdf_in.pdf».
  4. Тюкаете по батнику «_clean.bat», очищая папки от возможно оставшихся предыдущих результатов.
  5. Тюкаете по батнику «1_remove-wm.bat», запуская процесс «уничтожения» водяного знака.
  6. Не пужаемся мелькающим окнам Ghostscript: то pdf-файлы преобразуются в изображения формата tif.
  7. На открывшейся в IrfanView картинке визуально выбираем фрагмент только водяного знака, не «цепляя» текст. Нажимая левую кнопку мыши с помощью крестообразного курсора выделяем нужную, небольшую область изображения. Затем кнопку можно отпустить, дав мышке глотнуть воздуха.
  8. Нажимаем волшебные клавиши «Ctrl-C» и закрываем IrfanView.
  9. Всё остальное доделается само. Через некоторое время в этой папке появится файл без водяного знака — «pdf_out.pdf».

Чтобы подтвердить, что всё это работает, предлагаю глянуть на четыре примера разных pdf-файлов «ДО» преобразования и «ПОСЛЕ». В последнем примере исходный файл имел защиту в виде ограничений на модификацию файла.

  • Пример 1: до (914167 байт) и после (4361662 байт)
  • Пример 2: до (582224 байт) и после (667697 байт)
  • Пример 3: до (885216 байт) и после (1247156 байт)
  • Пример 4: до (264075  байт) и после (1049835  байт)

Ушлый и дошлый аспирант конечно же обнаружит, что в третьем примере имеют место артефакты неудалённого водяного знака на изображениях с серой заливкой. Так оно и есть, поскольку цветовой код «watermark» изменился при наложении двух серых цветов друг на друга. Ничего, и на солнце, как говорят, есть какие-то там «пятна». Что же касается увеличения размера преобразованных файлов, то и это не беда. Гигабайт туда, гигабайт сюда…

По неизвестной мне причине некоторые из «примерных» преобразованных pdf-файлов (ну, типа первый и третий) не открываются нормально у меня при просмотре в «Firefox». Ну, и фигли? Бывает. Скачиваем и просматриваем у себя на компьютере стандартными средствами просмотра pdf-файлов.

Ссылки на старые уловки

Меня могут спросить: «А почему Уловка № 8?». Да потому что до этого было ещё семь.

На этом — всё! Пишите диссер себе и посылки мне!

Сноски   [ + ]

1. Такой подход на порядок облегчает жизнь при автоматизации различных рутинных операций, которых у меня на работе навалом, или при обработке больших массивов данных. В этом случае всё — под контролем. Причём, написав пару десятков строк и нажав кнопочку, можно идти на все четыре стороны — хоть курить, хоть дремать!
2. Вообще-то, для того, чтобы в скриптах использовать программы без поддержки командной строки, я разработал некую методику — может быть не очень элегантную, но зато работающую. Как-нибудь опишу её в очередной «Уловке».
3. Ссылка на «первоисточник», ссылка на место откуда можно скачать эту утилиту.
4. При работе используются следующие файлы: «qpdf.exe», «libgcc_s_dw2-1.dll», «libstdc++-6.dll», «qpdf13.dll». Исходная ссылка, информация о QPDF и ссылка на место загрузки, ссылка на место загрузки собственно утилиты.
5. Например, «A-PDF Merger 2.4», «Free PDF Merger (Splitter)», «PDF Content Split», «PDF Splitter and Merger», «PDF Stitcher 2.0», «Wondershare PDF merger-splitter», «TPDF» и т.д. и т.п.
6. Эту строку нужно прописать в bat-файл, и запускать уже батник.
7. Ссылка на домашнюю страницу, место загрузки текущей версии 6.9.2-4 и портативных вариантов, который я использую.
8. Куча моих ссылок: ссылка 1, ссылка 2, ссылка 3, ссылка 4, ссылка 5, ссылка 6, ссылка 7.
9. М.М. Жванецкий: «Ну а Швейцария, совсем маленькая страна. Красноярский край покрывает ее, как бык овцу» (ссылка)
10. Место, где хранится версия 4.1.5, которой я пользуюсь. Ссылка на дистрибутив текущей версии 4.2.1.