From 88de48f921ac53aab09cf96099cc22f2a4607708 Mon Sep 17 00:00:00 2001 From: Intelligent2013 Date: Sun, 27 Sep 2020 15:56:56 +0300 Subject: [PATCH] issue #49 fixing --- src/main/java/com/metanorma/fop/Util.java | 11 ++++++ .../java/com/metanorma/fop/fontConfig.java | 37 +++++++++++++++++++ src/main/java/com/metanorma/fop/mn2pdf.java | 11 ++---- 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/metanorma/fop/Util.java b/src/main/java/com/metanorma/fop/Util.java index f808cae5..c6754644 100644 --- a/src/main/java/com/metanorma/fop/Util.java +++ b/src/main/java/com/metanorma/fop/Util.java @@ -1,5 +1,6 @@ package com.metanorma.fop; +import java.awt.GraphicsEnvironment; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -136,4 +137,14 @@ public static String getDecodedBase64SVGnode(String encodedString) { //throws SA return decodedString; }*/ } + + public static void showAvailableAWTFonts() { + final String[] fam = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); + System.out.println("===================="); + System.out.println("Available fonts:"); + for (final String element : fam) { + System.out.println(element); + } + System.out.println("===================="); + } } diff --git a/src/main/java/com/metanorma/fop/fontConfig.java b/src/main/java/com/metanorma/fop/fontConfig.java index 26eb8b9d..a0fc8700 100644 --- a/src/main/java/com/metanorma/fop/fontConfig.java +++ b/src/main/java/com/metanorma/fop/fontConfig.java @@ -1,5 +1,8 @@ package com.metanorma.fop; +import java.awt.Font; +import java.awt.FontFormatException; +import java.awt.GraphicsEnvironment; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.File; @@ -22,6 +25,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Properties; +import java.util.stream.Collectors; import java.util.stream.Stream; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; @@ -98,6 +102,9 @@ public fontConfig(String xmlFO, String fontPath) throws SAXException, ParserConf substFonts(); //write updated FOP config file writeXmlDocumentToXmlFile(configXML); + + //add fonts from fontPath to system available fonts + updateFonts(); } //extract all .ttf files from resources into fontPath folder @@ -434,6 +441,36 @@ private String getFontsURL(String property) throws Exception { return appProps.getProperty(property); } + private void updateFonts(){ + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + + try (Stream walk = Files.walk(Paths.get(this.fontPath))) { + List fontfiles = walk.map(x -> x.toString()) + .filter(f -> f.endsWith(".ttf") || f.endsWith(".TTF") || f.endsWith(".ttc") || f.endsWith(".TTC") || f.endsWith(".otf") || f.endsWith(".OTF")).collect(Collectors.toList()); + + for(String fontfile : fontfiles) { + try { + Font ttfFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontfile)); + //register the font + ge.registerFont(ttfFont); + } catch(FontFormatException e) { + try { + Font type1Font = Font.createFont(Font.TYPE1_FONT, new File(fontfile)); + //register the font + ge.registerFont(type1Font); + } catch(FontFormatException e1) { + e1.printStackTrace(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + private void printMessage(String msg) { System.out.println(msg); messages.add(msg); diff --git a/src/main/java/com/metanorma/fop/mn2pdf.java b/src/main/java/com/metanorma/fop/mn2pdf.java index 2955cf0d..5755e0b1 100644 --- a/src/main/java/com/metanorma/fop/mn2pdf.java +++ b/src/main/java/com/metanorma/fop/mn2pdf.java @@ -229,6 +229,9 @@ public void convertmn2pdf(String fontPath, File xml, File xsl, Properties xslpar } fontConfig fontcfg = new fontConfig(xmlFO, fontPath); + if (DEBUG) { + Util.showAvailableAWTFonts(); + } // FO processing by FOP TransformerFactory factory = TransformerFactory.newInstance(); @@ -679,11 +682,5 @@ private static int getCoverPagesCount (File fXSL) { public int getPageCount() { return pageCount; } - - private Optional getExtensionByStringHandling(String filename) { - return Optional.ofNullable(filename) - .filter(f -> f.contains(".")) - .map(f -> f.substring(filename.lastIndexOf(".") + 1)); - } - + }