Пакетное удаление комментариев из файлов PDF

18

Как я могу легко удалить все комментарии и аннотации (добавленные с помощью Foxit Reader) из всех PDF-файлов в папке?

Андрей
источник
1
Допустимо ли считать, что вам нужны только предложения бесплатных (как в пиве) или бесплатных (как в свободе) решений?
Курт Пфайфл
@pipitas Я заинтересован в любом виде решения.
Андрей

Ответы:

7

Я просто упал на эту проблему, и ни один из ответов, приведенных здесь, не работал для меня. Что же работа была rewritepdfинструментом из пакета Ubuntu libcam-pdf-perl:

rewritepdf -C in.pdf out.pdf

Обернуть это в небольшой сценарий для удаления аннотаций из всех файлов PDF в каталоге теперь легко:

for i in *.pdf; do rewritepdf -C '$i' '$i'.new; done
Ули Фаренберг
источник
Он работал нормально. :) Некоторая помощь: пакет Ubuntu (то есть, debian) находится здесь packages.debian.org/sid/perl/libcam-pdf-perl Зависимости автоматически устанавливаются с помощью «Центра программного обеспечения Ubuntu». (О, и следить с капиталом «-C» Я первым побежал «-c» , и ничего не произошло, даже ошибки не выводился..)
loved.by.Jesus
5

Если вы работаете в системе Unix:

cd <directory containing PDFs>
find . -type f -name '*.pdf' -exec perl -pi -e 's:/Annots \[[^]]+\]::g' {} +

Это хак, который удаляет все /Annotsкоманды из PDF (команды, которые рисуют аннотации). Он оставляет там объекты аннотаций (вы можете открыть PDF с помощью текстового редактора и искать их), они просто не прорисованы.

Divinenephron
источник
Можете ли вы объяснить RE? Что соответствует [^]] +
jftuga
1
@jftuga, s:(заменить) /Annots \[(текст " /Annots [") [^]]+(один или несколько экземпляров любого символа, кроме " ]") \](буквальный символ " ]") ::(заменить все, что соответствует первому, ничем) g(при необходимости заменить несколько раз в строке).
Divinenephron
1
Одна из потенциально запутанных частей регулярного выражения состоит в том, что литерал ]обычно должен быть экранирован, но не сразу после ^отрицания.
Divinenephron
Это также удаляет внутренние ссылки на документы (так как, я полагаю, они также реализованы в формате PDF как / Annots)
Алек Якобсон
3

Много не проверял, но, похоже, работает следующее. Он удаляет все аннотации, кроме внутренних ссылок на документы (что, похоже, не дает ни один из ответов). Этот скрипт зависит от библиотеки Python pdfrw .

#!/usr/bin/python

import sys, pdfrw

try:
    in_path = sys.argv[1]
    out = sys.argv[2]
except:
    print("Usage:\tannotclean IN.pdf OUT.pdf")
    exit(0)

reader = pdfrw.PdfReader(in_path)

for p in reader.pages:
    if p.Annots:
        # See PDF reference, Sec. 12.5.6 for all annotation types
        p.Annots = [a for a in p.Annots if a.Subtype == "/Link"]

pdfrw.PdfWriter(out, trailer=reader).write()

Использование:

  1. Сохранить как скрипт где-то (я полагаю, в вашем PATH), например /usr/local/bin/annotclean.
  2. annotclean in.pdf cleaned.pdf
  3. (необязательно) пакетная обработка:
# fish shell syntax
for p in **pdf # pdfs from current directory and subdirectories
    annotclean $p $p.new
    mv $p.new $p # overwrite the old
end 
rien333
источник
2

Я думаю, что вы можете сделать это проще всего, "повторно" PDF. Повторное использование означает: сначала преобразовать файл в PostScript, затем преобразовать PostScript обратно в PDF. Обычно повторное осуждение осуждается, потому что обычно вы теряете качество и некоторый контент. В вашем случае вы хотите потерять контент. Повторное обжаривание может быть выполнено с помощью Ghostscript (и пакетных файлов помощника, поставляемых вместе с ним - загрузите, gs900w32.exeесли вы работаете в Windows), так что все готово, с помощью двух простых команд:

pdf2ps.bat input.pdf output.ps
ps2pdf.bat output.ps input_refried.pdf
Курт Пфайфл
источник
1
Это не работает Оставленные комментарии остаются (не как комментарии, а как часть pdf).
Андрей
2
Если комментарии фактически добавляются к содержимому PDF, их можно удалить только вручную. Актуальные аннотации в формате PDF являются отдельными.
CarlF
Есть ли способ без использования какого-либо конвертера?
пользователь
Это также удаляет внутренние ссылки на документы.
Алек Якобсон
@AlecJacobson: Конечно. Если вы конвертируете в PostScript, вы теряете много «богатого» контента, который был частью PDF. PostScript не имеет средств для представления ЛЮБЫХ ссылок, даже внутренних ссылок на документы ...
Курт Пфайфл,
2

Хорошо, вы сказали, что вы также рассмотрите коммерческое решение ....

Я бы порекомендовал вам попробовать каллы pdfToolbox . Он доступен для Windows и Mac OS X. (У них также есть CLI для Linux, но вы можете использовать только предварительно настроенные «профили» с ним. С помощью графического интерфейса Windows вы можете создавать свои собственные профили и повторно использовать их с Linux CLI, хотя.

У pdfToolbox есть много-много-много способов манипулировать и исправлять множество проблем PDF.

Одним из «исправлений» является удаление всех аннотаций.

Вам не нужно выкладывать деньги, чтобы сначала их проверить; Каллас выдает 14-дневные пробные лицензии бесплатно.

Курт Пфайфл
источник
У него действительно есть способ удалить все аннотации, но я не уверен, как сделать пакетную работу.
Андрей
Не знаю о предыдущих версиях --- но последняя версия pdfToolbox5 позволяет запускать его в пакетном режиме для полных папок, содержащих PDF-файлы .....
Курт Пфайфл,