You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by Felix Alvarez <Fe...@mathworks.com> on 2012/11/02 16:07:43 UTC

Custom Font's Without Font Paths

Hi,
  I'm trying to use the FOP API purely from java in order to generate PDFs, PS, and EPS files.  I'm trying to get font embedding to work in each of these scenarios without using the auto-detect configuration option because it can cause out of memory exceptions with my application.  I'm trying to avoid duplicating the FOP auto-detect work trying to find the location of the font's on the system so I'd prefer a way to just convert my java fonts into FOP Fonts.  I can get  the list of needed fonts but am struggling to figure out how to convert the java fonts into the FOP Fonts with appropriate font metrics so that I can set the FontInfo for my PDFDocumentGraphics2D or my PSDocumentGraphics2D objects.  I've created my own createFontInfo method below which doesn't work because it somehow needs to create the font metrics as well.

Thanks,
--Felix

    public FontInfo createFontInfo(List<Font> fontList) throws
                FOPException, IOException {
        FontInfo fontInfo = new org.apache.fop.fonts.FontInfo();
        org.apache.fop.fonts.FontManager fontManager = new org.apache.fop.fonts.FontManager();

        List fontCollections = new java.util.ArrayList();
        fontCollections.add(new Base14FontCollection(fontManager.isBase14KerningEnabled()));

        for (Font f:fontList) {
            fontInfo.addFontProperties(f.getFontName(), new String[] {
                    FontUtil.stripWhiteSpace(f.getFamily()), f.getFamily(), f.getPSName()},
                    (f.getStyle() & Font.ITALIC) != 0 ? org.apache.fop.fonts.Font.STYLE_ITALIC :
                            org.apache.fop.fonts.Font.STYLE_NORMAL,
                    (f.getStyle() & Font.BOLD) != 0 ? org.apache.fop.fonts.Font.WEIGHT_BOLD :
                            org.apache.fop.fonts.Font.WEIGHT_NORMAL);
        }

        fontManager.setup(fontInfo,
                (FontCollection[])fontCollections.toArray(
                        new FontCollection[fontCollections.size()]));

        return fontInfo;
    }