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 PPTools THOR, The Hammer (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
- Memorize its position and size with THOR.
- Then after pasting in each new slide image, click the Hammer of THOR 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 the old Microsoft Answers forum (RIP) 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.