As it is pointed out in my old answer here, graphics and text are displayed inside of the FrontEnd in the style environment defined by the ScreenStyleEvironment
option while are Export
ed into "PDF"
in the style environment defined by the PrintingStyleEnvironment
option:
Options[$FrontEnd, {ScreenStyleEnvironment,
PrintingStyleEnvironment}]
{PrintingStyleEnvironment -> "Printout",
ScreenStyleEnvironment -> "Working"}
The "Working"
and "Printout"
style environments are defined in the default Core.nb stylesheet and differ in the value of Magnification
option which is set to 1
in the "Working"
and to 0.8
in the "Printout"
style environment correspondingly:

It is possible to override the value of this option by setting it explicitly via Style
:
text = Style["Hig", 72, FontFamily -> "Times New Roman",
Magnification -> 1]
textOutlines =
First[ImportString[ExportString[text, "PDF"],
"TextMode" -> "Outlines"]];
Style[textOutlines, Magnification -> 1]

We can check that the outlines and the text have identical sizes:
Style[Show[textOutlines,
Prolog -> {Red, Text[text, {0, 0}, {-1, -1}]}], Magnification -> 1]

A step-by-step explanation HOW it works:
- As Sjoerd correctly points out in his answer, the glyphs are displayed on the screen with
FontProperties -> "ScreenResolution" -> 72
by default. In practice it means that each displayed pixel on the screen corresponds to 1/72 of inch (when Magnification
is set to 1
) and so a glyph of height 72 printer's points will have height 72 pixels on the screen (even if on the level of operating system is set other resolution for rendering of fonts).
- The internal coordinate system of PDF file is defined in printer's points (one printer's point = 1/72 of inch). It means that if we
Export
a glyph of height 72 printer's points to PDF with Magnification -> 1
then the glyph will have height 72 units in the internal coordinate system of the PDF file. So when we convert the glyphs to outlines and Import
the outlines we get a plot which internal coordinate system is defined in printer's points.
The Graphics
object created from the Import
ed PDF figure has AspectRatio -> Automatic
and ImageSize
set to the size of the imported figure in printer's points without any extra paddings:
textOutlines // Options
{ImageSize -> {108., 81.},
PlotRange -> {{0., 108.}, {0., 81.}}, AspectRatio -> Automatic}
The combination of these factors gives us the situation when each unit on the plot corresponds to one pixel on the screen and is equal to one printer's point of displayed glyph (when Magnification
is set to 1
). So we get identical sizes of the glyphs and outlines. But when we turn on the Frame
we add extra paddings and the coordinates no longer correspond to printer's points:
Style[Show[textOutlines,
Prolog -> {Red, Text[text, {0, 0}, {-1, -1}]}, Frame -> True],
Magnification -> 1]

For obtaining correct coordinate scalings we need to carefully define PlotRange
, ImagePadding
and ImageSize
:
plotSize = {120, 100};(* in arbitrary units *)
imagePadding = 20;(* in printer's points *)
imageSize = plotSize + 2*imagePadding;(* in printer's points; now the internal
coordinate system of the plot will be in printer's points *)
plot = Style[
Show[textOutlines, Frame -> True,
FrameTicks -> {{Automatic, {72}}, {Automatic, None}},
GridLines -> {None, {72}}, ImagePadding -> imagePadding,
PlotRange -> {{0, plotSize[[1]]}, {0, plotSize[[2]]}},
ImageSize -> imageSize,
Prolog -> {Red, Text[text, {0, 0}, {-1, -1}]}], Magnification -> 1]
