Bagaimana cara mengekstrak dan / atau menghapus halaman terakhir dari banyak PDF?

14

Salah satu vendor kami mulai menempel pada gambar besar yang tidak perlu ke halaman terakhir dari PDF yang kami dapatkan dari mereka. Saya perlu memotong ini. Namun, kami memiliki ratusan ini, jadi itu penghalang untuk masuk secara manual. Apa cara terbaik untuk mengekstrak dan kemudian menghapus (Lebih disukai yang pertama, lalu yang lain; Saya masih perlu mengkonfirmasi melalui filesize bahwa saya tidak menghapus yang tidak memiliki gambar) halaman terakhir dari PDF secara otomatis? OS adalah Linux.

Saya dapat mengekstraknya menggunakan ghostscript, dengan sesuatu di sepanjang baris gs -dFirstPage=5 -dLastPage=5, tapi saya perlu mengotomatiskan ini, saya tidak bisa melewatinya dan secara manual mencari tahu apa nomor halaman terakhir itu.

Ada ide?

Sunting: Untuk memperjelas, saya hanya ingin membagi / menghapus halaman terakhir. Bukan gambar di dalamnya, cukai periode halaman terakhir.

Andrew
sumber
1
Lihat pdftk- saya yakin itu dapat dibuat untuk bekerja secara umum untuk tugas semacam ini.
Daniel Andersson
Kemungkinan rangkap: Unix: convert pdf to image
ahilsend
2
Bukan duplikat dari jarak jauh itu.
Andrew
Saya merasa harus mengklarifikasi: Saya tidak tertarik menghapus gambar di halaman terakhir. Saya tertarik menghapus halaman terakhir, titik.
Andrew
1
Pertanyaan terkait dengan beberapa jawaban berbeda di Ask Ubuntu: askubuntu.com/questions/221962/…
TuringTux

Jawaban:

2

Seperti @Daniel Andersson sudah berkomentar, ini dapat dengan mudah dilakukan dengan pdftk:

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

Saya tidak tahu apakah itu dapat dilakukan dengan satu panggilan ke pdftk meskipun ...

Sunting : Anda dapat menggabungkannya dengan jawaban dan penggunaan thanosk (dalam bentuk bash):

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

ketika Anda sudah mengekstrak halaman terakhir ke variabel $last.

Jaap Eldering
sumber
Contoh tidak berfungsi. Jawaban @Sid Steward ditemukan untuk bekerja lebih baik.
Reado
14

Untuk lebih meningkatkan jawaban @ eldering, pdftk versi 1.45 dan yang lebih baru memiliki sarana untuk mereferensikan halaman dalam urutan terbalik dengan menambahkan huruf kecil r ke nomor halaman. Halaman terakhir dalam PDF adalah r1, halaman berikutnya-ke-terakhir adalah r2, dll.

Misalnya, panggilan pdftk tunggal:

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

akan menjatuhkan halaman terakhir dari input.pdf - panjangnya harus minimal dua halaman.

Untuk mengekstrak hanya halaman terakhir PDF untuk menguji ukuran file-nya, jalankan:

pdftk input.pdf cat r1 output final_page.pdf

Pdftk tersedia di Linux. Banyak distro yang memiliki biner yang dapat Anda instal. Anda harus memastikan itu versi 1.45 atau lebih baru. Jika tidak, Anda dapat membangun pdftk dari kode sumber.

Sid Steward
sumber
hal rN-persis apa yang saya butuhkan, karena sistem pdf menghasilkan lateks saya selalu menghasilkan beberapa halaman kosong di awal dan hampir di akhir dokumen, saya harus menghapusnya secara manual di akhir. Sekarang saya hanya memanggil: pdftk A = pocket20.pdf cat A3-r6 r3-end output pocket_to_print.pdf yang menghapus dua pertama dan ke-4, ke-5 halaman terakhir.
Martin T.
1

pdfinfo akan memberi Anda ukuran file pdf yang sebenarnya, dan pdfimages akan memberi Anda indeks gambar dalam file pdf tersebut. Jadi Anda bisa menulis skrip dalam formulir

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

itu akan kembali jika file tertentu memiliki gambar di halaman terakhir. Jika ya maka Anda dapat melakukan manipulasi apa pun yang perlu Anda lakukan.

thanosk
sumber
0

Inilah solusi menggunakan pdfjam alih-alih pdftk:

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

Di mana argumen pertama adalah file yang akan dipotong dan argumen kedua jumlah halaman yang akan dipotong (default ke 1).

Alex
sumber
0

Solusi satu liner akan digunakan findbersama pdftk:

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

CATATAN : file yang dipangkas disimpan dalam contoh ini dalam subdirektori yang dipanggil cutuntuk menjaga nama file asli karena pdftktidak memungkinkan menimpa file input.

Yan Foto
sumber