PDF Manipulation: макет страницы «2-Up»

1556
SLaks

У меня есть PDF (созданный PowerPoint), содержащий 8,5 × 5,5-дюймовые страницы с портретом.

Мне нужно преобразовать его в 8,5 × 11-дюймовые страницы с альбомной ориентацией, где каждая страница с альбомной ориентацией содержит две копии оригинальной (уменьшенной) портретной страницы рядом друг с другом.

В ASCII искусстве:

Оригинал | Желаемый |  | --- | | | --- | | --- | | 1 | | | 1 | | 1 | | 1 | | | 1 | | 1 | | --- | | | --- | | --- | | | --- | | | --- | | --- | | 2 | | | 2 | | 2 | | 2 | | | 2 | | 2 | | --- | | | --- | | --- |  

Есть ли бесплатный способ сделать это, или мне нужно будет сделать это в C #?

6

3 ответа на вопрос

4
Kurt Pfeifle

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

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

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

Я не вижу, как дублировать страницы в PDF Creator (см. Мой ASCII арт) SLaks 14 лет назад 0
Сейчас я это проверил. В диалоговом окне печати PDF я выбрал копирование и печать нескольких страниц на листе. К сожалению, он группирует страницы, а не копирует их на одну и ту же страницу :(. Извините за не проверенный ответ. Maciek Sawicki 14 лет назад 0
Если я буду играть с сопоставлением, это может сработать. Где вы указали несколько страниц на листе? SLaks 14 лет назад 0
В диалоге печати в Acrobat Reader, но, к сожалению, параметр сортировки выглядит неработающим при печати нескольких страниц на листе. Я также установил двойной размер в свойствах принтера (диалоговое окно свойств печати в Acrobat Reader). Как насчет копирования слайдов в PowerPoint? Maciek Sawicki 14 лет назад 0
Слайды используют несколько страниц мастера с различным форматированием. Я попытался написать макрос, чтобы скопировать их, но я не мог заставить его правильно обрабатывать форматирование. SLaks 14 лет назад 1
1
SLaks

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

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