Ya no necesitas indagar más por todo internet porque estás al lugar exacto, contamos con la solución que necesitas sin complicarte.
Solución:
pdftk
es capaz de recortar un conjunto fijo de páginas de manera eficiente. Con un poco de pegamento para secuencias de comandos, esto hace lo que quiero:
number=$(pdfinfo -- "$file" 2> /dev/null | awk '$1 == "Pages:" print $2')
count=$((number / pagesper))
filename=$file%.pdf
counter=0
while [ "$count" -gt "$counter" ]; do
start=$((counter*pagesper + 1));
end=$((start + pagesper - 1));
counterstring=$(printf %04d "$counter")
pdftk "$file" cat "$start-$end" output "$filename_$counterstring.pdf"
counter=$((counter + 1))
done
Esto supone que tiene el número de páginas por fragmento en $pagesper
y el nombre de archivo del PDF de origen en $file
.
Si usted tiene acroread
instalado, también puede utilizar
acroread -size a4 -start "$start" -end "$end" -pairs "$file" "$filename_$counterstring.ps"
acroread
ofrece la opción -toPostScript
que puede ser útil.
Ver también pdfseparate
y pdfunite
desde poppler-utils
. pdfseparate
divide el archivo en un archivo por página, lo que lo hace relativamente fácil de volver a ensamblar a voluntad más adelante con pdfunite
manualmente o (semi-)automáticamente.
Como con zsh:
autoload zargs
reunite() pdfunite "[email protected]" file-$1-$argv[-1].pdf
pdfseparate file.pdf p%d
zargs -n 5 p<->(n) -- reunite
rm -f p<->
se dividiría file.pdf
en file-p1-p5.pdf
, file-p6-p10.pdf
…
Pienso que Python con la biblioteca PyPdf es conveniente para aquellos trabajos que pdftk no hace convenientemente (o en absoluto).
#!/usr/bin/env python
import sys
from pyPdf import PdfFileWriter, PdfFileReader
# Command line parsing
if len(sys.argv) < 2 or sys.argv[1][-4:] != '.pdf':
sys.stderr.writeln('Usage: ' + sys.argv[0] + ''' FILE.pdf N
Split FILE.pdf into chunks of N pages each.''')
exit(3)
pages_per_file = int(sys.argv[2])
base_name = sys.argv[1][:-4] + '-'
input_pdf = PdfFileReader(open(sys.argv[1]))
output_pdf = PdfFileWriter()
num_pages = input_pdf.getNumPages()
for i in xrange(num_pages):
output_pdf.addPage(input_pdf.getPage(i))
if (i + 1) % pages_per_file == 0 or i + 1 == num_pages:
output_file = open(base_name + str(i / pages_per_file + 1) + '.pdf', "wb")
output_pdf.write(output_file)
output_file.close()
output_pdf = PdfFileWriter()
Aquí puedes ver las comentarios y valoraciones de los lectores
Puedes añadir valor a nuestra información dando tu experiencia en los informes.