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