Manipulação de PDF: layout de página "2-Up"

6

Eu tenho um PDF (gerado pelo PowerPoint) contendo páginas retrato de 8.5 × 5.5 polegadas.

Eu preciso convertê-lo em páginas de paisagem de 8,5 × 11 polegadas, onde cada página de paisagem contém duas cópias da página de retratos original (menor) lado a lado.

Em arte ASCII:

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

Existe alguma maneira gratuita de fazer isso, ou eu precisarei fazer isso em C #?

    
por SLaks 15.01.2010 / 03:33

3 respostas

2

"Imprima" usando o pdfcreator (driver de impressora virtual de código aberto).

// edit: Outra opção é usar o pdftk ( link ), mas eu mesmo não testei.

    
por 15.01.2010 / 03:41
4

OK, você resolveu ter acesso ao arquivo de origem dos seus PDFs, o arquivo do Powerpoint. O que você poderia fazer se quisesse alcançar a mesma coisa sem acesso às fontes?

Deixe-me dar uma chance. Eu vou estar usando ...

  1. Ghostscript para colocar e deslocar as páginas PDF de entrada para o novo tamanho de mídia;
  2. pdftk para sobrepor duas páginas PDF diferentes em uma.

Primeiro passo: Ghostscript para colocar imagens em mídia maior

Aqui está o que queremos alcançar com a ajuda de Ghostscript neste passo:

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

Este é o primeiro comando a usar:

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

Eu mudei todas as imagens de página por ... nada, mas as coloquei em uma folha maior. Estou com preguiça de digitar e explicar todas as opções necessárias para selecionar apenas os números de páginas ímpares, então, por enquanto, simplesmente faço isso para todas as páginas. - Então é isso que nós fizemos alcançar por agora:

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

Agora, coloque todas as imagens à direita:

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

Isso é o que conseguimos com o segundo comando:

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

Segunda etapa: use pdftk.exe para sobrepor pares de páginas.

Caso ainda não o tenha instalado, faça o download aqui Não requer uma instalação real. É um arquivo .exe que é executado em todos os locais. Queremos que o resultado seja assim:

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

Nós usaremos estes comandos:

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, até agora só criamos as duas primeiras páginas duplas ... No entanto, agora quero concatenar essas duas páginas duplas em um único arquivo:

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

Agora você deve ter inspiração suficiente para processar as páginas restantes ... se você for super ambicioso, você mesmo escreverá com uma única linha de comando, usando dois for /l ... loops aninhados ;-)

    
por 15.09.2010 / 23:03
1

Resolvi isso gerando uma segunda apresentação do PowerPoint com duas cópias de cada slide, salvando-a em PDF e imprimindo o PDF com duas páginas por folha.

    
por 15.01.2010 / 18:01