Como alterar os números das páginas internas nos metadados de um PDF?

30

Eu tenho um documento em pdf que criei por meio não-Acrobat (imprimindo em pdf e mesclando vários PDFs), mas gostaria de alterar manualmente os números de página (ou seja, as primeiras páginas são simplesmente páginas de título, a página que está rotulada "página 1" é realmente a sétima folha do pdf). Qual é a maneira mais simples (e idealmente gratuita) de fazer isso?

Para ser claro, não estou tentando alterar os números nas próprias páginas, mas os números de página nos "metadados" que o pdf armazena (as páginas em si já estão numeradas corretamente; eu só quero "ir para a página 1 "para ir para a página rotulada 1, que poderia ser a folha 7).

Por que vale a pena, estou no Windows, embora eu tenha acesso a Macs também.

    
por YGA 13.01.2011 / 04:31

9 respostas

34

O que você deseja é de fato chamado rótulos de página e pode ser facilmente adicionado diretamente no código-fonte do PDF. Renomeie a extensão do arquivo de pdf para txt e abra o arquivo em um editor de texto (isso pode ser lento, dependendo do tamanho do arquivo, seja paciente). As informações sobre os rótulos das páginas são armazenadas em um nó chamado catálogo de documentos , que se parece com isso:

3 0 obj
<< /Type /Catalog
   /Pages 1 0 R
>>
endobj

Pode conter mais coisas confusas, mas essa é a estrutura básica. Existe apenas um catálogo, portanto, em um arquivo grande, você pode procurar o nó que contém /Catalog . Agora você pode fazer as alterações desejadas inserindo a entrada /PageLabels :

3 0 obj
<< /Type /Catalog
   /Pages 1 0 R
   /PageLabels << /Nums [ 0 << /P (cover) >>
                          % labels 1st page with the string "cover"
                          1 << /S /r >>
                          % numbers pages 2-6 in small roman numerals
                          6 << /S /D >>
                          % numbers pages 7-x in decimal arabic numerals
                        ]
               >>
>>
endobj

Existem 3 linhas começando com números, chamados índices de página . A página 1 tem o índice 0 , a página 2 o índice 1 e assim por diante. Eles sempre descrevem intervalos, portanto, a linha com 1 <<...>> se aplica a todas as páginas do índice 1 a 5 e a linha com 6 <<...>> se aplica a todas as páginas de 6 até a última página. Um rótulo para 0 <<...>> deve sempre ser definido.

Você pode encontrar mais informações sobre rótulos de página e código-fonte em PDF no padrão PDF ou em um wiki em padrões PDF.

    
por 30.05.2012 / 18:08
5

Se eu entendi corretamente, aqui está como deve funcionar:

gs \
  -o modified-pagelabels-50pages.pdf \
  -sDEVICE=pdfwrite \
  -c "[ /Page 1 /Label (i)     /PAGELABEL pdfmark" \
  -c "[ /Page 2 /Label (ii)    /PAGELABEL pdfmark" \
  -c "[ /Page 3 /Label (III)   /PAGELABEL pdfmark" \
  -c "[ /Page 4 /Label (four)  /PAGELABEL pdfmark" \
  -c "[ /Page 5 /Label (v)     /PAGELABEL pdfmark" \
  -c "[ /Page 6 /Label (|||||) /PAGELABEL pdfmark" \
  -f 50pages.pdf

No entanto, pareço lembrar que isso não funcionou de forma confiável ou completa na última vez em que tentei (cerca de 2 anos atrás).

ATUALIZAÇÃO: Minha memória não estava falhando comigo. Eu tentei novamente e enviei um relatório de bug para o Ghostscript ( bug 691889 ) sobre isso. Siga o link para o relatório de erros para ver os detalhes.

    
por 14.01.2011 / 18:22
1

Para remover os antigos, provavelmente a maneira mais fácil de multiplataforma é apenas cortar os antigos. Você poderia fazer isso, por exemplo, com o BRISS.

Adicionar os novos usando ferramentas gratuitas é mais complicado. Pessoalmente, eu provavelmente faria isso com o pdflatex, como em esta resposta do StackExchange , embora isso possa ser uma solução bastante envolvida, a menos que você tenha outros usos para o pdflatex.

Eu acho que isso pode ser feito, porém com jPdfTweak .

    
por 13.01.2011 / 05:07
1
O

jPdf Tweak é um utilitário gráfico de código aberto que permite editar etiquetas de páginas em arquivos PDF. A página documentação fornece instruções passo a passo.

    
por 15.08.2014 / 09:23
0

BeCyPDFMetaEdit link

Você pode adicionar / remover / alterar o esquema de números de página internos na guia "páginas" desta ferramenta freeware.

E tenha cuidado, o visualizador do PDF xchange não mostra o esquema do número da página e o foxitreader tem um resultado correto. Eu não testei o leitor Acrobat.

    
por 16.02.2014 / 10:06
0

O método dado por Dane H. funciona com o Acrobat Reader (ou, para ser preciso, a versão atual do Adobe Reader). Um ponto de menor importância a ser observado: o campo no topo só aceita 8 caracteres, então você não pode inserir algo como 'índice de assunto' nele se tal rótulo tiver sido usado. Mas você pode usar o item de menu Visualizar > Navegação da Página > Vá para ... ou o equivalente da chave.

Outra dica: a especificação pdf sempre atribui números de página consecutivamente, portanto, no caso de um documento produzido ao varrer pares de páginas, os dois conjuntos de números ficam fora de passo (a menos que você numerosamente cada página individualmente). Mas você pode, com pouco esforço, configurar seu documento para que a convenção "ir para a página n leva você às páginas 2n e 2n + 1" se aplica.

    
por 18.03.2014 / 13:39
0

A resposta dos dinamarqueses é a melhor, os formatos mudaram um pouco agora, isso pode ser útil:

%PDF-1.6

29241 0 obj

<</Metadata 1685 0 R/Outlines 29461 0 R/PageLabels<</Nums[0<</S/D>>3<</S/D/St 6>>4<</S/D/St 10>>5<</S/D/St 12>>15<</S/D/St 70>>16<</S/D/St 72>>17<</S/D/St 80>>18<</S/D/St 82>>19<</S/D/St 90>>23<</S/D/St 96>>25<</S/D/St 99>>29<</S/D/St 110>>31<</S/D/St 130>>32<</S/D/St 133>>35<</S/D/St 137>>36<</S/D/St 140>>37<</S/D/St 145>>39<</S/D/St 150>>40<</S/D/St 152>>42<</S/D/St 155>>43<</S/D/St 160>>46<</S/D/St 165>>47<</S/D/St 167>>48<</S/D/St 170>>49<</S/D/St 180>>50<</S/D/St 190>>52<</S/D/St 300>>53<</S/D/St 305>>54<</S/D/St 319>>56<</S/D/St 380>>57<</S/D/St 390>>58<</S/D/St 500>>67<</S/D/St 515>>68<</S/D/St 525>>70<</S/D/St 550>>71<</S/D/St 553>>72<</S/D/St 560>>73<</S/D/St 600>>76<</S/D/St 620>>78<</S/D/St 650>>82<</S/D/St 670>>85<</S/D/St 700>>95<</S/D/St 714>>117<</S/D/St 900>>162<</S/D/St 1000>>178<</S/D/St 1200>>209<</S/D/St 1500>>263<</S/D/St 1555>>270<</S/D/St 1563>>389<</S/D/St 1681>>522<</S/D/St 1813>>]>> /PageMode/UseOutlines/Pages 29177 0 R/Type/Catalog>>

endobj
    
por 24.06.2014 / 17:59
0

Descobri que a edição direta do arquivo (como descompactado pelo pdftk) não funciona se já houver '/ titles' definido na região '/ outlines'. A técnica de edição direta descrita em um post acima é demonstrada no Youtube: link

Mas o recurso 'update' do pdftk pode ser mais intuitivo (e mais confiável quando '/ titles' já existe na região '/ outlines' do arquivo PDF) através da edição do arquivo 'doc_data.txt' usado aqui: link

    
por 27.05.2018 / 19:48
0

NOTE: The accepted answer is still mostly correct, but has some gaps. It is lacking in that many PDF files are not directly editable as text. Even when they are, such editing can sometimes damage the PDF making it unreadable. One solution, that will work for both Unix and Microsoft Windows is qpdf which can translate PDF files into "QDF", a text-editable form which is still a valid PDF file. The qpdf package comes with fix-qdf that recalculates offsets after a QDF file has been edited to correct any damage.

COMO editar números de páginas PDF usando o Qpdf

Resumo:

  1. qpdf -qdf foo.pdf foo.qdf
  2. editar foo.qdf

     0 << >>           % No label on first pages
     6 << /S /D >>     % Start numbering from 7th page.
    
  3. fix-qdf foo.qdf >bar.qdf
  4. teste bar.qdf
  5. qpdf bar.qdf bar.pdf

Etapa 1.

Converta o documento no formato QDF facilmente editável. Execute qpdf na linha de comando da seguinte forma:

qpdf -qdf foo.pdf foo.qdf

Note: If you do not have qpdf installed already, Microsoft Windows executables can be downloaded from https://github.com/qpdf/qpdf/releases Unix systems, such as Ubuntu and Debian GNU/Linux can install it by typing apt install qpdf.

Etapa 2.

Edite o documento QDF usando um editor de texto, como o notepad ++, emacs ou gedit. Pesquise a palavra /Catalog e observe os < < colchetes angulares > > está dentro. Nas proximidades, você encontrará o atual /PageLabels ( se houver ).

Adicionaremos cada seção que deve ser numerada de maneira diferente ao /PageLabels . O formato é start-page < < style > & gt ;. Observe que o espaço em branco não importa e que a primeira página do documento é 0 . A menos que especificado de outra forma, uma nova seção sempre começa a numeração de páginas de 1.

Aqui está um exemplo completo de como o PageLabels pode parecer, com comentários adicionados:

/Type /Catalog
/PageLabels <<
  /Nums [
    0           % From the first page of the document,
      <<
        /S /r   % ...use the lowercase roman numeral style.
      >>
    6           % From seventh page onward,
      <<
        /S /D   % ...use ordinary digits (arabic numerals)
      >>
  ]
>>

Se o arquivo não tiver um PageLabels, adicione-o após /Type /Catalog . Por exemplo, pode-se mudar,

1 0 obj
<<
  …
  /Type /Catalog
>>
endobj

em

1 0 obj
<<
  … 
  /Type /Catalog
  /PageLabels
      << /Nums [
    0 << >>                 % No label for cover
    1 << /S /r >>           % i, ii for index
    3 << /S /D /St 15 >>    % 15, 16, 17, ... for article
    31 << /S /D /P (A-) >>  % A-1, A-2, A-3... for appendix
       ]
  >>
>>
endobj

A PARTIR DE UM NÚMERO DIFERENTE COM /St

Cada seção reinicia a numeração em 1, a menos que você diga de outra forma usando /St . Observe como no exemplo acima, a quarta página começa às 15.

USANDO UM ESTILO DIFERENTE COM /S

O operador /S usa um argumento que permite escolher o estilo de numeração

  • / D dígitos (1, 2, 3 ...)
  • / R maiúsculo Romano (I, II, III ...)
  • / r romana em minúsculas (i, ii, iii ...)
  • / Um alfabético em maiúsculas (A, B, C, ...., X, Y, Z, AA, AB, AC, ...)
  • / uma ordem alfabética minúscula (a, b, c, ...., x, y, z, aa, ab, ac, ...)

Se um omite o operador /S , essa seção de páginas não terá numeração. Por exemplo:

0 << >>         % No label for cover

COMO ADICIONAR UM PREFIXO A CADA PÁGINA COM /P

Você pode exibir qualquer sequência de texto antes do número da página, especificando uma palavra entre parênteses depois de /P :

  31
  <<
    /S /D
    /P (A-)     % label appendix pages A-1, A-2, A-3
  >>

A especificação de um prefixo sem um estilo ( /S ) fornecerá páginas com apenas a palavra sem qualquer número. Isso pode ser útil, por exemplo, se você quiser uma capa para simplesmente ter o rótulo "Capa".

     0 << /P (Cover) >>        % No number, just "Cover"

Etapa 3.

Execute fix-qdf para tornar as suas edições válidas em PDF e coloque a saída em bar.qdf.

fix-qdf foo.qdf > bar.qdf

Etapa 4.

Abra o bar.qdf no seu programa de visualização de PDF e verifique se ele está numerado corretamente.

Passo 5.

Converta o arquivo QDF de volta em um PDF normal, assim:

qpdf bar.qdf bar.pdf

Ta da. Você está feito. Agora você tem um documento com números de páginas corretamente rotulados em bar.pdf.

    
por 17.10.2018 / 15:41

Tags