private static CMapEncoding createCMap(PdfObject cmap, String uniMap) { if (cmap.isStream()) { PdfStream cmapStream = (PdfStream) cmap; byte[] cmapBytes = cmapStream.getBytes(); return new CMapEncoding(cmapStream.getAsName(PdfName.CMapName).getValue(), cmapBytes); } else { String cmapName = ((PdfName) cmap).getValue(); if (PdfEncodings.IDENTITY_H.equals(cmapName) || PdfEncodings.IDENTITY_V.equals(cmapName)) { return new CMapEncoding(cmapName); } else { return new CMapEncoding(cmapName, uniMap); } } }
PdfType0Font(TrueTypeFont ttf, String cmap) { super(); if (!cmap.equals(PdfEncodings.IDENTITY_H) && !cmap.equals(PdfEncodings.IDENTITY_V)) { throw new PdfException(PdfException.OnlyIdentityCMapsSupportsWithTrueType); } if (!ttf.getFontNames().allowEmbedding()) { throw new PdfException(PdfException.CannotBeEmbeddedDueToLicensingRestrictions) .setMessageParams(ttf.getFontNames().getFontName() + ttf.getFontNames().getStyle()); } this.fontProgram = ttf; this.embedded = true; vertical = cmap.endsWith("V"); cmapEncoding = new CMapEncoding(cmap); longTag = new HashSet<>(); cidFontType = CID_FONT_TYPE_2; if (ttf.isFontSpecific()) { specificUnicodeDifferences = new char[256]; byte[] bytes = new byte[1]; for (int k = 0; k < 256; ++k) { bytes[0] = (byte) k; String s = PdfEncodings.convertToString(bytes, null); char ch = s.length() > 0 ? s.charAt(0) : '?'; specificUnicodeDifferences[k] = ch; } } }
PdfType0Font(CidFont font, String cmap) { super(); if (!CidFontProperties.isCidFont(font.getFontNames().getFontName(), cmap)) { throw new PdfException("Font {0} with {1} encoding is not a cjk font.") .setMessageParams(font.getFontNames().getFontName(), cmap); } this.fontProgram = font; vertical = cmap.endsWith("V"); String uniMap = getCompatibleUniMap(fontProgram.getRegistry()); cmapEncoding = new CMapEncoding(cmap, uniMap); longTag = new HashSet<>(); cidFontType = CID_FONT_TYPE_0; }