Embedding fonts: Font substitution file
The Fixup "Embed missing fonts" offers the possiblity to define a "Font substitution file", which can contain one or more lines of text, defining rules of how fonts (which are not available on the respective system) shall be replaced with other fonts.
Besides other options, the "Font substitution policy" can be defined in the Fixup.
Apart from choosing the options from the drop down, own substitution policies can be created based on the following syntax. Clicking the + button opens the following window where substitution policies can be defined.
Syntax for font substitution files
Please use a simple text editor to edit or create the policy files and save them as UTF-8.
All values have to be tabulator-separated. Hash signs "#" at the beginning of a line means they are comments and will not be taken into account by the engine.
The following substitution modes are available:
SubstituteFirst
The first font of a list of font names is substituted by the following fonts. The order of the possible replacement fonts is regarded.
Notation:SubstituteFirst<tab>font substituted<tab>fontname<tab>fontname<tab>fontname ...
Regular Expressions
It is possible to use RegEx in SubstituteFirst lines. Example:SubstituteFirst '(.*)Bold(.*)Italic' 'Arial(.*)Bold(.*)Italic' '\1Regular' '\1'
Any font name that uses "Bold" and "Italic" with any additional characters will be replaced by any font that uses "Arial", "Bold" and "Italic" (with any additional characters in between of these phrases). If that cannot be found any font that has the same characters at the beginning (indicated by \1) and then "Regular" and if that is also not present any font that only has the same beginning.
Font substitution with RegEx will be used if normal substitution (without RegEx) was not successful.
Substitute All
This mode allows to define a list of fonts in which all fonts can substitute each other.
If any of the fonts of a list is missing it will be substituted with the next font in the list.
If this next font is also missing the previously listed font name will be searched.
If that is also missing, the font after the next font is tried and so on.
Notation:SubstituteAll<tab>fontname<tab>fontname<tab>fontname ...
Regular Expressions
In SubsituteAll RegularExpressions are not supported for performance reasons.
The engine ignores all characters other than a-z, A-Z and 0-9. That means "Helvetica Bold", "Helvetica-Bold" and "HelveticaBold" are all the same. It might still make sense to have them all in a configuration file for documentation and clarity (and that is the reason why they are all present in the predefined fontsubsitution.cfg).
Example
The entry below defines that Arial is substituted with Helvetica and Helvetica with Arial.
At the end of this example, there are further entries allowing more comprehensive font substitutions.
To use them the '#' at the beginning of the line needs to be removed.
SubstituteAll Arial ArialMT Helvetica Helvetica Neue Futura Helvetica Neue Microsoft Sans Serif MS PGothic Trebuchet MS Verdana
SubstituteAll Arial Bold Arial-Bold ArialMT,Bold Helvetica Bold Futura-Bold Futura Bold Helvetica-Bold
SubstituteAll Arial Italic Arial-Italic ArialMT,Italic Helvetica Italic Helvetica-Italic Futura-Italic Futura Italic Arial Oblique Arial-Oblique Helvetica Oblique Helvetica-Oblique Futura-Oblique Futura Oblique
SubstituteAll Arial Bold Italic Arial-Bold-Italic ArialMT,BoldItalic Helvetica Bold Italic Futura-Bold-Italic Futura Bold Italic Arial Bold Oblique Arial-Bold-Oblique Arial-BoldOblique Helvetica Bold Oblique Helvetica-BoldOblique Futura-Bold-Oblique Futura Bold Oblique
SubstituteAll Arial Black Arial-Black Helvetica Black Helvetica-Black Futura-Bold Futura Bold Arial-Bold
SubstituteAll Arial Narrow Helvetica Narrow
SubstituteAll Arial Narrow Bold Helvetica Narrow Bold Arial Narrow Fett Helvetica Narrow Fett
SubstituteAll Arial Narrow Bold Italic Helvetica Narrow Bold Italic Arial Narrow Fett Kursiv Helvetica Narrow Fett Kursiv
SubstituteAll Times-Roman Times Times New Roman Garamond
SubstituteAll Times-Bold Times-Roman Bold Times Bold Times New Roman Bold Times Fett Times New Roman Fett
SubstituteAll Times-Italic Times-Roman Italic Times New Roman Italic Times Italic Times Kursiv Times New Roman Kursiv
SubstituteAll Times-Bold-Italic Times-Roman Bold Italic Times Bold Italic Times New Roman Bold Italic Times Fett Kursiv Times New Roman Fett Kursiv
SubstituteAll Courier Courier New Courier Std New Lucida Console MS Gothic
SubstituteAll CourierStd-Bold Courier Std Bold Courier Bold Courier-Bold Courier New Bold Courier New-Bold
SubstituteAll CourierStd-Oblique Courier Std Oblique CourierStd-Italic Courier Std Italic Courier Italic Courier-Italic Courier New Italic Courier New-Italic Courier Oblique Courier-Oblique Courier New Oblique Courier New-Oblique
SubstituteAll CourierStd-BoldOblique Courier Std Bold Oblique Courier BoldItalic Courier-BoldItalic Courier New Bold Italic Courier New-Bold-Italic Courier BoldOblique Courier-BoldOblique Courier New Bold Oblique Courier New-Bold-Oblique
#SubstituteFirst '(.*)Regular' Arial Helvetica '\1Regular' '\1'
#SubstituteFirst '(.*)Medium' Arial Helvetica '\1Regular' '\1'
#SubstituteFirst '(.*)Bold' 'Arial(.*)Bold' 'Helvetica(.*)Bold' '\1Regular' '\1'
#SubstituteFirst '(.*)Italic' 'Arial(.*)Italic' 'Helvetica(.*)Italic' '\1Regular' '\1'
#SubstituteFirst '(.*)Black' 'Arial(.*)Black' 'Helvetica(.*)Black' '\1Regular' '\1' Arial(.*)Bold' 'Helvetica(.*)Bold'
#SubstituteFirst '(.*)Bold(.*)Italic' 'Arial(.*)Bold(.*)Italic' 'Helvetica(.*)Bold(.*)Italic' '\1Regular' '\1'
#SubstituteFirst '(.*)Bold(.*)' 'Arial(.*)Bold' 'Helvetica(.*)Bold' '\1Regular' '\1'
#SubstituteFirst '(.*)Italic(.*)' 'Arial(.*)Italic' 'Helvetica(.*)Italic' '\1Regular' '\1'
#SubstituteFirst '(.*)' '\1Regular' '\1Medium' '\1' Arial Helvetica
Syntax for glyph substitution in font substitution files
For font embedding the font needs to have glyphs for all character codes in the PDF.
Some PDFs use malformed character names in which case font embedding will fail. The SubstituteGlyphName
entry allows for defining mapping of malformed character names to correct character names.
The first entry is the correct character name, after that an unlimited number of malformed entries can be specified.
As a result all malformed character names will be corrected in the PDF and the result will be taken into account for font embedding.
SubstituteGlyphName <tab> nonbreakingspace <tab> no_break_space <tab> non_breaking_space
SubstituteGlyphName <tab> Hungarumlaut <tab> hungarumlaut__now_576