Управление PDF: “2 -” макет страницы

У меня есть PDF (сгенерированный PowerPoint) содержащий 8.5×5.5 страницы портрета дюйма.

Я должен преобразовать его в 8.5×11 дюйм альбомные страницы, где каждая альбомная страница содержит две копии исходной (меньшей) страницы портрета бок о бок.

В ASCII-творчестве:

 Original  |    Desired
           | 
  |---|    |  |---| |---|
  | 1 |    |  | 1 | | 1 |
  | 1 |    |  | 1 | | 1 |
  |---|    |  |---| |---|
           |
  |---|    |  |---| |---|
  | 2 |    |  | 2 | | 2 |
  | 2 |    |  | 2 | | 2 |
  |---|    |  |---| |---|

Там какой-либо свободный путь состоит в том, чтобы сделать это, или я должен буду сделать это в C#?

6
задан 24.05.2015, 20:34

3 ответа

"Распечатайте" его с помощью pdfcreator (драйвер виртуального принтера с открытым исходным кодом).

//редактирование: Еще одна опция использует pdftk (http://www.accesspdf.com/pdftk/), но я не протестировал его сам.

2
ответ дан 07.12.2019, 16:05

Я решил это путем генерации второй презентации PowerPoint с двумя копиями каждого слайда, сохранения его к PDF и печати PDF с двумя страницами за лист.

1
ответ дан 07.12.2019, 16:05

Хорошо, Вы решили его при наличии доступа к исходному файлу Вашего PDFs, файла Powerpoint. Что Вы могли сделать, если Вы хотите достигнуть того же самого без доступа к источникам?

Позвольте мне дать этому выстрел. Я буду использовать...

  1. Ghostscript для размещения и смещения входных страниц PDF на новый размер медиа;
  2. pdftk для накладывания двух различных страниц PDF на одну.

Первый шаг: Ghostscript для размещения изображений в более крупные медиа

Вот то, чего мы хотим достигнуть с помощью Ghostscript на этом шаге:

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

Это - первая команда, которая будет использовать:

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

Я сместил все изображения страницы на... ничто, но разместил их в больший лист. Я слишком ленив, чтобы ввести и объяснить, что все опции должны были выбрать нечетные номера страниц только, поэтому на данный момент я просто делаю это для всех страниц. - Таким образом, это - то, чего мы действительно достигали на данный момент:

+-----------------------+
|  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)

Теперь помещая все изображения направо:

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

Это - то, чего мы достигли со второй командой:

+-----------------------+
|  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)

Второй шаг: используйте pdftk.exe для накладывания пар страниц.

В случае, если Вы еще не установили его, загрузите его отсюда. Это не требует реальной установки. Это - .exe файл, который работает от каждого местоположения. Мы хотим заставить результат быть похожим на это:

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

Мы будем использовать эти команды:

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

Хорошо, до сих пор мы только создали первые две двойных страницы... Однако я теперь хочу связать эти две двойных страницы в единственный файл:

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

У Вас должно теперь быть достаточно вдохновения для обработки остающихся страниц..., если Вы будете суперамбициозны, то Вы даже напишете сценарий этого с одной единственной командной строкой, с помощью двух вложенных for /l ... циклы ;-)

4
ответ дан 07.12.2019, 16:05

Теги

Похожие вопросы