Narzędzie wiersza polecenia do przycinania plików PDF

101

Szukam narzędzia wiersza polecenia typu open source do przycinania plików PDF, tak jak możemy to zrobić w programie Adobe Acrobat Pro. Wypróbowałem PdfTk, ImageMagick, PyPDF i GhostScript - wszystkie bez powodzenia.

Rakesh
źródło
Czy możesz opisać, jaki rodzaj kadrowania możesz wykonać w programie Adobe Acrobat pro? Ponieważ go nie mam i dlatego nie mogę powiedzieć, czego szukasz.
xubuntix
W programie Adobe Acrobat Pro możemy użyć kontroli marginesów, aby przyciąć plik PDF. możemy podać wartości dla górnego, dolnego, prawego i lewego do przycięcia
Rakesh

Odpowiedzi:

124

Proponuję rzucić okiem na PDFcrop .

Jeśli chcesz przyciąć plik PDF z lewym, górnym, prawym i dolnym marginesem 5, 10, 20 i 30 pkt (punktów), a następnie uruchom

pdfcrop --margins '5 10 20 30' input.pdf output.pdf

w terminalu. Aby faktycznie przyciąć coś, użyj ujemnych wartości w argumencie argumentu za uprawą. Na przykład,

pdfcrop --margins '-50 -50 -50 -50' input.pdf output.pdf

przycina 50 pkt od lewej, od góry, od prawej, od dołu (w tej kolejności).

Jeśli uruchomisz tylko polecenie pdfcrop input, wyświetli się plik o nazwie input-crop.pdf z zerowymi marginesami. Uważam to za bardzo przydatne, gdy dołączam ilustracje pdf do dokumentów.

Przycinanie wielu plików

Niestety, pdfcrop nie może przyciąć wielu plików jednocześnie. Łatwo jest jednak napisać skrypt, który wycina wszystkie pliki pdf w folderze, w którym znajduje się skrypt.

Utwórz nowy pusty plik i wywołaj go something.sh. Otwórz go za pomocą edytora tekstu i wstaw następujące elementy:

#!/bin/bash
for FILE in ./*.pdf; do
  pdfcrop "${FILE}"
done

Zapisz i zamknij. Następnie kliknij plik prawym przyciskiem myszy, przejdź do Właściwości> Uprawnienia i zaznacz pole Zezwalaj na uruchamianie pliku jako programu . Teraz zamknij okno dialogowe. Uruchom skrypt, klikając go dwukrotnie i wybierając Uruchom w terminalu . W folderze zostanie teraz wydrukowana nowa, przycięta zera wersja wszystkich plików pdf z przyrostkiem -crop . Jeśli chcesz marginesów lub innych rzeczy, możesz oczywiście po prostu otworzyć skrypt i dodać później argumenty pdfcrop.

Rasmus
źródło
Zauważ, że zamiast określać ujemne marginesy, można również użyć --bbox "<left> <bottom> <right> <top>". Pozwala to na zastosowanie tego podejścia do określenia obszaru uprawy opisanego w mojej odpowiedzi poniżej .
bluenote10
Czy istnieje możliwość podania numeru strony (który należy przyciąć)?
LK
Obawiam się, że to wszystko albo nic. pdfcrop --helpwyświetla dostępne opcje. Nie widzę tam niczego, co pozwoliłoby na określenie zakresu stron.
Rasmus
7
Porównując rozmiar danych wyjściowych PDFCrop z danymi wejściowymi, wygląda na to, że pdfcrop modyfikuje tylko ramki ograniczające. Nie usuwa danych. Takie podejście byłoby nieodpowiednie, aby zmniejszyć plik PDF lub ukryć informacje.
init_js
Jak urok! nawet z marginesami potrzebny pdf!
jojo
36

Dzięki za Rasmus, możesz zainstalować pdfcrop z pakietu texlive-extra-utils:

sudo apt-get install texlive-extra-utils

Następnie przytnij pliki pdf za pomocą polecenia pdf crop jako:

pdfcrop input.pdf output.pdf

użyj, --helpaby zobaczyć więcej niesamowitych parametrów takich jak--margins

pdfcrop --margins 5 input.pdf output.pdf

które przycinają pdf z 5 pz z każdej strony strony

sarigalina
źródło
1
Pomiar jest bpnieco inny niż pt. Zobacz tex.stackexchange.com/questions/8260/… .
koppor
2
Dla mnie pdfcrop zwiększył rozmiar pliku z 300x (z 7 MB do 2 GB). Musiałem to zrobić gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS="/ebook" -sOutputFile=output2.pdf output.pdfpóźniej, co naprawiło rozmiar pliku.
fiktor
17

Możesz także przycinać pliki PDF po prostu za pomocą Ghostscript. Napisałem mały skrypt, aby uprościć proces (zainspirowany tą odpowiedzią ):

#!/bin/bash

if [ $# -lt 5 ]
then
  echo "Usage: `basename $0` <pdf-file> <x_min> <x_max> <y_min> <y_max>"
  echo "Notes:"
  echo " - all coordinates are absolute; no calculation of width/height necessary"
  echo " - use 'gv' to determine the coordinates"
  exit 65
fi

file="$1"
xmin="$2"
xmax="$3"
ymin="$4"
ymax="$5"

base="${file%.*}"
outfile="${base}_cropped.pdf"

echo "writing to: $outfile"

gs \
  -o $outfile \
  -sDEVICE=pdfwrite \
  -c "[/CropBox [$xmin $ymin $xmax $ymax] /PAGES pdfmark" \
  -f $file

Aby określić współrzędne przycinania, używam gv, który drukuje współrzędne kursora myszy przy użyciu tych samych jednostek, co Ghostscript. Na przykład tutaj określam minimalne współrzędne dla x / y (wartości w lewym górnym rogu):

crop1

Teraz maksymalne współrzędne:

crop2

I wreszcie, uruchomić skrypt pdf_crop_by_coordinates.sh test.pdf 45 429 38 419wytwarzania test_cropped.pdfktóry wygląda tak:

wynik

Nie mam jednak pojęcia, jak porównuje się rozwiązanie Ghostscript pdfcroppod względem jakości i poprawności.

bluenote10
źródło
15

Kiedy nie mogę nic zrobić z pdftk, następnym miejscem , w którym się obracam , jest PDFjam , który jest opakowaniem wiersza poleceń dla pakietu LaTeX pdfpages (stąd też potrzebujesz tego i zainstalowanej dystrybucji TeXa). Aby uzyskać pomoc dotyczącą korzystania z niego, polecam zwykły ekran pomocy:

pdfjam --help

ponieważ strona podręcznika jest rzadka, a strona internetowa koncentruje się na przykładach.

Aby przyciąć plik PDF, potrzebne jest następujące polecenie:

pdfjam --keepinfo --trim "10mm 15mm 10mm 15mm" --clip true --suffix "cropped" input.pdf

Spowoduje to wygenerowanie pliku o nazwie input-cropped.pdf. Kolejność wykończeń powinna być lewa, dolna, prawa, górna, zgodnie \includegraphicsz grafiką .

Aby dać wyobrażenie o tym, jak to wygląda w porównaniu z PDFcrop, miałem ostatnio okazję wyciąć dość fantazyjny PDF. Mój oryginał miał rozmiar 675 kB, moja przycięta wersja przez PDFjam wynosiła 1,2 MB, a wersja przycięta przez PDFcrop - 4,5 MB. Podczas gdy zarówno PDFjam, jak i PDFcrop usunęły osadzone hiperłącza i zakładki, PDFjam z --keepinfoopcją zachował właściwości dokumentu (np. Tytuł, autor, temat).

Alex Ball
źródło
1
Uwaga: tak naprawdę to nie usuwa zawartości, która staje się poza ekranem z pliku PDF, tylko ją ukrywa. To samo, co komentuje @init_js w odpowiedzi o najwyższym wyniku.
Jan Żankowski
3

To może ci pomóc.
Jest to zgodne z nowszą wersją Ubuntu i life. To jest główny edytor PDF . Możesz go użyć do przycięcia, dodać trochę rzeczy itp.

Przykład:
to jest przed To jest wcześniej To jest po ctrl + k wprowadź opis zdjęcia tutaj

Shamina
źródło
3

Briss nie jest linią poleceń, ale warto na nią spojrzeć.

weberjn
źródło
2

Możesz użyć skryptu pypdf z tej strony . Ale w odpowiedzi na to pytanie dotyczące wymiany stosów wydaje się, że istnieje wiele opcji.

xubuntix
źródło
Nie jestem w stanie uzyskać parametrów w lewym górnym prawym dolnym rogu. czy są to punkty, cale, centymetry?
Rakesh
@Rakesh: Zobacz moją odpowiedź, aby uzyskać wyjaśnienie parametrów i sposób ich łatwego określenia.
bluenote10
2

Program pdfCropMargins to aplikacja wiersza polecenia do automatycznego przycinania marginesów plików PDF.

Ten program zależy od zainstalowanego (i zlokalizowanego) programu Ghostscript lub programu pdftoppm w systemie. I przeanalizuj obrazy stron za pomocą PIL, aby znaleźć obwiednie, używając progu 191.

zainstaluj za pomocą

pip zainstaluj pdfCropMargins

Uruchom za pomocą

pdf-crop-margins -v -s -u twój-plik.pdf

O pomoc

pdf-crop-margins -h | więcej

CharmiChokshi
źródło