У меня есть 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#?
"Распечатайте" его с помощью pdfcreator (драйвер виртуального принтера с открытым исходным кодом).
//редактирование: Еще одна опция использует pdftk (http://www.accesspdf.com/pdftk/), но я не протестировал его сам.
Хорошо, Вы решили его при наличии доступа к исходному файлу Вашего PDFs, файла Powerpoint. Что Вы могли сделать, если Вы хотите достигнуть того же самого без доступа к источникам?
Позвольте мне дать этому выстрел. Я буду использовать...
Вот то, чего мы хотим достигнуть с помощью 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)
В случае, если Вы еще не установили его, загрузите его отсюда. Это не требует реальной установки. Это - .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 ...
циклы ;-)