/** * Creates a font based on an existing document font. The created font font may not * behave as expected, depending on the encoding or subset. * @param fontRef the reference to the document font * @return the font */ public static BaseFont createFont(PRIndirectReference fontRef) { return new DocumentFont(fontRef); }
PdfName subType = font.getAsName(PdfName.SUBTYPE); if (PdfName.TYPE1.equals(subType) || PdfName.TRUETYPE.equals(subType)) doType1TT(); else if (PdfName.TYPE3.equals(subType)) { fillEncoding(null); fillDiffMap(font.getAsDict(PdfName.ENCODING), null); fillWidths(); if (dwo != null) defaultWidth = dwo.intValue(); hMetrics = readWidths((PdfArray) PdfReader.getPdfObjectRelease(cidft.get(PdfName.W))); fillFontDesc(fontDesc); } else { processType0(font);
if (BuiltinFonts14.containsKey(fontName) && (PdfName.SYMBOL.equals(baseFont) || PdfName.ZAPFDINGBATS.equals(baseFont))) { fillEncoding(baseFont); } else fillEncoding(null); try { toUnicode = processToUnicode(); if (toUnicode != null) { Map<Integer, Integer> rm = toUnicode.createReverseMapping(); fillEncoding((PdfName)enc); else if (enc.isDictionary()) { PdfDictionary encDic = (PdfDictionary)enc; enc = PdfReader.getPdfObject(encDic.get(PdfName.BASEENCODING)); if (enc == null) fillEncoding(null); else fillEncoding((PdfName)enc); fillDiffMap(encDic, toUnicode); ury = bf.getFontDescriptor(BBOXURY, 1000); fillWidths(); fillFontDesc(font.getAsDict(PdfName.FONTDESCRIPTOR));
private void processType0(PdfDictionary font) { try { PdfObject toUniObject = PdfReader.getPdfObjectRelease(font.get(PdfName.TOUNICODE)); PdfArray df = (PdfArray)PdfReader.getPdfObjectRelease(font.get(PdfName.DESCENDANTFONTS)); PdfDictionary cidft = (PdfDictionary)PdfReader.getPdfObjectRelease(df.getPdfObject(0)); PdfNumber dwo = (PdfNumber)PdfReader.getPdfObjectRelease(cidft.get(PdfName.DW)); int dw = 1000; if (dwo != null) dw = dwo.intValue(); IntHashtable widths = readWidths((PdfArray)PdfReader.getPdfObjectRelease(cidft.get(PdfName.W))); PdfDictionary fontDesc = (PdfDictionary)PdfReader.getPdfObjectRelease(cidft.get(PdfName.FONTDESCRIPTOR)); fillFontDesc(fontDesc); if (toUniObject instanceof PRStream){ fillMetrics(PdfReader.getStreamBytes((PRStream)toUniObject), widths, dw); } else if (new PdfName("Identity-H").equals(toUniObject)) { fillMetricsIdentity(widths, dw); } } catch (Exception e) { throw new ExceptionConverter(e); } }
public void renderText(TextRenderInfo renderInfo) { DocumentFont documentFont = renderInfo.getFont(); PdfDictionary font = documentFont.getFontDictionary(); // Check the font dictionary like in your example code if (font FULFILLS SOME CRITERIA) { // The text String text = renderInfo.getText(); // is rendered on the current page on the base line LineSegment baseline = renderInfo.getBaseline(); // using a font fulfilling the given criteria ... } }
if (nx.toString().equals("endbfchar")) break; String cid = decodeString((PdfString)nx); String uni = decodeString((PdfString)ps.readPRObject()); if (uni.length() == 1) { int cidc = cid.charAt(0); if (nx.toString().equals("endbfrange")) break; String cid1 = decodeString((PdfString)nx); String cid2 = decodeString((PdfString)ps.readPRObject()); int cid1c = cid1.charAt(0); int cid2c = cid2.charAt(0); PdfObject ob2 = ps.readPRObject(); if (ob2.isString()) { String uni = decodeString((PdfString)ob2); if (uni.length() == 1) { int unic = uni.charAt(uni.length() - 1); PdfArray a = (PdfArray)ob2; for (int j = 0; j < a.size(); ++j, ++cid1c) { String uni = decodeString(a.getAsString(j)); if (uni.length() == 1) { int unic = uni.charAt(uni.length() - 1);
PdfName subType = font.getAsName(PdfName.SUBTYPE); if (PdfName.TYPE1.equals(subType) || PdfName.TRUETYPE.equals(subType)) doType1TT(); else if (PdfName.TYPE3.equals(subType)) { fillEncoding(null); fillDiffMap(font.getAsDict(PdfName.ENCODING), null); fillWidths(); if (dwo != null) defaultWidth = dwo.intValue(); hMetrics = readWidths((PdfArray) PdfReader.getPdfObjectRelease(cidft.get(PdfName.W))); fillFontDesc(fontDesc); } else { processType0(font);
if (BuiltinFonts14.containsKey(fontName) && (PdfName.SYMBOL.equals(baseFont) || PdfName.ZAPFDINGBATS.equals(baseFont))) { fillEncoding(baseFont); } else fillEncoding(null); try { toUnicode = processToUnicode(); if (toUnicode != null) { Map<Integer, Integer> rm = toUnicode.createReverseMapping(); fillEncoding((PdfName)enc); else if (enc.isDictionary()) { PdfDictionary encDic = (PdfDictionary)enc; enc = PdfReader.getPdfObject(encDic.get(PdfName.BASEENCODING)); if (enc == null) fillEncoding(null); else fillEncoding((PdfName)enc); fillDiffMap(encDic, toUnicode); ury = bf.getFontDescriptor(BBOXURY, 1000); fillWidths(); fillFontDesc(font.getAsDict(PdfName.FONTDESCRIPTOR));
private void processType0(PdfDictionary font) { try { PdfObject toUniObject = PdfReader.getPdfObjectRelease(font.get(PdfName.TOUNICODE)); PdfArray df = (PdfArray)PdfReader.getPdfObjectRelease(font.get(PdfName.DESCENDANTFONTS)); PdfDictionary cidft = (PdfDictionary)PdfReader.getPdfObjectRelease(df.getPdfObject(0)); PdfNumber dwo = (PdfNumber)PdfReader.getPdfObjectRelease(cidft.get(PdfName.DW)); int dw = 1000; if (dwo != null) dw = dwo.intValue(); IntHashtable widths = readWidths((PdfArray)PdfReader.getPdfObjectRelease(cidft.get(PdfName.W))); PdfDictionary fontDesc = (PdfDictionary)PdfReader.getPdfObjectRelease(cidft.get(PdfName.FONTDESCRIPTOR)); fillFontDesc(fontDesc); if (toUniObject instanceof PRStream){ fillMetrics(PdfReader.getStreamBytes((PRStream)toUniObject), widths, dw); } else if (new PdfName("Identity-H").equals(toUniObject)) { fillMetricsIdentity(widths, dw); } } catch (Exception e) { throw new ExceptionConverter(e); } }
@Override protected void checkFont(PdfWriter writer, int key, Object obj1) { BaseFont bf = (BaseFont) obj1; if (bf.getFontType() == BaseFont.FONT_TYPE_DOCUMENT) { PdfStream prs = null; PdfDictionary fontDictionary = ((DocumentFont) bf).getFontDictionary(); PdfDictionary fontDescriptor = getDirectDictionary(fontDictionary.get(PdfName.FONTDESCRIPTOR)); if (fontDescriptor != null) { prs = getDirectStream(fontDescriptor.get(PdfName.FONTFILE)); if (prs == null) { prs = getDirectStream(fontDescriptor.get(PdfName.FONTFILE2)); } if (prs == null) { prs = getDirectStream(fontDescriptor.get(PdfName.FONTFILE3)); } } if (prs == null) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("all.the.fonts.must.be.embedded.this.one.isn.t.1", ((BaseFont) obj1).getPostscriptFontName())); } } else { if (!bf.isEmbedded()) throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("all.the.fonts.must.be.embedded.this.one.isn.t.1", ((BaseFont) obj1).getPostscriptFontName())); } }
if (nx.toString().equals("endbfchar")) break; String cid = decodeString((PdfString)nx); String uni = decodeString((PdfString)ps.readPRObject()); if (uni.length() == 1) { int cidc = cid.charAt(0); if (nx.toString().equals("endbfrange")) break; String cid1 = decodeString((PdfString)nx); String cid2 = decodeString((PdfString)ps.readPRObject()); int cid1c = cid1.charAt(0); int cid2c = cid2.charAt(0); PdfObject ob2 = ps.readPRObject(); if (ob2.isString()) { String uni = decodeString((PdfString)ob2); if (uni.length() == 1) { int unic = uni.charAt(uni.length() - 1); PdfArray a = (PdfArray)ob2; for (int j = 0; j < a.size(); ++j, ++cid1c) { String uni = decodeString(a.getAsString(j)); if (uni.length() == 1) { int unic = uni.charAt(uni.length() - 1);
/** * Creates a font based on an existing document font. The created font font may not * behave as expected, depending on the encoding or subset. * @param fontRef the reference to the document font * @return the font */ public static BaseFont createFont(PRIndirectReference fontRef) { return new DocumentFont(fontRef); }
@Override protected void checkFont(PdfWriter writer, int key, Object obj1) { BaseFont bf = (BaseFont) obj1; if (bf.getFontType() == BaseFont.FONT_TYPE_DOCUMENT) { PdfStream prs = null; PdfDictionary fontDictionary = ((DocumentFont) bf).getFontDictionary(); PdfDictionary fontDescriptor = getDirectDictionary(fontDictionary.get(PdfName.FONTDESCRIPTOR)); if (fontDescriptor != null) { prs = getDirectStream(fontDescriptor.get(PdfName.FONTFILE)); if (prs == null) { prs = getDirectStream(fontDescriptor.get(PdfName.FONTFILE2)); } if (prs == null) { prs = getDirectStream(fontDescriptor.get(PdfName.FONTFILE3)); } } if (prs == null) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("all.the.fonts.must.be.embedded.this.one.isn.t.1", ((BaseFont) obj1).getPostscriptFontName())); } } else { if (!bf.isEmbedded()) throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("all.the.fonts.must.be.embedded.this.one.isn.t.1", ((BaseFont) obj1).getPostscriptFontName())); } }
if (po != null && po.type() == PdfObject.INDIRECT) { PRIndirectReference por = (PRIndirectReference)po; BaseFont bp = new DocumentFont((PRIndirectReference)po, dr.getAsDict(PdfName.ENCODING)); tx.setFont(bp); Integer porkey = Integer.valueOf(por.getNumber());
if (po != null && po.type() == PdfObject.INDIRECT) { PRIndirectReference por = (PRIndirectReference)po; BaseFont bp = new DocumentFont((PRIndirectReference)po, dr.getAsDict(PdfName.ENCODING)); tx.setFont(bp); Integer porkey = Integer.valueOf(por.getNumber());