Adiciona TOC ao PDF do arquivo XML / JSON /?

2

Atualmente, tenho um arquivo PDF sem qualquer ToC (por exemplo, no aplicativo Preview.app do Mac, não consigo ver o ToC na barra lateral).

Mas eu tenho o TOC no formato XML, onde há um título e um pagenumber onde essa seção começa.

Existe alguma maneira de adicionar esse TOC ao meu arquivo PDF de uma maneira em lote?

Como tenho o TOC em XML, basicamente posso analisá-lo de qualquer maneira possível, portanto, se houvesse uma linha de comando para adicionar um item de sumário a um PDF, eu também poderia fazer isso.

Alguma idéia?

    
por Trolley 08.11.2013 / 14:22

2 respostas

1

É bastante simples adicionar marcadores a um PDF usando o Ghostscript . A sintaxe é:

gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=out.pdf in.pdf pdfmarks

Onde pdfmarks é um arquivo de texto com conteúdo como:

[/Title (Title Page) /Page 1 /OUT pdfmark
[/Title (Table of Contents) /Page 3 /OUT pdfmark
...

Para níveis aninhados, use o atributo / Count. Por exemplo:

[/Count 3 /Title (Chapter 1) /Page 1 /OUT pdfmark
[/Count -2 /Title (Section 1.1) /Page 2 /OUT pdfmark
[/Title (Section 1.1.1) /Page 3 /OUT pdfmark
[/Title (Section 1.1.2) /Page 4 /OUT pdfmark
[/Count -1 /Title (Section 1.2) /Page 5 /OUT pdfmark
[/Title (Section 1.2.1) /Page 6 /OUT pdfmark
[/Title (Section 1.3) /Page 7 /OUT pdfmark

O argumento para / Count fornece o número de marcadores imediatamente subordinados. O sinal do argumento define a exibição padrão (negativo para fechado, positivo para aberto).

Se os marcadores não forem suficientes como um Índice, existem aplicativos que crie um índice a partir de marcadores. Eu não usei nada disso, mas googling apareceu por exemplo, o TOCBuilder da Mapsoft, que é um plug-in comercial do Adobe Acrobat com avaliação.

Fontes:
marcadores PDF com Ghostscript
Como gerar marcadores via ghostscript / pdfwrite / pdfmark

    
por 11.11.2013 / 18:16
0

Se você tiver apenas um arquivo, aqui está uma maneira de fazer isso usando pdfTeX . Pode ser um pouco complicado, mas eu conheço o TeX (e não conheço outras ferramentas) e ele faz o truque quando eu preciso dele.

Aqui está um arquivo de amostra que copiará todo o conteúdo de seu input.pdf e adicionará um Índice contendo links para alguns números de página.

% Set page size... this is A4, change to whatever you need
\pdfpagewidth=210mm
\pdfpageheight=297mm

% TeX always adds unwanted 1in left and top margins, this counteracts them.
\advance\hoffset by -1in
\advance\voffset by -1in

% This macro inserts a verbatim copy of one page from the source into the output.
\def\copypage#1{%
  \pdfximage page #1 {input.pdf}%
  \shipout\vbox{\pdfrefximage\pdflastximage}}

% Determine the total number of pages
\pdfximage{input.pdf}
\newcount\total
\total=\pdflastximagepages

% Define an iterator to copy the whole file
\def\copy{%
  \copypage{\the\pageno} % Copy the page given by current page number
  \advance\pageno by 1 % Increase page number by one
  \ifnum\pageno > \total
    \let\copy\relax % After the last page has been copied, stop
  \fi
  \copy} % This repeats the cycle until \copy is redefined to \relax at the very end

\copy % Run the cycle

% Here you add your outline
\pdfoutline goto page 1 {/Fit} count 2 {Chapter}
  \pdfoutline goto page 1 {/Fit} count -3 {Section}
    \pdfoutline goto page 1 {/Fit} {Item}
    \pdfoutline goto page 2 {/Fit} {Item}
    \pdfoutline goto page 3 {/Fit} {Item}
  \pdfoutline goto page 4 {/Fit} count 1 {Section}
    \pdfoutline goto page 4 {/Fit} count -2 {Subection}
      \pdfoutline goto page 1 {/Fit} {Item}
      \pdfoutline goto page 5 {/Fit} {Item}

\end

Como usar o comando \pdfoutline :

  • Sempre forneça um número de página, mesmo para cabeçalhos de seção que talvez não devam ser usados diretamente
  • Substitua "Capítulo", "Item" etc. pelos cabeçalhos desejados
  • Forneça uma contagem para itens que contenham subitens (note que não há comando "closing" para que o TeX precise saber a contagem antecipadamente)
  • EDITAR graças ao harrymc: Torne a contagem negativa se você quiser que um item com subitens seja fechado por padrão, deixe-o positivo se você quiser abri-lo

Após preparar este arquivo de entrada, salve-o como, por exemplo, output.tex e processe-o usando pdftex . Voilà, isso produz output.pdf com seu novo ToC brilhante.

    
por 11.11.2013 / 01:45

Tags