6

У меня есть 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 #?

3 ответа3

4

Хорошо, вы решили это, имея доступ к исходному файлу ваших PDF-файлов, файлу 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 ... ; ;)

2

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

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

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .