I have a problem with typefaces and PDF-Output in R. On this windows machine there is no Helvetica and the Font used by the device seems to be Arial as you can see below.
The simple problem is, that Arial is used (as I want it to be) but editing the PDF-File it says Helvetica is used. How can I get R to write the correct Name into the PDF-file. pdf(...,family="Arial")
won't work, as this family is not known (grDevices version 2.15.1).
Or can I substitude this font in the PDF afterwards, creating a file with the font I want?
R-PDF-Output
Comparision from this Article:Arial vs. Helvetica
Since R-3.1.0, this is much more straightforward. Now, to get an Arial font, just set family="ArialMT"
:
pdf("Arial.pdf", height=0.3, width=1.45, family="ArialMT")
grid::grid.text("CGJQRSafrst1237")
dev.off()
Quoting from the April 2014 R-3.1.0 release notes:
There is a new family, "ArialMT", for the pdf() and postscript() devices. This will only be rendered correctly on viewers which have access to Monotype TrueType fonts (which are sometimes requested by journals).
To ensure that the pdf will be rendered correctly wherever it's viewed, you'll need to also embed the required Arial fonts in the document. Here's one easy way to do that:
library(extrafont)
loadfonts() ## Really only needed the first time you use extrafont
## Modify this to point to the corresponding Ghostscript executable on your own machine
Sys.setenv(R_GSCMD = "C:/Program Files/gs/gs9.07/bin/gswin64c.exe")
embed_fonts("Arial.pdf")
You need to set a new font family for use with pdf()
. This requires you to have Adobe Font Metric files (*.afm
files) for the fonts you wish to use. You can convert the .tty
files to .afm
ones or find .afm
files for Arial on the interweb if you don't already have them.
Arial <- Type1Font(family = "Arial",
metrics = c("ArialMT.afm",
"arial-BoldMT.afm",
"Arial-ItalicMT.afm",
"Arial-BoldItalicMT.afm"))
where the character vector metrics
contains the paths to the relevant .afm
files, The files should be specified in this order:
The you use the pdfFonts()
function to add a mapping to these new fonts
pdfFonts(Arial = Arial)
where Arial
is the object produced by Type1Font()
earlier.
The final step is to use the family
argument in pdf()
which refers to one of the existing families as defined by pdfFonts()
:
pdf("testArial.pdf", family = "Arial")
plot(1:10, 1:10)
dev.off()
I haven't tried this as I don't have Arial on my system nor too many .afm
files lying around, but I pieced this together from several sources:
An alternative depending on how your system is set-up is to a Cairo-based PDF device as that will use the functions of your system to identify and load fonts based simply on their name. See ?cairo_pdf
and then the Cairo Fonts section of ?X11
for details.
As it is stated in the one of the comments, base 14 fonts does'nt need to be embedded and Helvetica is one of these fonts.PDF consumers are supposed to provide replacements for such fonts and Arial (or Arial MT) is often used in place of Helvetica.
I'm not familiar with R but you seem to be able to embed fonts afterward
edit: This question's answer explains how to embed fonts afterward with ghostscript, just be sure to have GS map Helvetica (or Arial) to the version of the font you want. Thanks to Gavin Simpson for having me search for that :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With