Pelo menos okular
armazena comentários como objetos de /Type/Annot
, veja estes exemplos para a sintaxe:
17 0 obj
<<
/Type/Annot
/Rect[67.023 756.168 85.203 774.333]
/Subtype/Text
/M(D:20170828091301)
/T(■ somebody)
/Contents(■ text)
/NM(okular-{8ff65cc1-7b89-45c6-8adf-1aa6cec06cd0})
/F 4
/C[1 1 0]
/CA 0.5
/Border[0 0 1]
/P 20 0 R
>>
endobj
18 0 obj
<<
/Type/Annot
/Rect[37.7 597.841 236.675 615.979]
/Subtype/FreeText
/DA(/Invalid_font 10 Tf)
/M(D:20170828091316)
/T(■ somebody)
/Contents(■ text)
/NM(okular-{50420111-1c05-4e07-8db5-08deffb0ec7e})
/F 20
/C[1 1 0]
/CA 0.5
/Border[0 0 1]
/Q 0
/IT/FreeText
/P 20 0 R
>>
endobj
Esses objetos são vinculados a páginas usando um comando como /Annots 14 0 R
, que é como esse script exclui todos os comentários em um dado arquivo pdf
, ele simplesmente exclui todas as /Annots
linhas:
pdftk original.pdf output uncompressed.pdf uncompress
LANG=C sed -n '/^\/Annots/!p' uncompressed.pdf > stripped.pdf
pdftk stripped.pdf output final.pdf compress
Se você mergulhar fundo na estrutura dos seus documentos pdf
específicos - basta abri-los com um editor de texto -, você poderá entender o que está acontecendo e gerenciar manipular seus documentos com e. g. sed
, no entanto duvido seriamente que exista uma solução que se encaixe em todos os tipos de pdf
documento aqui. Por que vale a pena (pelo menos para o meu arquivo de teste) o seguinte oneliner dá-lhe os comentários de input.pdf
em um terminal:
pdftk input.pdf output - uncompress | sed '/^\/Contents (/!d'
Adicione >> comments
ao final dessa linha para armazenar a saída em um arquivo chamado comments
.