Manipulasi PDF: Tata letak halaman "2-Up"

6

Saya memiliki PDF (dihasilkan oleh PowerPoint) yang berisi halaman potret 8,5 × 5,5 inci.

Saya perlu mengonversinya menjadi halaman lanskap 8,5 × 11 inci di mana setiap halaman lanskap berisi dua salinan halaman potret asli (lebih kecil) berdampingan.

Dalam seni ASCII:

Asli | Diinginkan
           | 
  | --- | | | --- | | --- |
  | 1 | | | 1 | | 1 |
  | 1 | | | 1 | | 1 |
  | --- | | | --- | | --- |
           |
  | --- | | | --- | | --- |
  | 2 | | | 2 | | 2 |
  | 2 | | | 2 | | 2 |
  | --- | | | --- | | --- |

Apakah ada cara gratis untuk melakukan ini, atau saya perlu melakukannya dalam C #?

Slaks
sumber

Jawaban:

2

"Cetak" itu menggunakan pdfcreator (driver printer virtual open source).

// edit: Satu lagi opsi menggunakan pdftk ( http://www.accesspdf.com/pdftk/ ), tetapi saya belum mengujinya sendiri.

Maciek Sawicki
sumber
Saya tidak melihat cara menduplikasi halaman dalam pencipta PDF (Lihat seni ASCII saya)
Slaks
Sekarang saya mengujinya. Dalam dialog cetak pdf saya memilih untuk menyalin dan mencetak beberapa halaman per lembar. Sayangnya itu mengelompokkan halaman alih-alih menempatkan ke salinan pada halaman yang sama :(. Saya minta maaf atas jawaban yang tidak diuji.
Maciek Sawicki
Jika saya bermain dengan collation, mungkin berhasil. Di mana Anda menentukan beberapa halaman per lembar?
SLaks
Dalam dialog cetak di Acrobat Reader, tetapi sayangnya opsi susun terlihat rusak untuk mencetak beberapa halaman per lembar. Saya juga mengatur ukuran ganda pada properti printer (dialog tombol cetak properti di Acrobat Reader). Bagaimana dengan menghentikan slide di PowerPoint?
Maciek Sawicki
1
Slide menggunakan beberapa halaman master dengan format berbeda. Saya mencoba menulis makro untuk menyalinnya, tetapi saya tidak bisa membuatnya menangani pemformatan dengan benar.
SLaks
4

OK, Anda menyelesaikannya dengan memiliki akses ke file sumber PDF Anda, file Powerpoint. Apa yang dapat Anda lakukan jika Anda ingin mencapai hal yang sama tanpa akses ke sumber?

Biarkan saya mencoba ini. Saya akan menggunakan ...

  1. Ghostscript untuk menempatkan dan menggeser halaman input PDF ke ukuran media baru;
  2. pdftk untuk overlay dua halaman PDF berbeda menjadi satu.

Langkah pertama: Ghostscript untuk menempatkan gambar di media yang lebih besar

Inilah yang ingin kami capai dengan bantuan Ghostscript pada langkah ini:

+-----------+-----------------------+
| Original  |  Ghostscript-output   |
+===========+=======================+
|  +---+    |  +---+---+  (right    |
|  | p |    |  | p |   |   half     |
|  | 1 |    |  | 1 |   |   of sheet |
|  +---+    |  +---+---+   empty)   |
|           |                       |
|  +---+    |  +---+---+  (left     |
|  | p |    |  |   | p |   half     |
|  | 2 |    |  |   | 2 |   of sheet |
|  +---+    |  +---+---+   empty)   |
+-----------+-----------------------+

Ini adalah perintah pertama yang digunakan:

gswin32c.exe ^
 -o left-side-outputs.pdf ^
 -sDEVICE=pdfwrite ^
 -g7920x6120 ^
 -dPDFSETTINGS=/prepress ^
 -c "<</PageOffset [0 0]>>setpagedevice" ^
 -f powerpoint.pdf

Saya menggeser semua gambar halaman dengan ... tidak ada apa-apa, tetapi menempatkannya pada lembar yang lebih besar. Saya terlalu malas untuk mengetik dan menjelaskan semua opsi yang diperlukan untuk memilih nomor halaman ganjil saja, jadi untuk sekarang saya cukup melakukan ini untuk semua halaman. - Jadi ini yang kami lakukan untuk saat ini:

+-----------------------+
|  Ghostscript-output   |
+=======================+
|  +---+---+  (right    |
|  | p |   |   half     |
|  | 1 |   |   of sheet |
|  +---+---+   empty)   |
|                       |
|  +---+---+  (right    |
|  | p |   |   half     |
|  | 2 |   |   of sheet |
|  +---+---+   empty)   |
|                       |
|  +---+---+  (right    |
|  | p |   |   half     |
|  | 3 |   |   of sheet |
|  +---+---+   empty)   |
|  .........            |
+-----------------------+
 (left-side-outputs.pdf)

Sekarang letakkan semua gambar di kanan:

gswin32c.exe ^
 -o right-side-outputs.pdf ^
 -sDEVICE=pdfwrite ^
 -g7920x6120 ^
 -dPDFSETTINGS=/prepress ^
 -c "<</PageOffset [396 0]>>setpagedevice" ^
 -f powerpoint.pdf

Inilah yang kami capai dengan perintah kedua:

+-----------------------+
|  Ghostscript-output   |
+=======================+
|  +---+---+  (left     |
|  |   | p |   half     |
|  |   | 1 |   of sheet |
|  +---+---+   empty)   |
|                       |
|  +---+---+  (left     |
|  |   | p |   half     |
|  |   | 2 |   of sheet |
|  +---+---+   empty)   |
|                       |
|  +---+---+  (left     |
|  |   | p |   half     |
|  |   | 3 |   of sheet |
|  +---+---+   empty)   |
|  .........            |
+-----------------------+
 (right-side-outputs.pdf)

Langkah kedua: gunakan pdftk.exe untuk overlay pasangan halaman.

Jika Anda belum menginstalnya, unduh dari sini . Itu tidak memerlukan instalasi nyata. Ini adalah file .exe yang dijalankan dari setiap lokasi. Kami ingin hasilnya terlihat seperti ini:

+---------------------+-------------+
| pdftk input         | pdftk output|
+=====================+=============+
| +---+---+ (right    | +---+---+   |
| | p |   |  half     | | p | p |   |
| | 1 |   |  of sheet | | 1 | 2 |   |
| +---+---+  empty)   | +---+---+   |
|                     |             |
| +---+---+ (left     |             |
| |   | p |  half     |             |
| |   | 2 |  of sheet |             |
| +---+---+  empty)   |             |
+---------------------+-------------+

Kami akan menggunakan perintah ini:

pdftk.exe ^
   A=left-side-outputs.pdf ^
   B=right-side-outputs.pdf ^
   cat A1 B2  ^
   output 2up-powerpoint-page-1.pdf ^
   verbose

pdftk.exe ^
   A=left-side-outputs.pdf ^
   B=right-side-outputs.pdf ^
   cat A3 B4  ^
   output 2up-powerpoint-page-2.pdf ^
   verbose

OK, sejauh ini kami hanya membuat dua halaman double-up pertama ... Namun, saya sekarang ingin menggabungkan dua halaman ganda ini menjadi satu file:

pdftk.exe ^
  A=2up-powerpoint-page-1.pdf ^
  B=2up-powerpoint-page-2.pdf ^
  cat A B ^
  output 2up-powerpoint-all.pdf

Anda sekarang harus memiliki cukup inspirasi untuk memproses halaman yang tersisa ... jika Anda sangat ambisius, Anda bahkan akan membuat skrip dengan satu perintah tunggal, menggunakan dua for /l ...loop bersarang ;-)

Kurt Pfeifle
sumber
1

Saya memecahkan masalah ini dengan membuat presentasi PowerPoint kedua dengan dua salinan setiap slide, menyimpannya ke PDF, dan mencetak PDF dengan dua halaman per lembar.

Slaks
sumber