Como alterar a cor de todos os realces em um arquivo PDF?

4

Eu quero mudar a cor de cada destaque em um arquivo PDF (sem ter que fazer isso para cada destaque manualmente). De preferência com um comando de linha de comando.

Aqui está um PDF de exemplo com uma linha destacada.

    
por jgosmann 06.03.2014 / 16:46

2 respostas

3

Eu escrevi um script Python para executar a tarefa. Ele procura todos os objetos no arquivo PDF (marcado por obj e endobj ) e verifica cada objeto se for uma anotação ( /Type/Annot ) do tipo de realce ( /Subtype/Highlight ). Se esse for o caso, a definição de cor ( /C[...] ) será substituída.

Existem algumas limitações:

  • Nenhuma análise real do PDF é feita. As expressões regulares usadas podem não ser adequadas para alguns arquivos PDF.
  • Isso pode não funcionar para arquivos PDF criptografados ou compactados. (Não tenho certeza se as anotações podem ser compactadas.)
  • O arquivo original será sobrescrito. Não me culpe pelos dados perdidos! (O script é facilmente editado para criar novos arquivos.)
  • Presumo que alguns objetos PDF referenciem outros objetos por sua posição no arquivo. Assim, evito que o tamanho do arquivo mude. Isso significa que a nova definição de cores pode não ocupar mais bytes do que a antiga.
  • A definição de cores não é validada. Você pode quebrar seu PDF com uma expressão inválida.
por 06.03.2014 / 20:44
0

Aqui está minha tentativa de regex. A substituição acontece no local, portanto, faça uma cópia do seu documento antes de começar.

Esta variação funciona quando a matriz de cores está presente:

$ perl -pi -e 's/(\/Type.*\/Annot.*\/Subtype.*\/Highlight.*\/C\s*\[)[^]]*]/${1}0.5 0.5 0.5]/' document.pdf

Este é para quando a matriz de cores não é especificada (o que é padrão para preto):

$ perl -pi -e 's/(?=\/Type.*\/Annot.*\/Subtype.*\/Highlight)(?!\C\s*\[)(.*)Highlight/$1Highlight\/C[0.5 0.5 0.5]/' document.pdf

Se o primeiro comando não funcionar, tente o outro. Se o segundo trabalhou, então para mudanças de cor subseqüentes use o primeiro.

Substitua 0.5 0.5 0.5 pela sua cor favorita, por exemplo

  • 0 0 1 para azul (0/255 0/255 255/255),
  • 1 1 0 para amarelo (255/255 255/255 0/255) ou
  • 1 0.8745098039 0.3607843137 para o tipo de laranja (255/255 253/255 92/255).
por 24.06.2016 / 23:35