2009-02-11 39 views
24

Sto cercando uno strumento gratuito che permetta di riorganizzare le pagine di un documento PDF e combinare più pagine per foglio. La prima parte (ri-organizzazione) è facilmente risolta da molti strumenti (io uso PyPDF).Come posso combinare due pagine PDF visualizzate nella stessa pagina?

Il problema è con il secondo requisito: combinare due (o più) pagine in una singola pagina. Per esempio, prendiamo due pagine (A e B), ruotarle, scala e combinare in un'unica pagina come questa

------  ------   ------ 
|  |  |  |   |  | 
| A |  | B |   | a | 
|  |  |  |   |  | 
|  |  |  | ---> ------ 
|  |  |  |   |  |   
|  |  |  |   | b |   
|  |  |  |   |  |   
------  ------   ------ 

La soluzione ha bisogno di lavorare su Linux e, preferibilmente, anche su Windows. Sto cercando un'applicazione console o una libreria con collegamenti Python o Perl.

Edit c'è pdfnup libreria che si suppone di eseguire esattamente questo tipo di trasformazione, ed è cross-platform, ma non posso usarlo a causa di un bug simile a this.

risposta

9

Su Linux, è possibile convertire i file PDF in Postscript e utilizzare psnup. Il modo esatto per invocarlo dipende esattamente dal modo in cui desideri che le pagine vengano raggruppate, sia che le vuoi ruotare, che dimensioni di carta vuoi usare, ecc. Ma sarà qualcosa del tipo:

pdf2ps infile.pdf infile.ps 
psnup -2 infile.ps outfile.ps 
ps2pdf outfile.ps outfile.pdf 

A seconda degli strumenti disponibili, si potrebbe avere un modo più efficiente per farlo: psnup non è certo l'unico modo, ma è un programma relativamente noto (su Linux comunque).

+0

Dovrebbe essere 'pdf2ps infile.pdf infile.ps'? –

+0

@Ian: Credo che tu abbia ragione, grazie per averlo capito;) Lo aggiusterò. –

0

Controllare il codice sorgente di PyPDF, in particolare il metodo rotateClockwise(). Deve esserci un posto dove viene scritto il contenuto di una pagina. Inserire un operatore "q" (stato di salvataggio) e "cm" (con i parametri corretti per una matrice di ridimensionamento) prima del contenuto e un operatore "Q" (stato di ripristino) in seguito.

Vedere lo PDF documentation per una spiegazione degli operatori e la struttura di una pagina (scorrere verso il basso per alcuni collegamenti utili).

Non dimenticare di inviare una patch per PyPDF :)

[EDIT] Si potrebbe anche voler controllare la pdfjam sources che includono un comando pdfnup.

0

Questa è una funzione perl che uso per afferrare una cartella piena di file PRN da un'applicazione 3rd party e creare un unico PDF unito.

sub runMerged($) 
{ 
    my($path) = @_; 

    print "Generating merged PDFs for $path\n"; 

    my @files = sort(getFiles($path, ".prn\$")); 
    if (scalar(@files)) 
    { 
     open(MERGE, ">$path/merged.prn"); 
     for (my $i = 0; $i < scalar(@files); $i++) 
     { 
      print MERGE "^L\n" if ($i > 0); 

      open(FN, "$path/" . $files[$i]); 
      while (my $line = <FN>) 
      { 
       print MERGE $line; 
      } 
      close(FN); 
     } 

     chdir("$BASE_PATH/txt2pdf"); 
     print `./txt2pdf.pl $path/merged.prn`; 
    } 
} 
22

Questo è un riassunto degli strumenti che ho trovato per PDF (volevo trovare l'equivalente di PSUP e psbook)

  • Creare libretti: pdfbook, PDF-Tools (comando: pdfbklt)
  • file Merge PDF: pdfmerge, pdfjam (comando: pdfjoin)
  • pagine Ruota: pdfjam (comando: pdf90)
  • più pagine per foglio: pdfjam (comando: pdfnup)
  • creare poster (più fogli per pagina): pdfposter

Dal mio gestore di pacchetti:

Crea un libretto A6:

pdfbook -2 -p a5 infile.pdf outfile.pdf 

PDF-Tools contiene:

  • pdfbklt: creare libretti
  • pdfrevert: rimuove uno strato di modifiche ad un file PDF, cercando per massimizzare la dimensione del file di output (per tenere conto del PDF linearizzato).
  • pdfstamp: aggiunge la stringa data al file .pdf infile nel percorso, nel carattere e nella dimensione specificati.

V'è anche polivalente: http://multivalent.sourceforge.net/Tools/index.html

+0

Nuova casa per pdfmerge (sembra): https://github.com/dmaphy/pdfmerge – Mildred

+4

Dopo aver testato diversi strumenti, 'pdfjam' è stato per me il più semplice, veloce ed efficiente:' pdfjam * .pdf --nup 2x1 --landscape --outfile output.pdf' (from: http://superuser.com/a/750293/255048) –

0

ho avuto una simile esigenza di questa settimana. Ma avevo bisogno di ripetere ogni pagina A4 (orizzontale) "due volte" nel foglio A3 (verticale), per poi tagliare a metà.

Ho trovato un plug-in Acrobat con tonnellate di funzioni di imposizione che hanno funzionato perfettamente per le mie esigenze e con una prova di 30 giorni completamente funzionante.

Spero che potrebbe essere utile per qualcun altro.
http://www.pdfsnake.com/

1

In risposta alla tua domanda, avrete bisogno di uno strumento PDF 'imposizione', che è un modo elegante per dire uno strumento che organizza le immagini delle pagine PDF su un particolare array per creare una nuova pagina unico PDF. Immagina che sia come comporre un giornale. Si definisce una serie di slot un certo numero di colonne di larghezza, per un certo numero di righe in profondità, su una pagina di determinate dimensioni fisse (in cm). Quindi riempi tutti gli spazi vuoti dall'alto in basso, da sinistra a destra con le pagine di un file sorgente PDF. Nel caso dell'OP, vogliono creare una singola pagina, composta da due pagine 8.5x11 disposte in un array 1x2 (1 colonna, 2 righe). Le loro pagine verranno inserite nell'array nel seguente ordine: 1,2.Quindi stai lasciando cadere la prima pagina (pagina 1 del pdf) nel primo slot dell'array (Colonna 1, riga 1) e stai lasciando cadere la seconda pagina (pagina 2) nel secondo slot (Colonna 1, riga 2).).

Come utilizzare lo strumento per fare in modo che questo accada: Scarica la versione precedente di Multivalent. Nota che l'autore ha rimosso le buone classi di strumenti dall'ultima edizione senza spiegazione, quindi devi usarne una più vecchia. Ecco un link di lavoro dal 02/12: http://code.google.com/p/pdfsizeopt/downloads/detail?name=Multivalent20060102.jar Per semplicità, ho rinominato il file jar in m.jar. Inutile dire che è necessario installare JRE perché funzioni, ma lo inserirò qui. Aggiungere m.jar alle variabili di ambiente del percorso classe Java (per lo script) o eseguire la sintassi della riga di comando con l'opzione -cp e il percorso relativo (mostrato di seguito). Nota, l'ho eseguito dalla riga di comando nella directory di installazione nel mio esempio qui sotto. Fornire un percorso assoluto dalla radice altrimenti (come c: \ 1 \ bin \ m.jar).

Ecco un esempio che compirà esattamente ciò che ha scritto su OP: C: \ 1 \ bin> java -cp m.jar tool.pdf.Impose -Dim 1x2 verbose -papersize "21.59x55.88cm" - layout "1,2" nomefile.pdf

Nota: l'opzione -dim crea l'array in Colonne x Righe. Il -gialize è specificato in centimetri qui, ma se hai bisogno di pollici, basta moltiplicare i pollici per 2,54 per ottenere cm. L'opzione -layout ti dà l'ordine che vuoi riempire gli spazi vuoti nell'array, riempiendo dall'alto in basso e da sinistra a destra. In questo caso, vogliamo la prima pagina del pdf in alto e la seconda in basso, quindi il nostro argomento è "1,2". L'argomento finale è il tuo vero file sorgente. Al termine, lo strumento genererà un file chiamato nomefile-up.pdf.

Spero che questo aiuti.

-Matt Zweil

2

Se si usa Linux, è possibile utilizzare BookletImposer per mettere più pagine PDF in una sola pagina.

Per gli utenti di Ubuntu, questo strumento è disponibile presso Ubuntu Software Center.

0

Ho avuto lo stesso problema come voi e questo è quello che ho fatto:

  1. estratte tutte le pagine nel file PDF come file separato ogni
  2. In IrfanView (con plugin) Ho creato una verticale "Panoramic" immagine
  3. trascinato il file pdf verso la sezione delle immagini
  4. Scattato creato
  5. L ' "immagine" è stato creato con tutte le pagine si susseguono come un'immagine verticale molto lungo
  6. È possibile esportare in PDF senza perdita di qualità.
  7. Godetevi
0

Ecco uno script per ripetere pagine (come A5, paesaggio) due volte su un foglio doppio di queste dimensioni (A4, verticale):

#!/bin/bash 
INPUTFILE=$* 
PAGENUM=`pdftk ${INPUTFILE} dump_data | grep NumberOfPages | cut -d : -f 2 | cut -d " " -f 2` 
PAGES=`seq 1 ${PAGENUM}` 
DUPAGES=`for i in ${PAGES} ; do echo $i $i | tr "\n" " " ; done` 
OUTPUT1=`basename ${INPUTFILE} .pdf`.dup.pdf 
OUTPUT2=`basename ${INPUTFILE} .pdf`.double.pdf 
pdftk ${INPUTFILE} cat ${DUPAGES} output ${OUTPUT1} 
pdfjam --nup 1x2 ${OUTPUT1} --outfile ${OUTPUT2} 

Non è molto elegante; potrebbe essere eseguito senza la seconda chiamata pdftk e non funziona con i file contenenti spazi. Ma funziona con i pdf di più pagine.

0

Utilizzando Adobe Acrobat XI Pro, aprire il primo documento. Modifica, selezionare "scatta un'istantanea", quindi fare clic nell'angolo superiore di ciò che si desidera copiare e trascinare nell'angolo opposto. Avere un foglio pulito aperto in Paint. Fai clic sul foglio pulito in vernice e controlla V per incollare il primo documento nel foglio pulito. Ripeti per il 2 ° oggetto che vuoi combinare nella stessa pagina, tranne posizionare temporaneamente il 2 ° oggetto SOTTO il 1 ° oggetto nel tuo foglio di pittura. Quindi trascinare il secondo oggetto per posizionarlo dove è necessario nel foglio di disegno. Salva il file del foglio di lavoro e il gioco è fatto!

+1

Adobe Acrobat XI Pro non è uno strumento gratuito, vero? Questo è ciò che l'OP ha chiesto. – mzjn

+0

Di solito non mettiamo gli umani nei nostri programmi qui. (non che la domanda sia in argomento, comunque) –

Problemi correlati