Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I know I have done this before, so I'm sure it's possible, I just forget how to do it. There's a way to tell convert to grab a specific page of a PDF, and I'd like to keep the format of that page as PDF.

share|improve this question

2 Answers 2

up vote 6 down vote accepted

ImageMagick is a tool for bitmap images, which most PDFs aren't. If you use it, it will rasterize the data, which is often not desirable.

Pdftk can extract one or more pages from a PDF file.

pdftk A=input.pdf cat A42 A43 output pages_42_43.pdf

If you have a LaTeX installation with PDFLaTeX, you can use pdfpages. There's a shell wrapper for pdfpages, pdfjam.

pdfjam -o pages_42_43.pdf input.pdf 42,43

Another possibility (overkill here, but useful for requirements more complex that one page) is Python with the PyPdf library.

#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
for i in [42, 43]:
    output.addPage(input.getPage(i))
output.write(sys.stdout)
share|improve this answer
    
I was about to recommend pdftk as well. You will want to use it. –  Sebastian Jun 10 '11 at 8:12
    
+1 and a check mark for reading my mind, @Gilles! –  ixtmixilix Jun 11 '11 at 20:50

You can use subscript notation with convert(1) to "index" into a PDF:

$ convert source.pdf[1] dest.pdf 

The index value depends on how the PDF exporter numbered the pages. In tests on files here, the numbers seem to be zero-based, so the above example gets you the second page in the document. I've seen examples online where they show letter indexes instead, since apparently the PDF creator "numbered" the pages in that document that way instead.

Unfortunately, this doesn't give very good results, because ImageMagick assumes everything is pixel-based, and therefore rasterizes vector imagery, such as the typography in a typical PDF.

A better tool for the job is Ghostscript, which you probably already have installed:

$ gs -dNOPAUSE -dBATCH -dFirstPage=2 -dLastPage=2 -sDEVICE=pdfwrite \
    -sOutputFile=dest.pdf -f src.pdf

This passes the PDF data through unchanged, since Ghostscript understands PDF (a PostScript derivative) to a much deeper level than ImageMagick does.

share|improve this answer
1  
actually that's not true about imagemagick, if you set the -density parameter to something around 300-400 then the outputted text from the pdf in the png will look just fine. –  buggedcom Aug 22 '12 at 23:19
    
It'll look fine on screen, sure, but if you then go to print, you'll want to set the density even higher. And then, you're likely to run into trouble with how your printer's RIP copes with the gray antialiasing pixels output by ImageMagick. So you can then choose instead to output to 1-bit B&W at your printer's native resolution, which might be 1,200 dpi, or 1,440 dpi or something else, and you have to know that in advance to get sharp output. No, I'll stand by my statement: best to keep PDF data in vector form as long as possible. –  Warren Young Aug 23 '12 at 2:21
    
@buggedcom I've found -density 300 is the sweet spot. Anything larger and you're creating huge temp files - which you're probably going to resize down to thumbnails anyway –  Mike Causer Dec 16 '13 at 3:26

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.