Come posso convertire un PDF con 2 lati per pagina in 1 lato per pagina?
Come posso convertire un PDF con 2 lati per pagina in 1 lato per pagina?
Risposte:
OK, il problema è già stato risolto con l'aiuto di Acrobat (versione completa, non Reader). Ma cosa fare se non si ha accesso ad Acrobat? Questo potrebbe essere fatto anche con Ghostscript e pdftk?
... e per divertirci, non usiamo un file di input con pagine "double-up", ma uno con "treble-up". In realtà, ho ricevuto uno di questi PDF oggi via e-mail. Era un volantino, piegato nello Schema di Leporello . La dimensione del foglio era A4 orizzontale (842pt x 595pt), ed era piegata e disposta in questo modo:
Front side to be printed, page 1 of PDF
+--------+--------+--------+ ^
| | | | |
| 5 | 6 | 1 | |
| | | | 595 pt
| | | | |
| | | | |
| | | | |
+--------+--------+--------+ v
^ ^
fold fold
v v
+--------+--------+--------+ ^
| | | | |
| 2 | 3 | 4 | |
| | | | 595 pt
| | | | |
| | | | |
| | | | |
+--------+--------+--------+ v
Back side to be printed, page 2 of PDF
<---------- 842 pt -------->
Voglio creare 1 PDF con 6 pagine, ognuna delle quali ha una dimensione insolita di 280,67pt x 595 pt.
Per prima cosa estraiamo le sezioni di sinistra da ciascuna delle pagine di input:
gswin32c.exe ^
-o left-sections.pdf ^
-sDEVICE=pdfwrite ^
-g2807x5950 ^
-c "<</PageOffset [0 0]>> setpagedevice" ^
-f myflyer.pdf
Cosa hanno fatto questi parametri?
-o ...............:
Nome file di output. Utilizza anche implicitamente -dBATCH -dNOPAUSE -dSAFER
.-sDEVICE=pdfwrite :
vogliamo PDF come formato di output.-g................:
imposta le dimensioni del supporto di output in pixel. La risoluzione predefinita di pdfwrite è 720 dpi. Quindi moltiplicare per 10 per ottenere una corrispondenza per PageOffset.-c "..............:
chiede a Ghostscript di elaborare lo snippet di codice PostScript specificato appena prima del file di input principale (che deve seguire con -f
).<</PageOffset ....:
imposta lo spostamento dell'immagine della pagina sul supporto. (Naturalmente, per le pagine a sinistra il passaggio da [0 0]
non ha alcun effetto reale.)-f ...............:
elaborare questo file di input.Quale risultato ha ottenuto l'ultimo comando?
Questo:
Output file: left-sections.pdf, page 1
+--------+ ^
| | |
| 5 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
Output file: left-sections.pdf, page 2
+--------+ ^
| | |
| 2 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
< 280 pt >
Ora facciamo la cosa analoga per le sezioni centrali:
gswin32c.exe ^
-o center-sections.pdf ^
-sDEVICE=pdfwrite ^
-g2807x5950 ^
-c "<</PageOffset [280.67 0]>> setpagedevice" ^
-f myflyer.pdf
Risultato:
Output file: center-sections.pdf, page 1
+--------+ ^
| | |
| 6 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
Output file: center-sections.pdf, page 2
+--------+ ^
| | |
| 3 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
< 280 pt >
Infine, le sezioni giuste:
gswin32c.exe ^
-o right-sections.pdf ^
-sDEVICE=pdfwrite ^
-g2807x5950 ^
-c "<</PageOffset [561.34 0]>> setpagedevice" ^
-f myflyer.pdf
Risultato:
Output file: right-sections.pdf, page 1
+--------+ ^
| | |
| 1 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
Output file: right-sections.pdf, page 2
+--------+ ^
| | |
| 4 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
< 280 pt >
Ora uniamo le pagine in un unico file:
pdftk.exe ^
A=right-sections.pdf ^
B=center-sections.pdf ^
C=left-sections.pdf ^
cat A1 B2 C2 A2 B1 C1 ^
output single-files-input.pdf
verbose
Fatto. Ecco il risultato desiderato. 6 pagine diverse, dimensioni 280,67x595.
Risultato:
+--------+ +--------+ +--------+ +--------+ +--------+ +--------+ ^
| | | | | | | | | | | | |
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | |
| | | | | | | | | | | | 595 pt
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
+--------+ +--------+ +--------+ +--------+ +--------+ +--------+ v
< 280 pt > < 280 pt > < 280 pt > < 280 pt > < 280 pt > < 280 pt >
f = open("order.dat","w")
for i in [a+1 for a in xrange(63)]: f.write("A{0} B{0} ".format(i))
f.close()
questo creerà un file order.dat con "A1 B1 A2 B2 ... A63 B63". È quindi possibile copiarlo e incollarlo in pdftk
.
@peims, grazie. Ecco la versione dettagliata del tuo metodo. L'ho provato su un file che volevo convertire per il mio Kindle DX, e funziona perfettamente:
Quindi, utilizzare pdftk.exe (da http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ ) per interfogliare i risultati in un singolo file. Copia "pdftk.exe", "left.pdf" e "right.pdf" in "D: \" ed esegui:
Nota: se copi i file in "C: \", non funzionerà con Win 7 a causa delle autorizzazioni di sicurezza. Se non si dispone di una D: \, creare una directory "C: \ x" per completare l'operazione.
Questi risultati sarebbero normalmente abbastanza buoni. Tuttavia, ci sono altri due passaggi opzionali per migliorare l'output.
Ho appena avuto lo stesso problema. Mi sono imbattuto in briss, uno strumento di GUI java open source per separare e ritagliare pagine pdf:
http://sourceforge.net/projects/briss/
Ha funzionato molto bene per me, su Linux, anche se l'interfaccia utente non è del tutto banale. Ha persino funzionato con un pdf con pagine di dimensioni diverse!
È possibile duplicare il documento, quindi ritagliare le pagine in modo che solo i numeri di pagina pari vengano visualizzati in un file e solo i numeri di pagina dispari nell'altro. Quindi dividere i file in singole pagine e ricombinarli per creare un documento con lati singoli in una pagina ...
Puoi farlo utilizzando una serie di metodi, ad esempio:
Uso il seguente script per elaborare libri digitalizzati su Mac e Linux. Questo può richiedere molta memoria.
#!/bin/bash
#
# This script processes scanned books. After scanning the books have been cropped with
# Preview. This does kind of a "soft crop" that we need to make a bit "harder".
#
# The second step is to take each page of the PDF and split this into two two pages,
# because each page of the scanned document actually contains two pages of the book.
#
#
FILE=`mktemp`.pdf
FILE2=`mktemp`.pdf
FILE3=`mktemp`.pdf
echo "Making a temporary copy of the input file."
cp $1 $FILE
#
# Start cropping
#
echo "Cropping the PDF"
# The first regex removes all boxes but CropBox. The second regex renames the CropBox as MediaBox
perl -pi.bak -e 's/\/(Media|Bleed|Art|Trim)Box[\n\l\f\s]*\[(.+?)\]//msg;' $FILE
perl -pi.bak -e 's/CropBox/MediaBox/g;' $FILE
echo "Validating the PDF"
#Run PDFTK to ensure that the file is OK
cat $FILE | pdftk - output $FILE2
#
# Done cropping, start splitting the pages
#
echo "Splitting the pages in two and changing to 200 dpi with imagemagick. Output goes to $FILE3"
convert -density 200 $FILE2 -crop 50%x0 +repage $FILE3
#
# Done spliting, copy the result in a new file
#
mv $FILE3 $1.pages.pdf
Grazie per un ottimo riferimento. Ero in un problema simile ma volevo condividere ciò che ha funzionato per me.
Avevo un pdf tabloid orientato al paesaggio con testo orientato al ritratto solo sul lato sinistro. Essenzialmente tabloid 2-up mancante di qualsiasi contenuto sul lato destro della pagina. Punto di partenza simile, ma il tabloid è 792 × 1224 (Ritratto), 1124 x 792 (Paesaggio) e la definizione del punto per il tabloid 1/2 di cui avevo bisogno era 612 x 792 punti.
"C:\Program Files\gs\gs9.10\bin\gswin64c.exe" -o left2.pdf -sDEVICE=pdfwrite -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f "RFP.pdf"
Mi ha procurato il contenuto di cui avevo bisogno in un ritratto di 8,5 x 11, molto più leggibile.
Quello che ho capito è che un file PDF che mostra due pagine (affiancate su un foglio) deve essere convertito in una pagina per foglio, risultando in due fogli di file PDF. In altre parole, se ci sono trenta pagine in totale su 15 fogli, dobbiamo convertire il file PDF in un file PDF di trenta fogli ciascuno con una pagina. Se questo è il problema, ho usato Adobe Acrobat XI PRO "Estrai strumento pagina" specificando i numeri di pagina da 1 a 30
Krop (Python) e PDFscissors (Java) non sono ancora stati menzionati, verificali se hai appunti di lezione su pdfnup-ped che vuoi tornare a un PDF di presentazione corretto.