This is the method I used on my entire Zotero library (~3GB of PDFs). Note that the only annotations I use are highlighting (single color) and comments. Whether or not this successfully converts more complicated annotations depends on the detail of the skimembed script, which I don't know much about.
The original skimembed script converts a single PDF with skim annotations (which are in the form of "extended attributed") to a single PDF with embedded annotations. It is a shell script you run from the command line (terminal) using this notation
sh skimembed pdf_with_skim_annotations.pdf
or more generally
sh /path/to/scripts/folder/skimembed /path/to/pdf/folder/pdf_with_skim_annotations.pdf
sh is the shell program you use to interpret the script
skimembed. This script basically is just an automated way of using
File > Export...PDF with embedded notes from the Skim menu. However, it does not make a second copy of the pdf; the new version replaces it and has the same name.
I then Googled around for a shell script that lets you apply skimembed recursively to all pdf files in a folder (including subfolders):
find $1 -type f -name "*.pdf" | while read f ; do
sh /path/to/scripts/filder/skimembed "$f"
$1 denotes the path to a folder, the first (and only) argument this script expects to receive. The
find command returns all normal (
-type f) files in that folder with the pdf ending (
name "*.pdf"). The results are piped (
|) to a
while loop indexed by
I saved the above text in a file called recursiveskiembed.sh and then ran
sh recursiveskiembed.sh /path/to/pdfs/folder
In my case, the folder I choose was
/Users/username/Library/Application Support/Zotero/Profiles/xxx123.default/zotero/storage. This takes every single PDF with Skim annotations in the folder and replaces them with normal, embedded PDF annotations.
What didn't work
I tried the user-submitted Skim scripts and in particular the skimalot script (which is a successor to skimembed) and the FilingEagle script and some other. But I couldn't get any of them to work. (Note that the sugarsync.com hosted files are dead links now.) Likewise, the half dozen AppleScript scripts always seem to fail with completely inscrutable errors.
The clobbergaurd script is supposed to check a large directory for filenames that differ only in ending to prevent you from overwriting stuff using skimalot, but I couldn't get it work. (The sugarsync link is dead, but a Google search turned up this Dropbox copy.) So I just backed up my zotero library and I crossed my fingers.