GNU/Linux >> Belajar Linux >  >> Linux

Potong halaman PDF menjadi beberapa halaman

Anda dapat menyelesaikan ini dengan bantuan Ghostscript. pdftk sendiri tidak bisa melakukan itu (sejauh pengetahuan saya). Saya akan memberi Anda langkah-langkah baris perintah untuk melakukan ini secara manual. Akan mudah untuk membuat skrip ini sebagai prosedur, juga dengan parameter berbeda untuk ukuran halaman dan nomor halaman. Tetapi Anda mengatakan bahwa Anda dapat melakukannya sendiri;-)

Cara mengatasi ini dengan bantuan Ghostscript...

...dan untuk bersenang-senang, baru-baru ini saya tidak melakukannya dengan file input yang menampilkan halaman "double-up", tetapi satu dengan "treble-up". Anda dapat membaca jawaban untuk kasus ini di sini .

Kasus Anda bahkan lebih sederhana. Sepertinya Anda memiliki sesuatu yang mirip dengan ini:

+------------+------------+   ^
|            |            |   |
|      1     |      2     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
             ^
            fold
             v
+------------+------------+   ^
|            |            |   |
|      3     |      4     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
<---------- 842 pt -------->

Anda ingin membuat 1 PDF dengan 4 halaman yang masing-masing berukuran 421 pt x 595 pt.

Langkah Pertama

Pertama mari kita ekstrak bagian kiri dari setiap halaman masukan:

gs \
    -o left-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [0 0]>> setpagedevice" \
    -f double-page-input.pdf

Apa yang dilakukan parameter ini?

Pertama, ketahuilah bahwa dalam PDF 1 inci ==72 poin . Maka sisanya adalah:

  • -o ...............: Nama file keluaran. Secara implisit juga menggunakan -dBATCH -dNOPAUSE -dSAFER .
  • -sDEVICE=pdfwrite : kami ingin PDF sebagai format keluaran.
  • -g................: menetapkan ukuran media keluaran dalam piksel. resolusi default pdfwrite adalah 720 dpi. Oleh karena itu kalikan dengan 10 untuk mendapatkan kecocokan untuk PageOffset.
  • -c "..............: meminta Ghostscript untuk memproses cuplikan kode PostScript yang diberikan tepat sebelum file input utama (yang harus diikuti dengan -f ).
  • <</PageOffset ....: mengatur pergeseran gambar halaman pada media. (Tentu saja, untuk halaman kiri digeser oleh [0 0] tidak memiliki efek nyata.)
  • -f ...............: memproses file masukan ini.

Hasil apa yang dicapai oleh perintah terakhir?

Yang ini:

Output file: left-sections.pdf, page 1
+------------+  ^
|            |  |
|     1      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: left-sections.pdf, page 2
+------------+  ^
|            |  |
|     3      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->

Langkah Kedua

Selanjutnya, bagian kanan:

gs \
    -o right-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [-421 0]>> setpagedevice" \
    -f double-page-input.pdf

Perhatikan offset negatif karena kami menggeser halaman ke kiri sambil menjaga area tampilan tetap.

Hasil:

Output file: right-sections.pdf, page 1
+------------+  ^
|            |  |
|     2      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: right-sections.pdf, page 2
+------------+  ^
|            |  |
|     4      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->

Langkah Terakhir

Sekarang kami menggabungkan halaman menjadi satu file. Kita juga bisa melakukannya dengan ghostscript, tetapi kita akan menggunakan pdftk sebagai gantinya, karena lebih cepat untuk pekerjaan ini:

pdftk \
  A=right-sections.pdf \
  B=left-sections.pdf \
  shuffle \
  output single-pages-output.pdf
  verbose

Selesai. Inilah hasil yang diinginkan. 4 halaman berbeda, berukuran 421x595 pt.

Hasil:

+------------+ +------------+ +------------+ +------------+   ^
|            | |            | |            | |            |   |
|     1      | |     2      | |     3      | |     4      |   |
|            | |            | |            | |            |5595 pt
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
+------------+ +------------+ +------------+ +------------+   v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->

Ada alat pdfposter yang dapat digunakan untuk membuat PDF dengan beberapa halaman untuk satu halaman masukan (memasang atau memotong halaman). Ini mirip dengan alat poster , yang melakukan hal yang sama untuk file PostScript.


Jadi, setelah lebih banyak mencari (tampaknya "halaman potongan PDF" adalah pencarian yang jauh lebih baik), saya menemukan skrip kecil bernama unpnup yang menggunakan poster , konversi PDF/PS, dan pdftk untuk melakukan apa yang saya butuhkan. Ini agak jauh, tetapi jauh lebih unggul daripada metode lain yang saya temukan (seperti menggunakan imagemagick) karena tidak meraster halaman sebelum memuntahkannya.

Untuk berjaga-jaga jika mobileread hilang karena suatu alasan, inti skrip (dilisensikan di bawah GPLv2 atau lebih baru oleh Harald Hackenberg <hackenberggmx.at> ) adalah sebagai berikut:

pdftk "$1" burst
for file in pg*.pdf;
do
    pdftops -eps $file
    poster -v -pA4 -mA5 -c0% `basename $file .pdf`.eps > `basename $file .pdf`.tps
    epstopdf `basename $file .pdf`.tps
done
pdftk pg*.pdf cat output ../`basename $1 .pdf`_unpnuped.pdf

Linux
  1. Cara membagi satu file menjadi beberapa file berdasarkan baris

  2. Bagaimana Mengompresi Banyak File Menjadi Arsip .xz?

  3. Bagaimana cara membagi satu file teks menjadi beberapa file *.txt?

  1. Bagaimana cara membuat arsip tar dipecah menjadi, atau mencakup, banyak file?

  2. Memecah gambar dd menjadi beberapa file

  3. Gabungkan beberapa perintah unix menjadi satu output

  1. Perintah Untuk Membuat Zip Banyak Direktori Menjadi File Zip Individual?

  2. Vim:Bagaimana Cara Membuka Banyak File Ke Tab Berbeda?

  3. Bagaimana Menggabungkan Beberapa Koneksi Internet Menjadi Satu?