PDF files are supposed to be rendered exactly the same, no matter which PDF viewer you’re using. One reason why this is the case is because a PDF file can embed the fonts required to render it.
However, sometimes — due to size reasons or other considerations — fonts are not embedded, which makes the PDF viewer look for fonts on the current system. Depending on the fonts that are available, this can cause rendering problems.
While the best option is to always embed the fonts in the PDF, this isn’t always possible, especially if you’re working with third-party PDF files. This is where custom font path support comes in.
There are many varieties of Android devices out there, and not all of them come with a full set of fonts. For example, some of them are missing some international fonts, so you may have to ship them with your application.
The Android SDK download comes with an example of how to properly use custom font paths. This can be found in
Loading Custom Fonts
Using custom fonts in your app requires two steps, outlined below.
Disabling automatic initialization of PSPDFKit by omitting the
pspdfkit_license_keymetadata element in your Android manifest. This is necessary, since you need to provide custom font paths when initializing PSPDFKit manually in the next step.
Initializing PSPDFKit manually and providing the paths to your custom fonts:Copy
1 2 3 4 5 6 7 8 9 10
// You can use any folder (private or on the external storage) for // fonts. It is important that your font files are inside this folder // and that your app has read access to it. val appFonts = getDir("fonts", Context.MODE_PRIVATE) // You can provide as many additional custom font folders as you like. val fontFolders = listOf(appFonts.absolutePath) // Custom font folders are provided at library initialization time. PSPDFKit.initialize(this, licenseString, fontFolders)Copy
1 2 3 4 5 6 7 8 9 10
// You can use any folder (private or on the external storage) for // fonts. It is important that your font files are inside this folder // and that your app has read access to it. File appFonts = getDir("fonts", Context.MODE_PRIVATE); // You can provide as many additional custom font folders as you like. List<String> fontFolders = Arrays.asList(appFonts.absolutePath); // Custom font folders are provided at library initialization time. PSPDFKit.initialize(this, licenseString, fontFolders);
If you are missing international fonts when rendering on certain Android devices, the Google Noto Fonts are usually a good choice to include in your app.
The font directory can be any directory that is accessible to your app, and all
.otf files will be added to the font list of PSPDFKit.
Microsoft Core Fonts
“Core fonts for the Web was a project started by Microsoft in 1996 to create a standard pack of fonts for the World Wide Web. It included the proprietary fonts Andalé Mono, Arial, Arial Black, Comic Sans MS, Courier New, Georgia, Impact, Times New Roman, Trebuchet MS, Verdana and Webdings, all of them in TrueType font format…”
While Microsoft no longer offers these files directly, they can be legally downloaded. The EULA prohibits redistribution, but you can download them and add them to our Server product via the Custom Fonts feature. You can use free software such as 7-Zip to extract the .TTF font files from the downloaded packages.
These fonts are widely used on the web and PDF files and will improve render fidelity for PDF documents that use them.