Adicione e edite marcadores em pdf

21

Ao obter metadados de alguns arquivos PDF com marcadores por pdftk , observo o formato de marcadores em metadados em PDF. Então, estou supondo que, com pdftk , é 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 marcadores, se houver) de um pdf arquivo em um arquivo de texto por pdftk in.pdf dump_data > in.info .
  2. Em seguida, adiciono alguns marcadores 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 em pdftk in.pdf update_info in.info output out.pdf .

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

Se eu obtiver os metadados do novo arquivo PDF out.pdf by pdftk out.pdf dump_data > out.info , não haverá marcadores em out.info . Parece que os favoritos não foram adicionados com sucesso.

Eu queria saber se existem alguns erros? Como devo adicionar e editar marcadores de um arquivo pdf, não necessariamente pelo pdftk?

    
por Tim 20.07.2011 / 19:26

8 respostas

12

Parece-me que a partir da versão 1.45 (2012-12-06), o pdftk permite a modificação de marcadores através do comando update_info:

You can now add or change a PDF’s bookmarks using update_info.

via:    link

    
por 15.04.2013 / 05:58
4

jPDFtweak (Java, então roda no Unix / Linux) pode alterar marcadores, mas eu não sei se você pode escrever qualquer coisa com isso.

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

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

    
por 12.08.2011 / 02:00
4

Se você continuar com esses scripts unix,

  1. extrair dados de favoritos descartados de pdftk
  2. escreva um script extra para converter os dados do marcador despejado para o formato pdfmarks, cujo comando gs do ghostscript é aceito.
  3. use o script gs para mesclá-los com os pdfmarks

Dê uma olhada no link que o script pdf-merge.py faz 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. manipulação de unicode
  2. gera arquivos de favoritos, para que as pessoas possam ajustá-los também

De qualquer forma, deve funcionar

    
por 07.02.2012 / 04:12
3

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
    
por 27.05.2015 / 12:40
2

Caleb,

Pelo que entendi, os marcadores de acordo com a especificação 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 marcadores que não existem definitivamente não funcionará, pode até tornar seu PDF inconsistente ou inatingível.

Acabei usando as bibliotecas java + iText para fazer o que você está sugerindo, conforme este tutorial , mas estamos lidando com centenas de pdfs diariamente, por isso precisava ser automatizado. Se você estiver fazendo uma única vez, o Adobe Acrobat deve ser capaz de fazer isso.

    
por 12.08.2011 / 01:41
2

Para resumir todas essas boas respostas:

Existe o projeto bmconverter no GitHub que pode converter vários formatos de marcadores PDF. Ele pode converter a saída pdftk para o formato jpdftweak, embora se você usar o jpdftweak, você não precisará converter a saída pdftk para csv, pois você pode fazer todo o trabalho de dentro do jpdftweak.

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

    
por 19.04.2012 / 11:45
2

pdftk formato de marcador é um pouco tedioso para escrever. Em vez disso, criei meu próprio script usando bash , sed , pdftk e python3 . Confira neste repo: link

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

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

e depois use meu script

./booky.sh pdf_file.pdf bkmrks.txt

isso cria automaticamente um pdf ( pdf_file_new.pdf ) que tem meus favoritos nele.

    
por 23.02.2016 / 13:19
1

Basta adicionar BookmarkBegin antes de cada entrada de marcador, como em

BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
    ⋮
    
por 30.06.2015 / 02:03

Tags