package gutenberg.itext.pegdown;
import com.itextpdf.awt.FontMapper;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.pdf.BaseFont;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.awt.Font;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import static org.apache.commons.io.IOUtils.toByteArray;
/**
* @author <a href="http://twitter.com/aloyer">@aloyer</a>
*/
public class JLaTeXmathFontMapper implements FontMapper {
private Logger log = LoggerFactory.getLogger(JLaTeXmathFontMapper.class);
@Override
public BaseFont awtToPdf(Font font) {
String fontName = font.getName();
try {
if ("sanserif".equalsIgnoreCase(fontName))
return FontFactory.getFont(FontFactory.HELVETICA).getBaseFont();
InputStream stream = openStream(fontName);
if (stream == null) {
log.error("Font resource not found for font {}", fontName);
throw new RuntimeException("Font resource not found for font " + fontName);
}
return BaseFont.createFont(
fontName + ".ttf",
BaseFont.IDENTITY_H,
BaseFont.EMBEDDED,
true,
toByteArray(stream),
null
);
} catch (IOException e) {
throw new RuntimeException("Failed to map font " + fontName, e);
} catch (DocumentException e) {
throw new RuntimeException("Failed to map font " + fontName, e);
}
}
private InputStream openStream(String fontName) {
for (String basePath : Arrays.asList(
"/org/scilab/forge/jlatexmath/fonts/maths/",
"/org/scilab/forge/jlatexmath/fonts/maths/optional",
"/org/scilab/forge/jlatexmath/fonts/latin/",
"/org/scilab/forge/jlatexmath/fonts/latin/optional",
"/org/scilab/forge/jlatexmath/fonts/base/",
"/org/scilab/forge/jlatexmath/fonts/euler/")) {
String name = basePath + fontName + ".ttf";
InputStream stream = getClass().getResourceAsStream(name);
if (stream != null)
return stream;
}
return null;
}
@Override
public Font pdfToAwt(BaseFont font, int size) {
return null;
}
}