Downloads

Last updated 26 October 2026

Everything here is free. Your files stay on your device, as on the website: nothing is uploaded.

PDF and Photo for Google Chrome™

Our extension shows the PDFs you open in Chrome in our viewer, with Fill & sign, Compress and every other PDF tool one click away. It collects nothing.

Add to Chrome

One step only you can do: Chrome lets an extension open PDFs saved on your computer (email attachments, downloads) only after you allow it. Without it, those PDFs open in Chrome’s own viewer.

  1. In Chrome’s address bar, type chrome://extensions and press Enter.
  2. On the PDF and Photo card, click Details.
  3. Switch on Allow access to file URLs.

Make PDF and Photo your computer’s PDF app

Then the PDFs on your computer open in PDF and Photo when you double-click them, also from your email, with the tools one click away. No program can make itself the PDF app: Windows and macOS let only you choose it, in two steps.

  1. Add PDF and Photo as an app. Open the PDF viewer in Chrome or Edge on your computer and click Add as an app (or the install button at the right end of the address bar, then Install).
  2. Choose it as your PDF app.
    • Windows 11 and 10: right-click any PDF, choose Open with, then Choose another app. Pick PDF and Photo and click Always (on Windows 10, tick Always use this app to open .pdf files, then click OK). Or open Settings, Apps, Default apps, type .pdf in the box Set a default for a file type or link type, click the app shown under it, choose PDF and Photo and click Set default.
    • Mac: in Finder, Control-click any PDF and choose Get Info. Under Open with, choose PDF and Photo, then click Change All… and Continue.

PDF and Photo for Windows: PDF previews in Outlook and File Explorer

Outlook’s reading pane and File Explorer’s preview pane show PDFs through a small part of Windows called a preview handler. A website or an app in your browser can’t add one. When a PDF program that had set one up is removed, Outlook says “This file cannot be previewed because there is no previewer installed for it”.

This small download fixes that, and puts the PDF and Photo icon on your PDF files:

Download PDF and Photo for Windows

A zip file of 38 KB for Windows 10 and 11. Its SHA-256 fingerprint: 9263314f49f5a993fd9c8ecc9f1879b4fca13ae795ec197f448151f8dcb49a5c

  1. Right-click the zip file and choose “Extract All…”.
  2. In the folder, double-click “Set up PDF and Photo on Windows.cmd”.
  3. Windows checks files from the internet that it doesn’t know yet. If it shows Windows protected your PC, click More info, then Run anyway.
  4. Close Outlook and open it again, then click a PDF attachment once. In File Explorer, press Alt+P to show the preview pane.
Read every line of the scripts before you run them

The download holds these scripts in plain text (open the .ps1 files in Notepad), with the two buttons that run them, a check that changes nothing (“PDF check.cmd”), the icon and a short read-me.

set-pdf-preview.ps1

# PDF and Photo: PDF previews in Outlook and File Explorer on Windows (26 October 2026).
#
# Why this is needed: Outlook's reading pane and File Explorer's preview pane draw a PDF with a Windows
# "preview handler" registered for PDF files. A website, an installed web app (like PDF and Photo) or a
# Chrome extension can't add one. When a PDF program that had set its own previewer is removed (Adobe
# Acrobat, for example), PDF files are often left with no previewer at all, and Outlook says "This file
# cannot be previewed because there is no previewer installed for it".
#
# What this does, for your Windows account only (no administrator needed):
#   1. checks that the "Microsoft PDF Previewer" that Microsoft Edge installs (and keeps up to date) is on
#      this computer, and that its file is really there;
#   2. if PDF files already have a working previewer (from Adobe, Foxit, Edge or another program), changes
#      nothing and says which one;
#   3. otherwise sets that previewer for PDF files under HKEY_CURRENT_USER\Software\Classes\.pdf, and
#      notes under HKEY_CURRENT_USER\Software\PDFandPhoto that it did, so the undo removes only its own change.
# Nothing else is changed. It doesn't change which program opens PDF files.
# To undo: run this with -Undo ("Undo PDF and Photo set-up.cmd" does): it removes the setting again, only if it is
# still the one this set.

param([switch]$Undo)
$ErrorActionPreference = 'Stop'

$previewKey = 'ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}'   # Windows' fixed name for "preview handler"
$edgePreviewer = '{3A84F9C2-6164-485C-A7D9-4B27F8AC009E}'         # "Microsoft PDF Previewer", installed by Edge
$userKey = "Registry::HKEY_CURRENT_USER\Software\Classes\.pdf\$previewKey"
$markKey = 'Registry::HKEY_CURRENT_USER\Software\PDFandPhoto'
$markName = 'PdfPreviewSet'

function Read-Default([string]$path) {
  try { return (Get-ItemProperty -LiteralPath "Registry::$path" -ErrorAction Stop).'(default)' } catch { return $null }
}
function Handler-File([string]$clsid) {
  # The file a preview handler runs from, or $null when it isn't registered or the file is gone.
  if (-not $clsid) { return $null }
  $dll = Read-Default "HKEY_CLASSES_ROOT\CLSID\$clsid\InProcServer32"
  if (-not $dll) { return $null }
  $dll = [Environment]::ExpandEnvironmentVariables($dll.Trim('"'))
  if (Test-Path -LiteralPath $dll) { return $dll } else { return $null }
}
function Handler-Name([string]$clsid) {
  $n = Read-Default "HKEY_CLASSES_ROOT\CLSID\$clsid"
  if ($n) { return $n } else { return $clsid }
}
function Tell-Windows {
  # "File types changed": Explorer reads the PDF settings again. Outlook reads them when it starts.
  try {
    Add-Type -Namespace PdfAndPhoto -Name Shell2 -MemberDefinition '[System.Runtime.InteropServices.DllImport("shell32.dll")] public static extern void SHChangeNotify(int wEventId, uint uFlags, System.IntPtr dwItem1, System.IntPtr dwItem2);'
    [PdfAndPhoto.Shell2]::SHChangeNotify(0x08000000, 0x1000, [System.IntPtr]::Zero, [System.IntPtr]::Zero)
  } catch { }
}

$mark = $null
try { $mark = (Get-ItemProperty -LiteralPath $markKey -ErrorAction Stop).$markName } catch { }

if ($Undo) {
  $now = $null
  try { $now = (Get-ItemProperty -LiteralPath $userKey -ErrorAction Stop).'(default)' } catch { }
  if ($mark -and $now -eq $mark) {
    Remove-Item -LiteralPath $userKey -Force
    Write-Host 'Done: the PDF previewer setting made by PDF and Photo was removed.'
  } elseif ($now) {
    Write-Host "PDF files have a previewer setting that PDF and Photo didn't make ($(Handler-Name $now)), so it was left as it is."
  } else {
    Write-Host 'There was nothing to undo.'
  }
  if ($mark) { Remove-ItemProperty -LiteralPath $markKey -Name $markName -ErrorAction SilentlyContinue }
  if (Test-Path -LiteralPath $markKey) {
    $left = (Get-Item -LiteralPath $markKey).GetValueNames().Count + @(Get-ChildItem -LiteralPath $markKey).Count
    if ($left -eq 0) { Remove-Item -LiteralPath $markKey -Force }
  }
  Tell-Windows
  Write-Host 'Close Outlook and open it again for the change to show there.'
  exit 0
}

# 1. The previewer we would use.
$edgeFile = Handler-File $edgePreviewer
if (-not $edgeFile) {
  Write-Host "The Microsoft PDF Previewer that Microsoft Edge installs isn't on this computer, so nothing was changed."
  Write-Host 'Updating Microsoft Edge (open Edge, then Settings, About Microsoft Edge) usually installs it. Then run this again.'
  exit 1
}

# 2. Does PDF already have a working previewer? Windows looks at the program that opens PDF files first,
#    then at .pdf itself.
$choice = $null
foreach ($sub in 'UserChoiceLatest\ProgId', 'UserChoiceLatest', 'UserChoice') {
  if ($choice) { break }
  try { $choice = (Get-ItemProperty -LiteralPath "Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\$sub" -ErrorAction Stop).ProgId } catch { }
}
$fromProgram = if ($choice) { Read-Default "HKEY_CLASSES_ROOT\$choice\$previewKey" } else { $null }
$fromPdf = Read-Default "HKEY_CLASSES_ROOT\.pdf\$previewKey"

if ($fromProgram -and (Handler-File $fromProgram)) {
  Write-Host "PDF files already have a working previewer: $(Handler-Name $fromProgram) (set by the program that opens PDF files). Nothing was changed."
  exit 0
}
if ($fromPdf -and ($fromPdf -ne $mark) -and (Handler-File $fromPdf)) {
  Write-Host "PDF files already have a working previewer: $(Handler-Name $fromPdf). Nothing was changed."
  exit 0
}
if ($fromProgram -and -not (Handler-File $fromProgram)) {
  Write-Host "Note: the program that opens PDF files ($choice) names a previewer that isn't on this computer any more."
  Write-Host 'Windows may try that one first. If previews still don''t show after this, choose PDF and Photo as your PDF app.'
}

# 3. Set the Microsoft PDF Previewer for PDF files, for this Windows account.
if (-not (Test-Path -LiteralPath $userKey)) { New-Item -Path $userKey -Force | Out-Null }
Set-ItemProperty -LiteralPath $userKey -Name '(default)' -Value $edgePreviewer
if (-not (Test-Path -LiteralPath $markKey)) { New-Item -Path $markKey -Force | Out-Null }
Set-ItemProperty -LiteralPath $markKey -Name $markName -Value $edgePreviewer
Tell-Windows

Write-Host 'Done. PDF files now use the Microsoft PDF Previewer for previews.'
Write-Host 'Close Outlook and open it again, then click a PDF attachment once: it shows in the reading pane.'
Write-Host 'In File Explorer, press Alt+P to show the preview pane, then click a PDF once.'

set-pdf-icon.ps1

# PDF and Photo: puts the PDF and Photo icon on PDF files in File Explorer (25 October 2026).
#
# Why this is needed: Chrome registers the installed PDF and Photo app as a program for PDF files, but it
# gives Windows no icon for the files themselves (its registry entry has no "DefaultIcon"), so File Explorer
# shows a blank page on every PDF. Nothing on the website can change that.
#
# What this does, for your Windows account only:
#   1. copies the icon to AppData\Local\PDFandPhoto\pdf-file.ico in your user folder;
#   2. adds that icon ("DefaultIcon") to PDF and Photo's own entry under HKEY_CURRENT_USER\Software\Classes;
#   3. tells File Explorer to redraw its icons.
# Nothing else is changed. If the app is ever reinstalled, Chrome rewrites its entry: run this again.
# To undo: run this with -Undo ("Undo PDF and Photo set-up.cmd" does): it removes the icon entry and the icon file.

param([switch]$Undo)
$ErrorActionPreference = 'Stop'

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$destDir = Join-Path $env:LOCALAPPDATA 'PDFandPhoto'
$ico = Join-Path $destDir 'pdf-file.ico'
$classes = 'Registry::HKEY_CURRENT_USER\Software\Classes'

function Update-Icons {
  # Tells File Explorer to read the icons again. If Windows refuses, the change is still made: it shows after
  # pressing F5 in a folder, or after a restart.
  $told = $false
  try {
    Add-Type -Namespace PdfAndPhoto -Name Shell -MemberDefinition '[System.Runtime.InteropServices.DllImport("shell32.dll")] public static extern void SHChangeNotify(int wEventId, uint uFlags, System.IntPtr dwItem1, System.IntPtr dwItem2);'
    # SHCNE_ASSOCCHANGED, SHCNF_FLUSH: "file types changed", so Explorer reads the icons again.
    [PdfAndPhoto.Shell]::SHChangeNotify(0x08000000, 0x1000, [System.IntPtr]::Zero, [System.IntPtr]::Zero)
    $told = $true
  } catch { }
  $ie4 = Join-Path $env:SystemRoot 'System32\ie4uinit.exe'
  if (Test-Path -LiteralPath $ie4) { try { & $ie4 -show; $told = $true } catch { } }
  if (-not $told) { Write-Host "File Explorer couldn't be told to redraw its icons. Press F5 in a folder, or restart the PC once." }
}

# 1. Find PDF and Photo's entries. Chrome gives each one an "Application" key whose ApplicationName is the
#    app's name (Chrome adds the profile's name when the app is installed in more than one profile).
$progIds = New-Object System.Collections.Generic.List[string]
foreach ($k in Get-ChildItem -LiteralPath $classes -ErrorAction SilentlyContinue) {
  $name = $k.PSChildName
  if ($name.StartsWith('.')) { continue }
  $appKey = "$classes\$name\Application"
  if (Test-Path -LiteralPath $appKey) {
    $appName = $null
    try { $appName = (Get-ItemProperty -LiteralPath $appKey -ErrorAction Stop).ApplicationName } catch { }
    if ($appName -like 'PDF and Photo*') { $progIds.Add($name) }
  }
}

# The program Windows opens PDF files with now (newer Windows 11 versions keep it in "UserChoiceLatest").
$choice = $null
foreach ($sub in 'UserChoiceLatest\ProgId', 'UserChoiceLatest', 'UserChoice') {
  if ($choice) { break }
  try { $choice = (Get-ItemProperty -LiteralPath "Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\$sub" -ErrorAction Stop).ProgId } catch { }
}

if ($Undo) {
  # Removes the icon entry from PDF and Photo's entries (if the app is still installed) and the icon file.
  foreach ($p in $progIds) { Remove-Item -LiteralPath "$classes\$p\DefaultIcon" -Recurse -ErrorAction SilentlyContinue }
  if (Test-Path -LiteralPath $ico) { Remove-Item -LiteralPath $ico -Force }
  if ((Test-Path -LiteralPath $destDir) -and -not (Get-ChildItem -LiteralPath $destDir -Force)) { Remove-Item -LiteralPath $destDir -Force }
  Update-Icons
  Write-Host "Done: the PDF and Photo file icon was removed again ($($progIds.Count) entry or entries, and the icon file)."
  exit 0
}

if ($progIds.Count -eq 0) {
  Write-Host "PDF and Photo isn't installed as an app for PDF files on this computer, so there is nothing to change."
  if ($choice) { Write-Host "Windows opens PDF files with: $choice" }
  Write-Host "How to install it and make it your PDF app: https://pdfandphoto.com/downloads/#app . Then run this again."
  exit 1
}

# 2. The icon file, in a folder of your own that stays put.
New-Item -ItemType Directory -Force -Path $destDir | Out-Null
Copy-Item -LiteralPath (Join-Path $here 'pdf-and-photo-file.ico') -Destination $ico -Force

# 3. The icon entry on each PDF and Photo entry.
foreach ($p in $progIds) {
  $key = "$classes\$p\DefaultIcon"
  if (-not (Test-Path -LiteralPath $key)) { New-Item -Path "$classes\$p" -Name 'DefaultIcon' | Out-Null }
  Set-ItemProperty -LiteralPath $key -Name '(default)' -Value "$ico,0"
  Write-Host "Icon set on PDF and Photo's entry: $p"
}

Update-Icons

Write-Host ''
if ($choice -and -not $progIds.Contains($choice)) {
  Write-Host "Note: Windows doesn't open PDF files with PDF and Photo at the moment (it uses: $choice)."
  Write-Host "Right-click a PDF, Open with, Choose another app, pick PDF and Photo and click Always. The new icon then shows."
} else {
  Write-Host 'Done. Look at your PDF files in File Explorer: they now show the PDF and Photo icon.'
  Write-Host 'If a folder still shows the old icon, click in it and press F5. If it is still old, restart the PC once.'
}

On a Mac there is nothing to download: Finder and Mail show PDF previews by themselves.