Como posso remover facilmente todos os comentários e anotações (adicionados ao Foxit Reader) de todos os PDFs em uma pasta?
Como posso remover facilmente todos os comentários e anotações (adicionados ao Foxit Reader) de todos os PDFs em uma pasta?
Respostas:
Acabei de me deparar com esse problema e nenhuma das respostas dadas aqui funcionou para mim. O que funcionou foi a rewritepdf
ferramenta do pacote Ubuntu libcam-pdf-perl
:
rewritepdf -C in.pdf out.pdf
Agora é fácil agrupar isso em um pequeno script para remover anotações de todos os arquivos pdf em um diretório:
for i in *.pdf; do rewritepdf -C '$i' '$i'.new; done
Desde que você esteja em um sistema Unix:
cd <directory containing PDFs>
find . -type f -name '*.pdf' -exec perl -pi -e 's:/Annots \[[^]]+\]::g' {} +
Este é um hack que remove todos os /Annots
comandos do PDF (os comandos que desenham as anotações). Ele deixa os objetos de anotação lá (você pode abrir o PDF com um editor de texto e pesquisá-los), mas eles não são desenhados.
s:
(substitute) /Annots \[
(o texto " /Annots [
") [^]]+
(uma ou mais instâncias de qualquer caractere além de " ]
") \]
(o caractere literal " ]
") ::
(substitua qualquer coisa que corresponda à anterior por nada) g
(substitua várias vezes por linha, se necessário).
]
normalmente precisa ser escapado, mas não logo após uma ^
negação.
Ainda não o testei muito, mas o seguinte parece funcionar. Exclui todas as anotações, exceto os links internos do documento (que nenhuma das respostas aqui parece fazer). Este script depende da biblioteca pdfrw python.
#!/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()
Uso:
PATH
), por exemplo /usr/local/bin/annotclean
.annotclean in.pdf cleaned.pdf
# 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
Eu acho que você pode fazer isso mais facilmente "repetindo" o PDF. Refrying significa: primeiro converta o arquivo em PostScript, depois converta o PostScript novamente em PDF. Geralmente, a recusa é desaprovada, porque geralmente você perde qualidade e algum conteúdo. No seu caso, você deseja perder o conteúdo. A re-fritura pode ser feita com o Ghostscript (e os arquivos de lote auxiliar enviados com ele - faça o download do gs900w32.exe
se você estiver no Windows), então aqui está, com 2 comandos fáceis:
pdf2ps.bat input.pdf output.ps
ps2pdf.bat output.ps input_refried.pdf
OK, você disse que também consideraria uma solução comercial ...
Eu recomendo que você experimente callas pdfToolbox . Está disponível para Windows e Mac OS X. (Eles também têm uma CLI para Linux, mas você só pode usar "perfis" pré-configurados). Com a GUI do Windows, você pode criar seus perfis personalizados e reutilizá-los com a CLI do Linux, no entanto.
O pdfToolbox tem muitas e muitas maneiras de manipular e corrigir muitos, muitos problemas individuais em PDF.
Uma das "correções" é remover todas as anotações.
Você não precisa desembolsar dinheiro para testá-lo primeiro; A callas fornece licenças de teste de 14 dias gratuitamente.