I am using Noto fonts to create a PDF and evaluating embedding versus not embedding. This is my code:
FontFactory.register("c:/temp/fonts/NotoSansCJKsc-Regular.otf", "my_nato_font"); Font myBoldFont = FontFactory.getFont("my_nato_font", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
When I create the pdf and do a CTRL + D, I can see that the fonts have been embedded.
However once I go with option:
FontFactory.register("c:/temp/fonts/NotoSansCJKsc-Regular.otf", "my_nato_font"); Font myBoldFont = FontFactory.getFont("my_nato_font");
The size of file is reduced and the fonts are not embedded. Now I cannot see the Chinese characters which I have added to the PDF.
- Why does NOT_EMBEDDED option still embed the font ?
- Since Noto fonts are open sourced by google and supported by adobe (see Introducing Source Hans), I would assume that end user should be able to view the documents even with out the need to embed them. Is my understanding wrong?
In iText 7 your code snippet will look like this:
FontProgramFactory.registerFont("c:/temp/fonts/NotoSansCJKsc-Regular.otf", "my_nato_font"); PdfFont myBoldFont = PdfFontFactory.createRegisteredFont("my_nato_font", PdfEncodings.IDENTITY_H, true);
You are using Identity-H. In that case, the font shall be embedded. If the
embedded parameter wouldn't be ignored, iText would be creating a PDF that is in violation with ISO-32000-1:
The Identity-H and Identity-V CMaps shall not be used with a non-embedded font.
By ignoring your
NOT_EMBEDDED setting, iText is protecting you from creating a PDF that isn't correct.
As for your second example: you are getting the font from the font factory using the default encoding. This encoding doesn't support Chinese characters.
Click Why is iText embedding a font even when I specify not to embed? if you want to see how to answer this question in iText 5.