Come importre, esportre e modificare i segnalibri di un file pdf?

Ho sentito che i segnalibri di un file pdf sono memorizzati in text normale da qualche parte nel file. Mi stavo chiedendo se è ansible importre ed esportre segnalibri di un file PDF in e da un file di text, per l'elaborazione in batch?

Se sì, esiste una descrizione della syntax per la modifica del file di text contenente i segnalibri di un file pdf?

Speravo le soluzioni software libere per Ubuntu 10.10 e per Windows 7.

Grazie e saluti!

C'è una grande varietà di strumenti che possono estrarre i segnalibri da un pdf a un file di text normale e viceversa. Ad esempio, è ansible utilizzare pdftk , la toolbox iText (solo versioni precedenti, get itext-2.0.1.jar ), il mio strumento pdfWritebookmarks e i manuali JPdfBookmarks che hanno anche una GUI.

Ho uno script che può convertire tra i formati di molti di questi strumenti: bmconverter.py .

Un altro modo molto bello è aggiungere dei segnalibri a un pdf tramite pdflatex .

Puoi usare pdftk per questo. Per maggiori informazioni vai qui .

Esegui i segnalibri PDF nella row di command come questo:

 pdftk C:\Users\Sid\Desktop\doc.pdf dump_data output C:\Users\Sid\Desktop\doc_data.txt 

Importre i segnalibri PDF da un file di dati come questo:

 pdftk C:\Users\Sid\Desktop\doc.pdf update_info C:\Users\Sid\Desktop\doc_data.txt output C:\Users\Sid\Desktop\updated.pdf 

pdftk formato del bookmark pdftk è un po 'noioso da scrivere. Invece ho creato il mio script usando bash , sed , pdftk e python3 . Controlla in questo repo: https://github.com/SiddharthPant/booky

Così ora posso creare un file di text ( bkmrks.txt ) come questo, che impiega solo 5 minuti per scrivere anche per un pdf di 1000 pagine.

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

e quindi utilizzare il mio script

 ./booky.sh pdf_file.pdf bkmrks.txt 

questo crea automaticamente un pdf ( pdf_file_new.pdf ) che contiene i miei segnalibri.

Questo funziona in sisthemes * nix se invece sei su una macchina Windows. Quindi prima installare python3 e pdftk solo utilizzare il file booky.py nel repo per convertire bkmrks.txt in formato pdftk compatibile

 python3 booky.py < bkmrks.txt > output.txt 

quindi utilizzare il command di esportzione per generare un file di dati in modalità di dumping. Rimuovere i segnalibri precedenti da quel file e inserire il contenuto di output.txt invece utilizzando una semplice copia di copia. E poi importre questi dati.

Se si dispone di una versione di un documento che contiene i segnalibri e li desidera copiare, un modo molto più semplice è quello di utilizzare PDF-XChange Viewer (ho usato v2.5.211). Apri il PDF con i segnalibri (il PDF di origine), seleziona tutti i segnalibri nel riquadro dei segnalibri, li copia usando Ctrl + C, apri il PDF che non dispone dei segnalibri (il PDF di destinazione) e incolla (Ctrl + V) nel riquadro dei segnalibri del PDF. PDF-Xchange Viewer conserva le properties; del bookmark in quanto provenite dal PDF di origine (incluse tutte le formattazioni in grassetto / corsivo sul text del segnalibro). Se per alcune ragioni alcune delle sezioni del PDF di destinazione sono più basse o superiori a causa delle revisioni eseguite sul documento, è ansible fare clic sul segnalibro che necessita di correzione, scorrere fino a where si desidera aprire la pagina desiderata, fai nuovamente clic sul segnalibro e fai clic su "Imposta destinazione". Ripetere questa ultima parte come necessario per qualsiasi segnalibro offensivo. Salva il PDF di destinazione al termine.

Questo mi ha fatto grande, era abbastanza intuitivo, e sono stato fatto in pochi minuti. Nel mio scenario particolare, un collaboratore aveva prodotto un documento molto lungo con Word per Mac che non disponeva di segnalibri. A causa della lunghezza del documento, volevo i segnalibri corrispondenti al profilo del documento. Potrei get Word for Windows per salvare il documento come PDF con i segnalibri, ma alcune differenze di formattazione tra Word per Windows e Word per Mac hanno abbandonato completamente il numero di pagine (in particolare, esistevano differenze nello spazio bianco intorno ai piè di pagina e le differenze nella spaziatura tra le figure e la didascalia). Sono riuscito a giocare con le intestazioni e piè di pagina e le size delle figure per get la corrispondenza corretta in Word per Windows, quindi salvato in PDF con i segnalibri. Purtroppo, ci sono state alcune differenze nella formattazione in modo che desidero applicare solo i segnalibri al PDF originale e questo è quando ho capito la soluzione di cui sopra.

La specifica per i file PDF è disponibile come PDF liberamente scaricabile da Adobe – o alless è stata l'ultima volta che ho controllato. Tuttavia, la maggior parte dei file PDF hanno i dati più compressibili in essi compressi. Probabilmente era una volta una volta una versione fondamentale di PDF, e se così sarà ancora valida, ma in realtà get un file in quella forma può essere un problema.

Anche se non l'ho fatto, una probabilità molto probabile (se sei disposta a pagare) è quella di acquistare Acrobat Pro e di utilizzare le abilità di scripting Javascript integrate in quella applicazione. Per farti iniziare …

http://acrobatusers.com/tutorials/2008/10/auto_bookmark_creation

Questo tutorial mostra come creare automaticamente i segnalibri utilizzando Javascript in Acrobat 7.0 Pro (la versione inclusa in Creative Suite CS2). Anche se questo è un po 'vecchio, la stessa tecnica dovrebbe funzionare bene per nuove versioni.

Le applicazioni Adobe includono una libreria per la lettura / scrittura di file di text utilizzando Javascript (qualcosa che Javascript non ha come standard), quindi è ansible scrivere i propri script di importzione / esportzione, anche se non banale per rendere questi script robusti.

Ho trovato un'altra soluzione piuttosto "stupida" per copiare tutti i segnalibri in un PDF come text da utilizzare altrove. In Acrobat Pro (per Mac OS) non è ansible scegliere tutti i segnalibri e copiare / incollarli in un Wordprocessr. È comunque ansible esportre l'integer PDF come file HTML con l'opzione "una singola pagina HTML + aggiungere navigazione a base di segnalibri". Quindi apri l'HTML in un browser, seleziona tutto il text nel frame di navigazione e lo copia / incolla in un Wordprocessr …

Per leggere tutti i segnalibri da un file PDF a un file di text, è ansible utilizzare questo command con pdftk :

 pdftk input.pdf dump_data output output.txt 

Ho quindi usato regex su Notepad ++ per rimuovere le parti extra. Di seguito sono stato sostituito da una string vuota (in ordine) e poi ho finito con un elenco di segnalibri (non dimenticare di sostituire con regex nell'editor di text):

 BookmarkLevel.* BookmarkPageNumber.* BookmarkBegin.* \n\s+\n 

Se si desidera rimuovere i numbers, sostituire questa espressione:

 BookmarkTitle: A8.\d.\d+\s