In Mac OS X, the general system clipboard ("PasteBoard") can shuttle PDF (portable document format) content back and forth between applications. That's very convenient when you're producing and consuming high-quality drawings or mathematical formulas, since PDF can serve as a resolution-independent (vector) format.
There are some common problems with PDF, too — often related to closed-source software that doesn't quite manage to implement the PDF standard or play well with the rest of the operating system (I won't go into problems related to synchronizing X11 and system clipboards here, which for example affects Inkscape):
PDF through FontBegone, a utility I wrote long ago which still works fine.
PDF clipping that has been copied in cropped form doesn't preserve that cropping information when pasted into other programs; for this reason I wrote clipPDF, a script that manipulates the PasteBoard contents.
PDF on the PasteBoard, and that's what this page is about.
In Mathematica version 8, copying a PDF clipping from an external application (like Preview.app) into a Notebook seems to work reasonably well at first sight. However, there is a fatal flaw (and I've reported it to Wolfram):
To see the issue, type Export["text.pdf","This is a test PDF"];
and open the resulting file in Preview.app. Choose the "Select" tool,
, and do ⌘-C to copy. Back in Mathematica, start a new cell and type Export["test2.pdf", ] and paste (⌘-V) the clipboard content into the blank space of this export statement. The resulting new file, test2.pdf, will appear empty in Preview!
So pasted PDF cannot be exported back to a PDF file. This appears to go wrong for all pasted data of this format that I have tried.
As a work-around, I've made a Palette that you can install in Mathematica. Here is a step-by-step walk-through of the installation process (of interest also if you want to install your own palettes):
CreatePalette[
Column[{Button["Convert PDF on clipboard",
Module[{pdf,
out = "/tmp/MathematicaOutput" <>
StringJoin[Map[ToString, DateList[]]] <> ".pdf",
prog = "from AppKit import *\nboard=NSPasteboard.generalPasteboard()\nresult = board.dataForType_(NSPDFPboardType)\nif result:\n\tresult.writeToFile_atomically_('**FILENAME**',1)\n\" | /usr/bin/python"},
Run["printf \"" <>
StringReplace[prog, {"**FILENAME**" -> out}]];
CopyToClipboard[
If[FileExistsQ[out], pdf = Import[out, "PDF"];
DeleteFile[out];
pdf[[1]], "No PDF"]];
], Appearance -> "Palette"],
"Click before pasting externally generated PDF"}],
WindowTitle -> "Convert External PDF"];
PDF in Preview or another PDF viewer, copy a part of it (as described above) and click the palette button. The conversion is usually pretty quick, but I don't have any mechanism built in to alert you when it's done. If you now paste anywhere in a Mathematica notebook, the converted PDF should appear. If it doesn't, you may have to wait a moment longer and try pasting again. Then try exporting the pasted PDF as described above, and it should open fine in Preview. There are still pitfalls, see below.
PDF graphics for your Mathematica notebooks, you may want to install the palette permanently.
Install item from the Palette menu, as shown here:
Install Mathematica Item dialog asks you for a Source, which you find by looking for Convert External PDF in the pop-up menu, like so:
Convert External PDF for obvioius reasons.
The palette is now available as one of the menu items whenever you start Mathematica. Remember, you'll only need this when pasting PDF from sources other than Mathematica itself — copy and paste operations within the FrontEnd pose no problem.
The way this conversion button works is to create a temporary file from the Pasteboard content and use Mathematica's Import function to read it in as PDF. Fortunately, that actually doesn't have the bug that the paste process displays. So if you don't want to use my palette, just save your PDFs and Import them. Clearly, this is not as convenient as the copy-paste method; all I did was to make this detour a one-click step.
Unfortunately, Import isn't bug-free either when it comes to importing PDF. It seems do do fine re-importing files that were previously exported from Mathematica, but fails with externally produced documents because it can't handle the fonts.
Therefore, if you still have problems pasting PDF into your Notebook, you should consider downloading FontBegone. Follow the usage instructions on the linked page. For example, having copied a formula from a document in Preview, click the FontBegone icon first. Then click the Mathematica palette button we just installed. Now you're ready to paste the converted snippet into a Notebook.