org.jpedal.fonts.CIDFontType2 Maven / Gradle / Ivy
/*
* ===========================================
* Java Pdf Extraction Decoding Access Library
* ===========================================
*
* Project Info: http://www.idrsolutions.com
* Help section for developers at http://www.idrsolutions.com/support/
*
* (C) Copyright 1997-2017 IDRsolutions and Contributors.
*
* This file is part of JPedal/JPDF2HTML5
*
@LICENSE@
*
* ---------------
* CIDFontType2.java
* ---------------
*/
package org.jpedal.fonts;
import java.util.Map;
import org.jpedal.fonts.tt.TTGlyphs;
import org.jpedal.io.ObjectStore;
import org.jpedal.io.PdfObjectReader;
import org.jpedal.objects.raw.PdfDictionary;
import org.jpedal.objects.raw.PdfObject;
import org.jpedal.parser.PdfFontFactory;
/**
* handles truetype specifics
*/
public class CIDFontType2 extends TrueType {
/**
* get handles onto Reader so we can access the file
*/
public CIDFontType2(final PdfObjectReader currentPdfFile, final String substituteFontFile) {
isCIDFont = true;
TTstreamisCID = true;
glyphs = new TTGlyphs();
init(currentPdfFile);
this.substituteFontFile = substituteFontFile;
}
/**
* get handles onto Reader so we can access the file
*/
public CIDFontType2(final PdfObjectReader currentPdfFile, final boolean ttflag) {
isCIDFont = true;
TTstreamisCID = ttflag;
glyphs = new TTGlyphs();
init(currentPdfFile);
}
/**
* read in a font and its details from the pdf file
*/
@Override
public void createFont(final PdfObject pdfObject, final String fontID, final boolean renderPage, final ObjectStore objectStore, final Map substitutedFonts) throws Exception {
fontTypes = StandardFonts.CIDTYPE2;
this.fontID = fontID;
final PdfObject Descendent = pdfObject.getDictionary(PdfDictionary.DescendantFonts);
final PdfObject pdfFontDescriptor = Descendent.getDictionary(PdfDictionary.FontDescriptor);
createCIDFont(pdfObject, Descendent);
if (pdfFontDescriptor != null) {
final byte[] stream;
PdfObject FontFile2 = pdfFontDescriptor.getDictionary(PdfDictionary.FontFile2);
if (FontFile2 == null) {
FontFile2 = pdfFontDescriptor.getDictionary(PdfDictionary.FontFile3);
}
if (FontFile2 != null) {
stream = currentPdfFile.readStream(FontFile2, true, true, false, false, false, FontFile2.getCacheName(currentPdfFile.getObjectReader()));
if (stream != null) {
readEmbeddedFont(stream, null, hasEncoding);
}
}
}
//allow for corrupted
final boolean isCorrupt = glyphs.isCorrupted();
if (glyphs.isCorrupted()) {
final PdfFontFactory pdfFontFactory = new PdfFontFactory(currentPdfFile);
pdfFontFactory.getFontSub(getBaseFontName());
isFontEmbedded = false;
substituteFontFile = pdfFontFactory.getMapFont();
if (substituteFontFile == null) {
glyphs.setFontEmbedded(false);
//generic setup so we have Java fonts available
init(fontID, renderPage);
}
}
//setup and substitute font
if (renderPage && !isFontEmbedded && substituteFontFile != null) {
this.substituteFontUsed(substituteFontFile);
isFontSubstituted = true;
this.isFontEmbedded = true;
glyphs.setFontEmbedded(true);
}
//make sure a font set
if (renderPage) {
setFont(getFontName(), 1);
}
glyphs.setCorrupted(isCorrupt);
}
}