Remoção em lote de comentários de arquivos PDF


18

Como posso remover facilmente todos os comentários e anotações (adicionados ao Foxit Reader) de todos os PDFs em uma pasta?


1
é uma suposição válida pensar que você deseja apenas sugestões gratuitas (como na cerveja) ou gratuitas (como na liberdade)?
Kurt Pfeifle

@pipitas Estou interessado em qualquer tipo de solução.
Andrew

Respostas:


7

Acabei de me deparar com esse problema e nenhuma das respostas dadas aqui funcionou para mim. O que funcionou foi a rewritepdfferramenta 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

Funcionou bem. :) Alguma ajuda: O pacote Ubuntu (ou seja, debian) está aqui packages.debian.org/sid/perl/libcam-pdf-perl As dependências são instaladas automaticamente usando o "centro de software do Ubuntu". (Ah, e cuidado com a capital "-C". Primeiro executei "-c" e nada aconteceu, nem mesmo nenhum erro foi produzido.)
loved.by.Jesus

5

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 /Annotscomandos 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.


Você pode explicar o ER? O que [^]] + corresponde
jftuga

1
@jftuga, 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).
Divinenephron 25/05

1
Uma parte potencialmente confusa do regex é que um literal ]normalmente precisa ser escapado, mas não logo após uma ^negação.
Divinenephron

Isso também remove links de documentos internos (como, acredito, aqueles são implementadas em um pdf como / Annots, também)
Alec Jacobson

3

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:

  1. Salvar como um script em algum lugar (eu assumo no seu PATH), por exemplo /usr/local/bin/annotclean.
  2. annotclean in.pdf cleaned.pdf
  3. processamento em lote (opcional):
# 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 

2

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.exese 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

1
Isso não funciona. Os comentários escritos permanecem (não como comentários, mas como parte do pdf).
Andrew

2
Se os comentários forem realmente adicionados ao conteúdo do PDF, eles poderão ser removidos apenas manualmente. As anotações em PDF reais são separadas.
CarlF

Existe alguma maneira sem usar qualquer conversor?
usuário

Isso também remove os links internos do documento.
Alec Jacobson

@AlecJacobson: Claro. Se você converter para PostScript, perde muito do conteúdo "rico" que fazia parte do PDF. PostScript não têm os meios para representar qualquer links, nem links de documentos internos ....
Kurt Pfeifle

2

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.


Na verdade, ele tem uma maneira de remover todas as anotações, mas não sei como executar um trabalho em lotes.
Andrew

Dunno sobre as versões anteriores --- mas a versão mais recente pdfToolbox5 permite executá-lo no modo de lotes em pastas inteiras contendo PDFs .....
Kurt Pfeifle
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.