I have a single PDF file 6 pages long that I want to split into six seperate pdfs (1.pdf, 2.pdf, 3.pdf) such that each file produced represents one page from the input. I would love to be able to do this simple task from the command line.

2

6 Answers

Open up the pdf in preview and then on the view menu select thumbnails. Ctrl select the pages that you want now drag and drop them to the desktop.

1

This can be achieved by using pdfseparate. You can install poppler with homebrew, by brew install poppler. This will also install pdfseparate. To split the PDF document.pdf into into single pages 1.pdf, 2.pdf, etc. use:

pdfseparate document.pdf %d.pdf 
6

If you're interested in doing this from the command line, you can look at Benjamin Han's splitPDF python script to do the job. For instance:

splitPDF.py in.pdf 3 5 

would split the file in.pdf into 3 files, splitting at pages 3 and 5.

3

For another alternative, see this answer. This uses the ImageMagick command line tools.

convert x.pdf -quality 100 -density 300x300 x-%04d.pdf 

However, you have to be careful with the quality.

If you want to extract a range of pages, you can use the following script which you call like this (assumed that you save it to file pdfextract.py somewhere on your system's PATH, e.g. /usr/local/bin, and assign it execution permission with chmod 744 pdfextract.py):

pdfextract.py --file-in /path/to/large/pdf --file-out /path/to/new/pdf --start --stop

#!/usr/bin/env python # -*- coding: utf-8 -*- import argparse import os import subprocess as sp def main(): parser = argparse.ArgumentParser() parser.add_argument('--file-in', required=True, type=str, dest='file_in') parser.add_argument('--file-out', required=True, type=str, dest='file_out') parser.add_argument('--start', required=True, type=int, dest='start', default=-1) parser.add_argument('--stop', required=True, type=int, dest='stop', default=-1) args = parser.parse_args() assert os.path.isfile(args.file_in) assert not os.path.isfile(args.file_out) # remove temporary files for el in os.listdir('/tmp'): if os.path.isfile(os.path.join('/tmp', el)) and el[:12] == 'pdfseparate-': os.remove(os.path.join('/tmp', el)) sp.check_call('pdfseparate -f {:d} -l {:d} {:s} /tmp/pdfseparate-%d.pdf'.format(args.start, args.stop, args.file_in), shell=True) cmd_unite = 'pdfunite ' for i in range(args.start, args.stop + 1): cmd_unite += '/tmp/pdfseparate-{:d}.pdf '.format(i) cmd_unite += args.file_out sp.check_call(cmd_unite, shell=True) # remove temporary files for el in os.listdir('/tmp'): if os.path.isfile(os.path.join('/tmp', el)) and el[:12] == 'pdfseparate-': os.remove(os.path.join('/tmp', el)) if __name__ == "__main__": main() 

I have started to put together a tool to provide a simplified interface to common actions.

You can split PDFs into individual pages like this:

$ npm install @lancejpollard/act -g $ act split my.pdf -o outputDirectory 

If nothing else check out the source and see how to write your own script to do this in JavaScript.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy