GNU/Linux >> LINUX-Kenntnisse >  >> Linux

PDF nach Lesezeichen aufteilen?

Es gibt ein in Java geschriebenes Befehlszeilentool namens Sejda, in dem Sie den splitbybookmarks finden Befehl, der genau das tut, was Sie gefragt haben. Es ist Java, also läuft es unter Linux und da es sich um ein Befehlszeilentool handelt, können Sie dafür ein Skript schreiben.

Haftungsausschluss
Ich bin einer der Autoren


Sie haben Programme, die wie pdf-split gebaut sind und das für Sie erledigen können:

A-PDF Split ist ein sehr einfaches, blitzschnelles Desktop-Dienstprogramm, mit dem Sie jede Acrobat-PDF-Datei in kleinere PDF-Dateien aufteilen können. Es bietet vollständige Flexibilität und Benutzerkontrolle in Bezug darauf, wie Dateien geteilt werden und wie die geteilten Ausgabedateien eindeutig benannt werden. A-PDF Split bietet zahlreiche Alternativen für die Aufteilung Ihrer großen Dateien – nach Seiten, Lesezeichen und ungeraden/gerade Seiten. Sie können sogar einen Teil einer PDF-Datei extrahieren oder entfernen. A-PDF Split bietet auch erweiterte definierte Splits, die gespeichert und später für die Verwendung mit sich wiederholenden Aufgaben zum Teilen von Dateien importiert werden können. A-PDF Split stellt die ultimative Flexibilität beim Aufteilen von Dateien dar, um allen Anforderungen gerecht zu werden.

A-PDF Split arbeitet mit passwortgeschützten PDF-Dateien und kann verschiedene PDF-Sicherheitsfunktionen auf die geteilten Ausgabedateien anwenden. Bei Bedarf können Sie die generierten geteilten Dateien mit anderen PDF-Dateien mithilfe eines Dienstprogramms wie A-PDF Merger neu kombinieren, um neue zusammengesetzte PDF-Dateien zu erstellen.

A-PDF Split erfordert KEIN Adobe Acrobat und erstellt Dokumente, die mit Adobe Acrobat Reader Version 5 und höher kompatibel sind.

bearbeiten*

Hier finden Sie auch ein kostenloses Open-Source-Programm, wenn Sie nicht bezahlen möchten.


Hier ist ein kleines Perl-Programm, das ich für diese Aufgabe verwende. Perl ist nichts Besonderes; es ist nur ein Wrapper um pdftk, um dessen dump_data zu interpretieren Ausgabe, um sie in Seitenzahlen umzuwandeln, die extrahiert werden sollen:

#!perl
use v5.24;
use warnings;

use Data::Dumper;
use File::Path qw(make_path);
use File::Spec::Functions qw(catfile);

my $pdftk = '/usr/local/bin/pdftk';
my $file = $ARGV[0];
my $split_dir = $ENV{PDF_SPLIT_DIR} // 'pdf_splits';

die "Can't find $ARGV[0]\n" unless -e $file;

# Read the data that pdftk spits out.
open my $pdftk_fh, '-|', $pdftk, $file, 'dump_data';

my @chapters;
while( <$pdftk_fh> ) {
    state $chapter = 0;
    next unless /\ABookmark/;

    if( /\ABookmarkBegin/ ) {
        my( $title ) = <$pdftk_fh> =~ /\ABookmarkTitle:\s+(.+)/;
        my( $level ) = <$pdftk_fh> =~ /\ABookmarkLevel:\s+(.+)/;

        my( $page_number ) = <$pdftk_fh> =~ /\BookmarkPageNumber:\s+(.+)/;

        # I only want to split on chapters, so I skip higher
        # level numbers (higher means more nesting, 1 is lowest).
        next unless $level == 1;

        # If you have front matter (preface, etc) then this numbering
        # will be off. Chapter 1 might be called Chapter 3.
        push @chapters, {
            title         => $title,
            start_page    => $page_number,
            chapter       => $chapter++,
            };
        }
    }

# The end page for one chapter is one before the start page for
# the next chapter. There might be some blank pages at the end
# of the split for PDFs where the next chapter needs to start on
# an odd page.
foreach my $i ( 0 .. $#chapters - 1 ) {
    my $last_page = $chapters[$i+1]->{start_page} - 1;
    $chapters[$i]->{last_page} = $last_page;
    }
$chapters[$#chapters]->{last_page} = 'end';

make_path $split_dir;
foreach my $chapter ( @chapters ) {
    my( $start, $end ) = $chapter->@{qw(start_page last_page)};

    # slugify the title so use it as a filename
    my $title = lc( $chapter->{title} =~ s/[^a-z]+/-/gri );

    my $path = catfile( $split_dir, "$title.pdf" );
    say "Outputting $path";

    # Use pdftk to extract that part of the PDF
    system $pdftk, $file, 'cat', "$start-$end", 'output', $path;
    }

pdftk kann verwendet werden, um die PDF-Datei aufzuteilen und die Seitenzahlen der Lesezeichen zu extrahieren.

Um die Seitenzahlen der Lesezeichen zu erhalten, tun Sie

pdftk in.pdf dump_data

und lassen Sie Ihr Skript die Seitenzahlen aus der Ausgabe lesen.

Verwenden Sie dann

pdftk in.pdf cat A-B output out_A-B.pdf

um die Seiten von A nach B in out_A-B.pdf zu bekommen.

Das Skript könnte in etwa so aussehen:

#!/bin/bash

infile=$1 # input pdf
outputprefix=$2

[ -e "$infile" -a -n "$outputprefix" ] || exit 1 # Invalid args

pagenumbers=( $(pdftk "$infile" dump_data | \
                grep '^BookmarkPageNumber: ' | cut -f2 -d' ' | uniq)
              end )

for ((i=0; i < ${#pagenumbers[@]} - 1; ++i)); do
  a=${pagenumbers[i]} # start page number
  b=${pagenumbers[i+1]} # end page number
  [ "$b" = "end" ] || b=$[b-1]
  pdftk "$infile" cat $a-$b output "${outputprefix}"_$a-$b.pdf
done

Linux
  1. Wie kann man die Seiten eines PDFs skalieren?

  2. PDF-Reader, der Lesezeichen unterstützt?

  3. PDF in Bilder in PDF umwandeln?

  4. CLI PDF-Viewer für Linux

  5. Konverter für Linux-PDF-Versionen

Erstellen Sie mit pdftk Lesezeichen für Ihre PDF-Datei

PDF Split and Merge „PDFSAM“ macht genau das, was es verspricht

So konvertieren Sie eine Webseite unter Linux in PDF

So öffnen Sie eine PDF-Datei im Linux-Terminal

Reduzieren Sie die PDF-Dateigröße unter Linux

Linux-Split-Befehl mit Beispielen