Blog · PDF tips

Convert PDF pages to JPG for presentations

The deck template refused the PDF. Not a warning. A hard no from the layout app, which wanted a JPG or PNG in that picture frame and would not embed a page. I had a 14-page leave-behind and about twenty minutes before a dry run. This is the job PDF to JPG is for. It is a bad job if what you wanted was a smaller PDF.

The render, in the units the script uses

The converter loads PDF.js 3.11.174, takes each page’s viewport at scale: 2, and paints it to a canvas with alpha: false and a white background. JPG export then calls toBlob at quality 0.92. PNG uses the same scale and skips the JPEG quality argument. There is no DPI dropdown. Scale 2 is the product. On a US Letter page that is on the order of 1200 by 1600 pixels, enough for a full-slide image on a 1080p projector, not enough to reprint a poster.

Each page downloads separately: leave-behind-page-3.jpg and so on. I do not get a zip. On a 14-page file that means 14 saves. Annoying, and also the reason I do not convert a 200-page scan “just to have images.” Split first if you only need pages 4 and 9.

JPG exportPNG exportLeave it as PDF
Scale22native page
BackgroundWhite, no alphaWhite, no alphaWhatever the page specified
Text searchGoneGoneKept, if it was real text
Typical use I acceptPhoto-like slides, full-page stillsDiagrams and UI captures where edges matterThe file people will read

What I dropped into the deck, and what I refused

Pages 2, 6, and 11 were photos with a short caption. JPG at 0.92 looked clean at fullscreen. Page 7 was a table set in 9-point type with hairline rules. The JPEG blocks sat on the rules. I re-exported that one page as PNG from PDF to PNG and the rules held. Same scale, different codec. PNG was 3.1 MB for that page. JPG had been 480 KB. The deck could afford one heavy slide. It could not afford a fuzzy price table.

I did not convert the cover, which was already a designed slide in the deck. Converting the PDF cover and placing it back into the same deck is how you get a slide of a slide, with a second drop shadow you did not draw.

White background is not a bug you can toggle. Pages that used a full-bleed dark design still exported correctly as dark pictures, because the dark was painted content, not transparency. A logo PDF that expected a transparent surround came out on a white rectangle. For that logo I would not use this tool. I would export the logo from the design app. The page renderer is a page renderer. It is not a clipping-path extractor.

Locked pages and sideways scans

If PDF.js cannot open the file, you get a failure, not a partial JPG. Password first, via an unlock you are allowed to run, then convert. Sideways scans export sideways. Rotate the PDF, then render. The image tool will not guess which way the text should face. I rotated a phone scan 90 degrees, exported page 1, and dropped it into a slide labeled “as received.” That honesty mattered. The pretty version, rotated and cropped, was a different slide with a different caption.

One page failed once because the PDF had a broken image XObject and PDF.js threw during render. The status stopped on that page number. I split the bad page out, printed that single page to a new PDF from a desktop reader, and converted the print. The other pages did not need that treatment. Don’t reprint the whole document because one page is sick.

File weight inside a deck

Fourteen JPGs at roughly 400–900 KB each turned a 6 MB presentation into a 15 MB presentation. Fine for a laptop. Rude for someone joining on hotel wifi if you then emailed the deck. I linked the original PDF in the speaker notes and kept the images only for the three pages the template could not hold. The rest of the leave-behind stayed a PDF on a USB stick. Two artifacts, two jobs.

If the JPG is for a website hero, 0.92 at scale 2 is heavier than the web needs. I downscale in an image editor after export. Doing it inside the PDF tool is not an option here, and I would rather downscale a clean export than ask the PDF renderer to guess a thumbnail.

Search is gone. I say that again because someone always tries to select the caption inside the slide and then files a bug. The caption is paint. If you need the words, they live in the PDF you did not throw away. I keep that PDF next to the deck with the same date in the filename.

Batch habit that has not failed me: convert, open page 1 and the densest page at 100% in the slide, then at fullscreen from the back of the room or, lacking a room, with the laptop at arm’s length. If you can read the fee from the doorway, you are done. If you are squinting, switch that page to PNG or keep it as PDF and change the template. The scale is fixed. Your layout is not.

For a contact sheet of many pages, this many separate downloads is clumsy. I would rather split a range and convert the short PDF than sit through 80 save dialogs. The script loops 1..numPages with no page filter. The filter is a different tool, used earlier.

Crops, social posts, and one export I threw out

A square crop for a social post is not a PDF page. I exported the page, then cropped in an editor to the diagram in the upper third. Exporting the whole page and letting the social tool letterbox it produced a tiny diagram inside a white field. The scale-2 JPG had the pixels. The framing was my job afterward.

One export I deleted: a page with a pale yellow highlight over a paragraph. JPEG at 0.92 turned the highlight into a blotchy band and made the highlighted sentence look corrupted. PNG held the flat color. Highlighted pages go to PNG. Photo pages go to JPG. I do not pick the format from the tool I happened to open. I pick it from what is on the page.

If you are building a contact sheet for internal review, 150 DPI-ish (this scale on letter) is enough to see if a figure is the right figure. It is not a proof for print. I write “screen still, not a print proof” in the slide footer when the image came from this path, so nobody sends it to a magazine. The PDF remains the print file. The JPG is a picture of a decision, not the decision’s source.

Speaker notes still hold the searchable sentence. I paste the fee figure into the notes from the PDF, not from memory of the JPG. When someone later asks “what was the number on slide 6,” the notes answer, and the JPG only has to look like the right chart. Those are different duties. I stopped expecting one file to do both after the highlight-on-a-picture bug report. It was not a bug. It was the export working as designed.