CommunityData:Embedding fonts in PDFs

From CommunityData
Jump to: navigation, search

To check to see if a PDF is missing fonts, you can use the program pdffonts which comes in the Debian/Ubuntu package poppler-utils and the Arch Linux package poppler. If you run:

pdffonts foo.pdf

It should tell if you if the font is missing any fonts in that they will have rows with "no" in the column labled "emb".

This bash script will run a magical incantation of ghostscript which will embed fonts:

#!/bin/bash

for file in "$@"
do
    tmp_file=$(tempfile)
    output_file=$(echo $file |perl -p -e 's/.pdf$/-embedded_fonts.pdf/')

    # add fonts to each pdf
    gs -dSAFER -dNOPLATFONTS -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
    -sPAPERSIZE=letter -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer \
    -dCompatibilityLevel=1.4 -dMaxSubsetPct=100 -dSubsetFonts=true \
    -dUseCIEColor=true \
    -dEmbedAllFonts=true \
    -sOutputFile="$tmp_file" -f "$file" > /dev/null

    mv "$tmp_file" "$output_file"
done


If you install this on your system (e.g., in bin/embed-fonts you can then just run it on a file like:

./embed-fonts foo.pdf

This will then create a new file called foo-embedded_fonts.pdf in the same directory as the original. You can verify that the fonts are embedded with pdffonts.