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.