Come conservare i segnalibri quando riordini le pagine di un file PDF con strumenti come pdftk?


12

Sto usando pdftkper riorganizzare le pagine di un file pdf con segnalibri / contorni, ma successivamente il file di output ha perso i segnalibri dell'originale.

Il mio comando è pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf.

Mi chiedevo come avrei potuto conservare i segnalibri mentre riordinavo le pagine?

Risposte:


10

Ecco una soluzione funzionante. Tuttavia dovrai adattarlo alle tue esigenze.

Nel mio esempio ho rimosso la prima pagina di un PDF e quindi ho dovuto aggiornare i segnalibri per puntare alle posizioni corrette.

  1. rimuovere la pagina 1 da in.pdf:

    pdftk A=in.pdf cat A2-end output temp.pdf
    
  2. crea un file in.info da in.pdf:

    pdftk in.pdf dump_data > in.info
    
  3. in.info deve essere corretto nel mio caso, poiché rimuoverò una pagina.

    Quindi, ho bisogno di ridurre BookmarkPageNumber di uno affinché i segnalibri conducano alle pagine corrette.

    codice 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. creare il out.pdf finale:

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

testato lavorando su debian usando pdftk 2.01


1
Ha funzionato anche per me. Forse potresti aggiungere un suggerimento su come eseguire il tuo script (non #!/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)
ho

6

Devi fare pdftk in.pdf dump_data > in.info, quindi aggiungi il update_infoparametro durante la generazione di out.pdf. Citando da man pdftk:

update_info <info data filename | - | PROMPT>

Modifica i metadati memorizzati in un singolo dizionario di informazioni PDF in modo che corrispondano al file di dati di input. Il file di dati di input utilizza la stessa sintassi dell'output di dump_data. I caratteri non ASCII devono essere codificati come entità numeriche XML. Questo non cambia i metadati memorizzati nel flusso XMP del PDF, se ne ha uno. Per esempio:

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

  update_info_utf8 <info data filename | - | PROMPT>

Come update_info tranne per il fatto che l'input è codificato come UTF-8.


Grazie! Come devo ottenere questo file "in.info"?
Tim

@Tim: modificato. Spero sia chiaro adesso. Devi usare dump_data_utf8per update_info_utf8lavorare, ovviamente.
Philomath,

3
Grazie! Non funziona ancora. I miei comandi sono in tre fasi: 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.pdfci sono ancora i segnalibri in out1.pdf. `
Tim

@Tim posso confermare che questo in effetti non funziona. Hai trovato qualche soluzione a questo per caso?
Glutanimate,

1
Il mio rapido strascico di Google suggerisce che i segnalibri non sono gestiti affatto.
vonbrand,

5

Leggendo la pagina man con cura, si dice che update_infoprende i dati in qualunque formato dump_datageneri. Questo presumibilmente dovrebbe essere regolato in base al riordino della pagina. Non sembra impossibile , ma automatico non lo è.

Il sito PDFtk fornisce solo il risultato sopra riportato e la creazione / modifica dei segnalibri come risultati. Tutto ciò che Google conosce sulla questione dei segnalibri in PDF e della riorganizzazione, sono i successi delle operazioni di cui sopra e le esposizioni liriche sulle meraviglie che offrono e questa discussione ;-).

Quindi sembra che non si possa fare. I commenti suggeriscono alcune possibilità, che non ha funzionato quando provato.


1

"pdfmod" è un semplice strumento grafico che consente di rimuovere una o più pagine di modalità da un PDF esistente. È solo questione di pochi clic. Conserva inoltre le informazioni sul contenuto e il collegamento incrociato nel pdf.

"pdftk" funziona bene e lo stavo usando da molto tempo ma perdevo il contenuto dopo aver rimosso una o due pagine dal pdf. Quei file pdf che sono testati in "pdftk" e "pdfmod" sono creati da openoffice.

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


pdfmodsembra meglio di pdftkquando si tratta di preservare i metadati. Un diff di exiftooloutput mostra che pdfmodconserva i metadati, ma pdftknon conserva tutto, anche se si utilizza dump_data_utf8& update_info_utf8.
user1338062
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.