Jak wyodrębnić i / lub usunąć ostatnią stronę pliku PDF?


14

Jeden z naszych dostawców zaczął dodawać niepotrzebnie ogromny obraz do ostatniej strony plików PDF, które od nich otrzymujemy. Muszę to wyciąć. Mamy ich jednak setki, więc wprowadzanie ręczne jest niedopuszczalne. Jakie są najlepsze sposoby wyodrębnienia, a następnie usunięcia (najlepiej najpierw, potem drugiego; nadal muszę potwierdzić za pomocą rozmiaru pliku, że nie usuwam jednego, który nie ma obrazu) ostatniej strony pliku PDF automatycznie? System operacyjny to Linux.

Mogę go wyodrębnić za pomocą ghostscript, z czymś podobnym do gs -dFirstPage=5 -dLastPage=5, ale muszę to zautomatyzować, nie mogę przejść i ręcznie dowiedzieć się, jaka jest liczba ostatniej strony.

Jakieś pomysły?

Edycja: Aby to wyjaśnić, chcę po prostu podzielić / usunąć ostatnią stronę. Nie obraz w nim, akcyza ostatni okres strony.


1
Spójrz pdftk- jestem przekonany, że można go ogólnie zastosować do tego rodzaju zadań.
Daniel Andersson,


2
Nie zdalnie duplikat tego.
Andrew,

Wydaje mi się, że powinienem to wyjaśnić: nie jestem zainteresowany usunięciem obrazu z ostatniej strony. Chcę usunąć ostatnią stronę, kropkę.
Andrew

1
Podobne pytanie z wieloma różnymi odpowiedziami na Ask Ubuntu: askubuntu.com/questions/221962/...
TuringTux

Odpowiedzi:


2

Jak już skomentował @Daniel Andersson, można to łatwo zrobić za pomocą pdftk:

pdftk input.pdf cat end-1 output temp.pdf
pdftk temp.pdf  cat end-2 output output.pdf
rm temp.pdf

Nie wiem jednak, czy da się to zrobić za pomocą jednego połączenia z pdftk ...

Edycja : możesz połączyć to z odpowiedzią thanosk i użyć (w bash):

pdftk input.pdf cat 1-$((last-1)) output output.pdf

kiedy już wyodrębniłeś ostatnią stronę do zmiennej $last.


Przykład nie działa. Znaleziono odpowiedź @Sid Steward na lepszą pracę.
Reado

14

Aby jeszcze bardziej ulepszyć odpowiedź @ eldering, pdftk w wersji 1.45 i nowszych ma możliwość odwoływania się do stron w odwrotnej kolejności, przygotowując małą literę r do numeru strony. Ostatnia strona w pliku PDF to r1, strona przedostatnia to r2 itp.

Na przykład pojedyncze wywołanie pdftk:

pdftk input.pdf cat 1-r2 output output.pdf

usunie ostatnią stronę z input.pdf - dane wejściowe powinny mieć co najmniej dwie strony.

Aby wyodrębnić tylko ostatnią stronę pliku PDF w celu przetestowania jego rozmiaru pliku, uruchom:

pdftk input.pdf cat r1 output final_page.pdf

Pdftk jest dostępny w systemie Linux. Wiele dystrybucji ma pliki binarne, które można zainstalować. Należy jednak upewnić się, że jest to wersja 1.45 lub nowsza. Jeśli nie, możesz zbudować pdftk z kodu źródłowego.


RN jest dokładnie tym, czego potrzebowałem, ponieważ mój system generowania plików PDF na bazie lateksu zawsze tworzył puste strony na początku i prawie na końcu dokumentu, musiałem je usunąć ręcznie na końcu. Teraz po prostu dzwonię: pdftk A = pocket20.pdf cat A3-r6 r3-end output pocket_to_print.pdf, który usuwa pierwsze dwie i 4, 5 ostatnie strony.
Martin T.

1

pdfinfo poda rozmiar rzeczywistego pliku pdf, a pdfimages da indeks obrazów we wspomnianym pliku pdf. Możesz napisać skrypt w formularzu

#!/bin/bash
for i in *.pdf
do
        j=$(pdfinfo "$i" |awk '/^Pages/ { print $2}')
        pdfimages -list -p -f "$j" "$i"
done

powinien zwrócić, jeśli określony plik ma obraz na ostatniej stronie. Jeśli tak, możesz wykonać dowolną manipulację.


0

Oto rozwiązanie wykorzystujące pdfjam zamiast pdftk:

#!/bin/sh
fname=`basename $1`
pdfjam $1 1-$((`pdfinfo $1 | grep Pages | grep -shoPe '\d+'` - ${2:-1})) -o ${fname%.*}-trimmed.pdf

Gdzie pierwszym argumentem jest plik do przycięcia, a drugim argumentem ilość stron do przycięcia (domyślnie 1).


0

Jednym rozwiązaniem liniowym byłoby użycie findrazem pdftk:

find . -name "*.pdf" -exec pdftk {} cat 1-r2 output cut/{} \;

UWAGA : przycięte pliki są przechowywane w tym przykładzie w podkatalogu wywoływanym w cutcelu zachowania oryginalnej nazwy pliku, ponieważ pdftknie pozwala na zastąpienie plików wejściowych.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.