Wie kann ich Lesezeichen erhalten, wenn ich Seiten einer PDF-Datei mit Tools wie pdftk neu anordne?

12

Ich verwende, pdftkum Seiten einer PDF-Datei mit Lesezeichen / Konturen neu anzuordnen, aber danach hat die Ausgabedatei die Lesezeichen des Originals verloren.

Mein Befehl ist pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf.

Ich habe mich gefragt, wie ich die Lesezeichen behalten kann, während ich die Seiten neu anordnete.

Tim
quelle

Antworten:

9

Hier ist eine funktionierende Lösung. Sie müssen es jedoch an Ihre Bedürfnisse anpassen.

In meinem Beispiel habe ich die erste Seite einer PDF-Datei entfernt und anschließend die Lesezeichen aktualisiert, um auf die richtigen Positionen zu verweisen.

  1. Seite 1 aus in.pdf entfernen:

    pdftk A=in.pdf cat A2-end output temp.pdf
    
  2. Erstellen Sie eine in.info-Datei aus in.pdf:

    pdftk in.pdf dump_data > in.info
    
  3. in.info muss in meinem Fall korrigiert werden, da ich eine Seite entfernen werde.

    Daher muss ich BookmarkPageNumber um eins verringern, damit die Lesezeichen zu den richtigen Seiten führen.

    PHP-Code:

    $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. erstelle final out.pdf:

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

getestet auf debian mit pdftk 2.01

Martin Olika
quelle
1
Arbeitete auch für mich. Vielleicht könnten Sie einen Hinweis hinzufügen, wie Sie Ihr Skript ausführen (keine Ahnung, wie ...) oder ein Python-Skript hinzufügen:#!/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

Sie müssen dies tun pdftk in.pdf dump_data > in.infound dann den update_infoParameter hinzufügen , wenn Sie die generieren out.pdf. Zitat aus man pdftk:

update_info <info data filename | - | PROMPT>

Ändert die Metadaten, die im Info-Wörterbuch einer einzelnen PDF-Datei gespeichert sind, so, dass sie mit der Eingabedatendatei übereinstimmen. Die Eingabedatendatei verwendet dieselbe Syntax wie die Ausgabe von dump_data. Nicht-ASCII-Zeichen sollten als numerische XML-Entitäten codiert werden. Hierdurch werden die im XMP-Stream der PDF gespeicherten Metadaten (sofern vorhanden) nicht geändert. Beispielsweise:

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

  update_info_utf8 <info data filename | - | PROMPT>

Entspricht update_info mit der Ausnahme, dass die Eingabe als UTF-8 codiert ist.

Philomath
quelle
Vielen Dank! Wie soll ich diese Datei "in.info" bekommen?
Tim
@Tim: bearbeitet. Ich hoffe es ist jetzt klar. Sie müssen natürlich dump_data_utf8für update_info_utf8die Arbeit verwenden.
Philomath
3
Vielen Dank! Es funktioniert immer noch nicht. Meine Befehle sind in drei Schritten: pdftk in.pdf dump_data > in.info, pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdfund pdftk out.pdf update_info in.info output out1.pdfEs gibt noch keine Lesezeichen in out1.pdf. `
Tim
@Tim Ich kann bestätigen, dass dies in der Tat nicht funktioniert. Haben Sie zufällig eine Lösung dafür gefunden?
Glutanimate
1
Mein oberflächliches Google-Trawling weist darauf hin, dass Lesezeichen überhaupt nicht verarbeitet werden.
Vonbrand
5

Beim sorgfältigen Lesen der Manpage heißt es, dass update_infoDaten in dem von ihnen dump_dataerzeugten Format abgelegt werden. Das müsste wohl entsprechend dem Seiten-Shuffling angepasst werden. Klingt nicht unmöglich , ist es aber nicht automatisch.

Die PDFtk-Site gibt nur den oben genannten Treffer und das Erstellen / Bearbeiten von Lesezeichen als Ergebnisse aus. Alles, was Google über das Thema Lesezeichen in PDF und Reorganisation weiß, sind Treffer bei den oben genannten Operationen und lyrische Darstellungen der Wunder, die sie bieten, und dieser Thread ;-).

Es scheint also nicht möglich zu sein. Die Kommentare schlagen einige Möglichkeiten vor, die beim Ausprobieren nicht funktionierten.

vonbrand
quelle
1

"pdfmod" ist ein einfaches grafisches Tool, mit dem Sie eine oder mehrere Seiten aus einer vorhandenen PDF-Datei entfernen können. Es ist nur eine Frage von ein paar Klicks. Es behält auch die inhaltlichen Informationen und die Vernetzung im PDF bei.

"pdftk" funktioniert gut und ich habe es lange Zeit verwendet, aber ich habe Inhalte verloren, nachdem ich ein oder zwei Seiten aus dem PDF entfernt habe. Diejenigen PDF-Dateien, die in "pdftk" und "pdfmod" getestet wurden, werden von openoffice erstellt.

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

abhijit
quelle
pdfmodscheint besser zu sein, als pdftkwenn es darum geht, Metadaten zu erhalten. Ein Unterschied in der exiftoolAusgabe zeigt, dass pdfmoddie Metadaten erhalten bleiben, aber pdftknicht alles erhalten bleibt, selbst wenn Sie dump_data_utf8& verwenden update_info_utf8.
user1338062