Como preservar os favoritos ao reorganizar as páginas de um arquivo PDF com ferramentas como o pdftk?

12

Estou usando pdftkpara reorganizar as páginas de um arquivo PDF com marcadores / contornos, mas depois disso, o arquivo de saída perdeu os marcadores do original.

Meu comando é pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf.

Eu queria saber como eu poderia manter os marcadores enquanto reorganizava as páginas?

Tim
fonte

Respostas:

9

Aqui está uma solução funcional. No entanto, você precisará ajustá-lo para atender às suas necessidades.

No meu exemplo, removi a primeira página de um PDF e precisei atualizar os indicadores para apontar para os locais corretos.

  1. remova a página 1 do arquivo in.pdf:

    pdftk A=in.pdf cat A2-end output temp.pdf
    
  2. crie um arquivo in.info a partir de in.pdf:

    pdftk in.pdf dump_data > in.info
    
  3. O in.info precisa ser corrigido no meu caso, pois removerei uma página.

    Assim, preciso diminuir o BookmarkPageNumber em um para que os indicadores levem às páginas corretas.

    código php:

    $file = "in.info";
    $data = file_get_contents($file);
    
    foreach (explode("\n", $data) as $row) {
        $tmp = explode(": ", $row);
    
        if ($tmp[0] == "BookmarkPageNumber") {
            if ($tmp[1] != "1") $tmp[1]--;
            echo $tmp[0].": ".$tmp[1]."\n";
        } else {
            echo $row."\n";
        }
    }
    
  4. create final out.pdf:

    pdftk temp.pdf update_info in2.info output out.pdf
    

testado trabalhando no debian usando o pdftk 2.01

Martin Olika
fonte
1
Trabalhou para mim também. Talvez você possa adicionar uma dica sobre como executar seu script (não faz ideia de como ...) ou adicionar um script python:#!/usr/bin/python output = open('res.info','w') with open('temp.info','r') as f: for line in f: if line.startswith("BookmarkPageNumber"): output.write( "BookmarkPageNumber: "+ str(int(line.split()[1])+1)+"\n") else: output.write(line)
Vser
6

Você precisa fazer pdftk in.pdf dump_data > in.info, em seguida, adicione o update_infoparâmetro ao gerar o out.pdf. Citação de man pdftk:

update_info <info data filename | - | PROMPT>

Altera os metadados armazenados no dicionário de informações de um único PDF para corresponder ao arquivo de dados de entrada. O arquivo de dados de entrada usa a mesma sintaxe que a saída de dump_data. Caracteres não ASCII devem ser codificados como entidades numéricas XML. Isso não altera os metadados armazenados no fluxo XMP do PDF, se houver um. Por exemplo:

             pdftk in.pdf update_info in.info output out.pdf

  update_info_utf8 <info data filename | - | PROMPT>

O mesmo que update_info, exceto que a entrada é codificada como UTF-8.

Philomath
fonte
Obrigado! Como obtenho esse arquivo "in.info"?
Tim
@ Tim: editado. Espero que esteja claro agora. Você precisa usar dump_data_utf8para update_info_utf8trabalhar, é claro.
Philomath
3
Obrigado! Ainda não funciona. Meus comandos estão em três etapas: pdftk in.pdf dump_data > in.info, pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdfe pdftk out.pdf update_info in.info output out1.pdfAinda não há favoritos no out1.pdf. `
Tim
@ Tim, posso confirmar que isso realmente não funciona. Você encontrou alguma solução para isso por acaso?
Glutanimate
1
Minha pesquisa superficial no Google sugere que os favoritos não são manipulados.
vonbrand
5

Lendo a página de manual com cuidado, ele diz que update_infoaceita dados em qualquer formato dump_datagerado. Presumivelmente, isso teria que ser ajustado de acordo com a página aleatória. Não parece impossível , mas automático não é.

O site PDFtk fornece apenas o resultado acima e a criação / edição de marcadores como resultados. Todo o Google sabe sobre a questão dos marcadores em PDF e da reorganização, são hits nas operações acima e exposições líricas sobre as maravilhas que eles oferecem, e este tópico ;-).

Então parece que não pode ser feito. Os comentários sugerem algumas possibilidades, que não funcionaram quando tentadas.

vonbrand
fonte
1

"pdfmod" é uma ferramenta gráfica simples que permite remover uma ou páginas de modo de um PDF existente. É apenas uma questão de alguns cliques. Ele também preserva as informações do conteúdo e a reticulação no pdf.

O "pdftk" funciona bem e eu o uso há muito tempo, mas perdia o conteúdo depois de remover uma ou duas páginas do pdf. Os arquivos pdf testados em "pdftk" e "pdfmod" são criados no openoffice.

https://apps.fedoraproject.org/packages/pdfmod

abhijit
fonte
pdfmodparece melhor do que pdftkquando se trata de preservar metadados. Um diff de exiftoolsaída mostra que pdfmodpreserva os metadados, mas pdftknão preserva tudo, mesmo se você usar dump_data_utf8& update_info_utf8.
user1338062