PowerPoint 2007 and PowerPoint 2010: Slide image in notes pages is low-rez / jaggy
Problem
You print or make PDFs of Notes Pages from PowerPoint 2007 and find that the text and other graphics on your slide looks jagged or low-resolution.
Manual Solution
Thanks to Rick Altman (of Presentation Summit fame) for this one. For each slide in the presentation:
- Go to Slide Sorter view and copy the slide's thumbnail (click the thumbnail, press Ctrl + C)
- Switch to Notes Page view.
- Delete the existing slide image placeholder.
- Paste (Ctrl + V) to put a better quality image of your slide on the notes page. Position and size the new image to suit your needs.
Here's a tip that'll make this go more quickly:
- Switch to Notes Page view.
- On the View tab, Window group, click New Window.
- Switch to Slide Sorter view.
- On the View tab, Window group, click Arrange All.
Now you have two views of the same presentation. You can select and copy images from Slide Sorter and paste into Notes Page without having to switch back and forth between views.
And another:
Use the Pick Up Position and Place Exactly tools from the free PPTools Starter Set or the PPTools THOR add-in (both are free) to automatically size and position the slide images after you paste them onto the Notes Page:
- Click the original slide image on the Notes Page to select it
- Click the button to the left of the hammer icon on the Starter Set toolbar. This memorizes the position of the slide image.
- Then after pasting in each new slide image, click the hammer icon to size and position it automatically.
Automated VBA Solution for PPT 2007 or later
Sub BetterPDFNotes() Dim oSl As Slide Dim oNewImage As Shape Dim oOldImage As Shape For Each oSl In ActivePresentation.Slides Call oSl.Export(ActivePresentation.Path & "\" & CStr(oSl.SlideIndex) & ".EMF", "EMF") Set oOldImage = NotesPageSlidePlaceholder(oSl) If Not oOldImage Is Nothing Then Set oNewImage = oSl.NotesPage.Shapes.AddPicture( _ ActivePresentation.Path & "\" & CStr(oSl.SlideIndex) _ & ".EMF", False, True, 0, 0, 200, 200) With oNewImage .Left = oOldImage.Left .Top = oOldImage.Top .height = oOldImage.height .width = oOldImage.width .Tags.Add "TempImage", "YES" End With ' and after it's all working to perfection ' ooldimage.Delete ' or just leave the original hidden there behind the EMF End If Next End Sub Function NotesPageSlidePlaceholder(oSl As Slide) As Shape ' Returns the slide placeholder on the notes page Dim oSh As Shape For Each oSh In oSl.NotesPage.Shapes If oSh.Type = msoPlaceholder Then If oSh.PlaceholderFormat.Type = ppPlaceholderTitle Then Set NotesPageSlidePlaceholder = oSh Exit Function End If End If Next End Function
Automated VBA Solution with improvements for PPT 2010
Here's another approach suggested by mattaw2001 on Microsoft Answers in response to the above, and problems getting it to work correctly in PPT 2010. I've modified it quite a bit to suit my own way of doing things, but left mattlaw2001's improvements intact (but see below for an even further improved version from mattlaw2001):
- Dealing with the fact that PowerPoint 2010 can have multiple notes pages per slide; this works on the first page only.
- Pasting a copy of the original slide as a slide object rather than exporting to EMF and reimporting.
- Adding a line around the slide placeholder.
Sub FixUpNotePageSlideImages() Dim lOriginalView As Long Dim oSl As Slide Dim oSh As Shape Dim old_placeholder As Shape Dim oNewSh As Shape ' Store user's original view lOriginalView = ActiveWindow.ViewType ' Change to notespage view ActiveWindow.ViewType = ppViewNotesPage For Each oSl In ActivePresentation.Slides oSl.Copy ' have we already run this code? If so, the original ' slide image has been replaced and tagged: For Each oSh In oSl.NotesPage(1).Shapes If Len(oSh.Tags("NEWNOTESPLACEHOLDER")) > 0 Then ' found it Set old_placeholder = oSh Exit For End If Next If old_placeholder Is Nothing Then ' no previously replaced shape here, so get the original ' slide image placeholder: For Each oSh In oSl.NotesPage(1).Shapes If oSh.Type = msoPlaceholder Then If oSh.PlaceholderFormat.Type = ppPlaceholderTitle Then Set old_placeholder = oSh Exit For End If End If Next End If ' If there's no slide image placeholder on the notes page, ' skip this slide If old_placeholder Is Nothing Then ' nothing to do here Else ' it's ok to continue With ActiveWindow .View.GotoSlide (oSl.SlideIndex) .View.Paste End With With ActiveWindow.Selection.ShapeRange(1) .Left = old_placeholder.Left .Top = old_placeholder.Top .Width = old_placeholder.Width .Height = old_placeholder.Height .Tags.Add "NEWNOTESPLACEHOLDER", "YES" .Line.Weight = 1 End With old_placeholder.Delete Set old_placeholder = Nothing End If Next ' Restore original view ActiveWindow.ViewType = lOriginalView End Sub
mattaw2001 notes that PowerPoint will render some slide objects as bitmaps no matter what:
- Bitmap, JPEG or other non-vector formats have to be rendered as they are NOT vector information to start with.
- Vector images that have had any post processing options such as desaturation, transparency, etc. and most of the effects are from "Picture Corrections", "Picture Color" and "Artistic Effects" but there may be more. PowerPoint implements these effects by converting to bitmap and then post processing the result. That results in point 1) above. Stick to simple line art and imported EMFs and test before assuming it is going to work.
Mattaw2001's even FURTHER improved version
There's a problem with converting slides to EMFs for use on notes pages. Here ... we'll let mattaw2001 explain it:
The filesize of a complex, large presentation could easily balloon to larger than 500 megabytes!
Here is the old VBA macro but with a new addition - a cleaner subroutine that deletes the copy'n'pasted slide and puts the microsoft low res placeholder back!
Convert between the two at the click of a button for those high quality prints to PDF or high quality paper output. Both are non-destructive UNLESS YOU HAVE HEAVILY CUSTOMIZED YOUR NOTES PAGES ALREADY. You have been warned...
And here's the updated code:
Sub FixUpNotePageSlideImages() Dim lOriginalView As Long Dim oSl As Slide Dim oSh As Shape Dim old_placeholder As Shape ' Store user's original view lOriginalView = ActiveWindow.ViewType ' Change to notespage view ActiveWindow.ViewType = ppViewNotesPage For Each oSl In ActivePresentation.Slides oSl.Copy ' have we already run this code? If so, the original ' slide image has been replaced and tagged: For Each oSh In oSl.NotesPage(1).Shapes If Len(oSh.Tags("NEWNOTESPLACEHOLDER")) > 0 Then ' found it Set old_placeholder = oSh Exit For End If Next If old_placeholder Is Nothing Then ' no previously replaced shape here, so get the original ' slide image placeholder: For Each oSh In oSl.NotesPage(1).Shapes If oSh.Type = msoPlaceholder Then If oSh.PlaceholderFormat.Type = ppPlaceholderTitle Then Set old_placeholder = oSh Exit For End If End If Next End If ' If there's no slide image placeholder on the notes page, ' skip this slide If old_placeholder Is Nothing Then ' nothing to do here Else ' it's ok to continue With ActiveWindow .View.GotoSlide (oSl.SlideIndex) .View.Paste End With With ActiveWindow.Selection.ShapeRange(1) .Left = old_placeholder.Left .Top = old_placeholder.Top .Width = old_placeholder.Width .Height = old_placeholder.Height .Tags.Add "NEWNOTESPLACEHOLDER", "YES" .Line.Weight = 1 End With old_placeholder.Delete Set old_placeholder = Nothing End If Next ' Restore original view ActiveWindow.ViewType = lOriginalView End Sub Sub CleanFixUpNotePageSlideImages() Dim lOriginalView As Long Dim oSl As Slide Dim oSh As Shape Dim old_placeholder As Shape ' Store user's original view lOriginalView = ActiveWindow.ViewType ' Change to notespage view ActiveWindow.ViewType = ppViewNotesPage For Each oSl In ActivePresentation.Slides ' have we already run this code? If so, the original ' slide image has been replaced and tagged: For Each oSh In oSl.NotesPage(1).Shapes If Len(oSh.Tags("NEWNOTESPLACEHOLDER")) > 0 Then ' found it Set old_placeholder = oSh Exit For End If Next If old_placeholder Is Nothing Then ' nothing to do here Else ' it's ok to continue old_placeholder.Delete Set old_placeholder = Nothing ' restore the original microsoft slide placeholder oSl.NotesPage.Shapes.AddPlaceholder ppPlaceholderTitle End If Next ' Restore original view ActiveWindow.ViewType = lOriginalView End Sub
See How do I use VBA code in PowerPoint? to learn how to use this example code.