Adicionar e editar marcadores em pdf

22

Ao obter metadados de alguns arquivos pdf com marcadores pdftk, observo o formato dos marcadores nos metadados pdf. Então, eu acho que com pdftkisso, é possível adicionar e editar marcadores de um arquivo pdf.

Aqui estão três etapas que eu sigo:

  1. Em primeiro lugar, recebo os metadados (incluindo os favoritos, se houver) de um arquivo pdf em um arquivo de texto pdftk in.pdf dump_data > in.info.
  2. Em seguida, adiciono alguns favoritos ao arquivo de texto de metadados in.info, alterando-o de

    InfoKey: Creator
    InfoValue: PScript5.dll Version 5.2
    InfoKey: Title
    InfoValue: SSReader Print.
    InfoKey: Producer
    InfoValue: Acrobat Distiller 7.0 (Windows)
    InfoKey: Author
    InfoValue: Administrator
    InfoKey: ModDate
    InfoValue: D:20050605073244+08'00'
    InfoKey: CreationDate
    InfoValue: D:20050605073244+08'00'
    PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
    PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
    NumberOfPages: 400
    PageLabelNewIndex: 1
    PageLabelStart: 1
    PageLabelNumStyle: DecimalArabicNumerals
    

    para

    InfoKey: Creator
    InfoValue: PScript5.dll Version 5.2
    InfoKey: Title
    InfoValue: SSReader Print.
    InfoKey: Producer
    InfoValue: Acrobat Distiller 7.0 (Windows)
    InfoKey: Author
    InfoValue: Administrator
    InfoKey: ModDate
    InfoValue: D:20050605073244+08'00'
    InfoKey: CreationDate
    InfoValue: D:20050605073244+08'00'
    PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
    PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
    NumberOfPages: 400
    BookmarkBegin
    BookmarkTitle: Front cover
    BookmarkLevel: 1
    BookmarkPageNumber: 1
    BookmarkBegin
    BookmarkTitle: About the Author
    BookmarkLevel: 1
    BookmarkPageNumber: 5
    BookmarkBegin
    BookmarkTitle: Title page
    BookmarkLevel: 1
    BookmarkPageNumber: 6
    BookmarkBegin
    BookmarkTitle: Copyright page
    BookmarkLevel: 1
    BookmarkPageNumber: 7
    BookmarkBegin
    BookmarkTitle: Foreword
    BookmarkLevel: 1
    PageLabelNewIndex: 1
    PageLabelStart: 1
    PageLabelNumStyle: DecimalArabicNumerals
    
  3. Então tento colocar os metadados editados de volta no arquivo pdf por pdftk in.pdf update_info in.info output out.pdf.

Mas quando abro o novo arquivo pdf out.pdfno evince ou no adobe reader, não há nenhum marcador no novo arquivo pdf.

Se eu conseguir os metadados do novo arquivo pdf out.pdfpor pdftk out.pdf dump_data > out.info, não haverá fichas no out.info. Parece que os favoritos não foram adicionados com sucesso.

Fiquei me perguntando se existem alguns erros? Como devo adicionar e editar os favoritos de um arquivo pdf, não necessariamente pelo pdftk?

Tim
fonte
1
Esta pequena ferramenta gráfica funcionou para mim. (PDF Mod 0.9.1) apps.fedoraproject.org/packages/pdfmod
abhijit

Respostas:

12

Parece-me que da versão 1.45 (06-12-2012), o pdftk permite a modificação de indicadores por meio do comando update_info:

Agora você pode adicionar ou alterar os favoritos de um PDF usando update_info.

via: http://www.pdflabs.com/docs/pdftk-version-history/

user37186
fonte
3
Isso funcionou muito bem para mim. Deve-se adicionar isso no arquivo de entrada acima das BookmarkBegintags antes que cada entrada de marcador esteja ausente.
Danielp 21/07
4

O jPDFtweak (Java, portanto, é executado no Unix / Linux) pode alterar os favoritos, mas não sei se você pode criar um script com ele.

Para scripts, eu acho que sua única opção nativa Unix / Linux seria pdflatex com o pacote pdfpages. Mas essa é uma curva de aprendizado se você ainda não é usuário do LaTeX.

EDIT: Na verdade, pode ser possível com o ghostscript: Veja aqui ou aqui ou aqui

frabjous
fonte
4

Se você ainda se apegar a esses scripts unix, então

  1. extrair dados de favoritos despejados de pdftk
  2. escreva um script extra para converter dados de favoritos despejados em formato pdfmarks, que comando ghostscript gsé aceito.
  3. use o gsscript para mesclá-los com o pdfmarks

Dê uma olhada em http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/, o script pdf-merge.pyfaz exatamente o que você (ou eu) deseja.

pdf-merge.py --output=merged.pdf input1.pdf input2.pdf

Algumas pequenas melhorias podem ser feitas em seu script

  1. manuseio unicode
  2. saída de arquivos favoritos, para que as pessoas possam ajustá-lo também

De qualquer forma, deve funcionar

larrycai
fonte
Um voto positivo! Obrigado! Estou ansioso pelo seu script!
Tim
Parece que o link não está funcionando. Você pode consertar isso por favor?
Monitor de peixe
4

O pdftk é definitivamente a ferramenta certa (com a sintaxe correta):

BookmarkBegin
BookmarkTitle: Chapter 1
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Paragraph 1.1
BookmarkLevel: 2
BookmarkPageNumber: 1
carlo
fonte
2

Caleb,

Tanto quanto eu entendo, os favoritos de acordo com as especificações do PDF não podem ser injetados por meio de uma ferramenta de diagnóstico como pdftk. Atualizar os metadados para se referir a capítulos e âncoras de aterrissagem de marcadores que não existem definitivamente não funcionará, pode até tornar seu PDF inconsistente ou não aberto.

Acabei usando as bibliotecas java + iText para fazer o que você está sugerindo, de acordo com este tutorial , mas estamos lidando com centenas de pdfs diariamente, por isso precisava ser automatizado. Se você estiver realizando uma única ação, o Adobe Acrobat deverá conseguir fazer isso.

r00fus
fonte
2

Para resumir todas essas boas respostas:

um projeto bmconverter no GitHub que pode converter vários formatos de favoritos em PDF. Ele pode converter a saída do pdftk para o formato jpdftweak, embora se você usar o jpdftweak, não será necessário converter a saída do pdftk para o csv, pois você pode fazer todo o trabalho no jpdftweak.

Infelizmente, o pdfmarks não é suportado pelo projeto, mas, felizmente, alguém postou um script nos problemas do bmconverter que podem converter a saída do pdftk em pdfmarks. A opção de lote ghostscript é uma opção

zetah
fonte
2

pdftkformato de marcador é um pouco tedioso para escrever. Em vez disso eu criei o meu próprio script usando bash, sed, pdftke python3. Confira neste repositório: https://github.com/SiddharthPant/booky

Então agora eu posso criar um arquivo de texto ( bkmrks.txt) como este, que leva apenas 5 minutos para escrever, mesmo para um pdf de 1000 páginas.

{
  Title1, 1
  Title2, 2
  {
    Subtitle1, 3
    Subtitle2, 4
    {
      SubSubtitle1, 5
      ...
    }
  }
}

e depois usar meu script

./booky.sh pdf_file.pdf bkmrks.txt

isso cria automaticamente um pdf ( pdf_file_new.pdf) que contém meus favoritos.

Siddharth Pant
fonte
1

Basta adicionar BookmarkBeginantes de cada entrada de marcador, como em

BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
    ⋮
tofleplof
fonte
0

O redirecionamento usado na etapa 1 fará com que o update_info não funcione corretamente. Você precisa especificar o arquivo de saída para pdftk:

pdftk in.pdf dump_data output in.info

Veja esta resposta de uma pergunta semelhante: /programming//a/30308964/3158933

Os arquivos que eu criei usando um redirecionamento têm um tamanho de arquivo um pouco maior e fazem com que o pdftk emita uma mensagem "Aviso: caso inesperado 1 em LoadDataFile (); continuação" ao executar o comando update_info.

Bartimeu
fonte