[ 
https://issues.apache.org/jira/browse/FOP-3062?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17519625#comment-17519625
 ] 

Simon Steiner commented on FOP-3062:
------------------------------------

what about:


{code:java}
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopConfParser;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.FopFactoryBuilder;

import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;

public class ComplexScript {
    public static void main(String[] args) throws Exception {
        String fo = "<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\"\n"; 
+
                "  
xmlns:fox=\"http://xmlgraphics.apache.org/fop/extensions\";>\n" +
                "  <fo:layout-master-set>\n" +
                "    <fo:simple-page-master master-name=\"simple\" 
page-height=\"27.9cm\" page-width=\"21.6cm\">\n" +
                "      <fo:region-body />\n" +
                "    </fo:simple-page-master>\n" +
                "  </fo:layout-master-set>\n" +
                "  <fo:page-sequence master-reference=\"simple\">\n" +
                "    <fo:flow flow-name=\"xsl-region-body\">\n" +
                " <fo:block font-family=\"SFArabic\">test2</fo:block>  \n" +
                "</fo:flow>\n" +
                "  </fo:page-sequence>\n" +
                "</fo:root>\n";
        String fopxconf = "<fop version=\"1.0\">\n" +
                "  <renderers>\n" +
                "    <renderer mime=\"application/pdf\">\n" +
                "      <fonts>\n" +
                "        <font 
embed-url=\"/home/simon/shared/FOP-3062/SFArabic.ttf\">\n" +
                "          <font-triplet name=\"SFArabic\" style=\"normal\" 
weight=\"normal\"/>\n" +
                "          <font-triplet name=\"any\" style=\"normal\" 
weight=\"normal\"/>\n" +
                "        </font>\n" +
                "      </fonts>\n" +
                "    </renderer>\n" +
                "  </renderers>\n" +
                "</fop>\n";
        FopFactoryBuilder builder =
                new FopConfParser(new 
ByteArrayInputStream(fopxconf.getBytes()), new 
File(".").toURI()).getFopFactoryBuilder();
        builder.setComplexScriptFeatures(false);
        FopFactory fopFactory = builder.build();
        FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
        FileOutputStream fos = new FileOutputStream("/tmp/out.pdf");
        Fop fop = fopFactory.newFop("application/pdf", foUserAgent, fos);
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer();
        Source src = new StreamSource(new ByteArrayInputStream(fo.getBytes()));
        Result res = new SAXResult(fop.getDefaultHandler());
        transformer.transform(src, res);
        fos.close();
    }
}

{code}


> AssertionError in GlyphPositioningTable$DeviceTable with SFArabic.ttf
> ---------------------------------------------------------------------
>
>                 Key: FOP-3062
>                 URL: https://issues.apache.org/jira/browse/FOP-3062
>             Project: FOP
>          Issue Type: Bug
>          Components: unqualified
>    Affects Versions: 2.7
>            Reporter: Richard Zowalla
>            Priority: Major
>         Attachments: SFArabic.ttf, image-2022-04-08-16-09-21-254.png
>
>
> While working on a M1 Mac OS system:
>  
> {code:java}
> Java version: 17.0.2, vendor: Oracle Corporation, runtime: 
> /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/HomeDefault locale: 
> de_DE, platform encoding: UTF-8
> OS name: "mac os x", version: "12.3", arch: "aarch64", family: "mac"{code}
> I get the following AssertionError with a simple FOP config as follows:
> {code:java}
> <fop version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>      
> xsi:noNamespaceSchemaLocation="http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/foschema/fop-configuration.xsd?view=co";>
>     <!-- Renderer -->
>     <renderers>        <!-- PDF Renderer -->
>         <renderer mime="application/pdf">            <!-- Filter -->
>             <filterList>
>                 <value>null</value>
>             </filterList>
>             <!-- Filter Image Settings-->
>             <filterList type="image">
>                 <value>flate</value>
>                 <value>ascii-85</value>
>             </filterList>
>             <!-- Font Configuration -->
>             <fonts>                <!-- <auto-detect/> -->
>                 <directory>/Users/abc/uploads/fonts</directory>
>             </fonts>
>         </renderer>
>     </renderers>
>     <fonts>
>         <!-- <auto-detect/> -->
>         <directory>/Users/abc/uploads/fonts</directory>
>     </fonts>
> </fop> {code}
> The font, which violates the assertion in DeviceTable is:
> *[file:/System/Library/Fonts/SFArabic.ttf*|file:///System/Library/Fonts/SFArabic.ttf*]
>  
> *Stacktrace:*
> {code:java}
> java.lang.AssertionError at 
> org.apache.fop.complexscripts.fonts.GlyphPositioningTable$DeviceTable.<init>(GlyphPositioningTable.java:1774)
>  at 
> org.apache.fop.complexscripts.fonts.OTFAdvancedTypographicTableReader.readPosDeviceTable(OTFAdvancedTypographicTableReader.java:1727)
>  at 
> org.apache.fop.complexscripts.fonts.OTFAdvancedTypographicTableReader.readPosAnchor(OTFAdvancedTypographicTableReader.java:2051)
>  at 
> org.apache.fop.complexscripts.fonts.OTFAdvancedTypographicTableReader.readMarkToLigaturePosTableFormat1(OTFAdvancedTypographicTableReader.java:2345)
>  at 
> org.apache.fop.complexscripts.fonts.OTFAdvancedTypographicTableReader.readMarkToLigaturePosTable(OTFAdvancedTypographicTableReader.java:2371)
>  at 
> org.apache.fop.complexscripts.fonts.OTFAdvancedTypographicTableReader.readGPOSSubtable(OTFAdvancedTypographicTableReader.java:3122)
>  at 
> org.apache.fop.complexscripts.fonts.OTFAdvancedTypographicTableReader.readLookupTable(OTFAdvancedTypographicTableReader.java:3191)
>  at 
> org.apache.fop.complexscripts.fonts.OTFAdvancedTypographicTableReader.readLookupList(OTFAdvancedTypographicTableReader.java:3218)
>  at 
> org.apache.fop.complexscripts.fonts.OTFAdvancedTypographicTableReader.readCommonLayoutTables(OTFAdvancedTypographicTableReader.java:3239)
>  at 
> org.apache.fop.complexscripts.fonts.OTFAdvancedTypographicTableReader.readGPOS(OTFAdvancedTypographicTableReader.java:3499)
>  at 
> org.apache.fop.complexscripts.fonts.OTFAdvancedTypographicTableReader.readAll(OTFAdvancedTypographicTableReader.java:84)
>  at 
> org.apache.fop.fonts.truetype.OpenFont.handleCharacterSpacing(OpenFont.java:889)
>  at org.apache.fop.fonts.truetype.OpenFont.readFont(OpenFont.java:861) at 
> org.apache.fop.fonts.truetype.OFFontLoader.read(OFFontLoader.java:119) at 
> org.apache.fop.fonts.truetype.OFFontLoader.read(OFFontLoader.java:103) at 
> org.apache.fop.fonts.FontLoader.getFont(FontLoader.java:126) at 
> org.apache.fop.fonts.FontLoader.loadFont(FontLoader.java:110) at 
> org.apache.fop.fonts.autodetect.FontInfoFinder.find(FontInfoFinder.java:253) 
> at org.apache.fop.fonts.FontAdder.add(FontAdder.java:63) at 
> org.apache.fop.fonts.FontDetectorFactory$DefaultFontDetector.detect(FontDetectorFactory.java:105)
>  at org.apache.fop.fonts.FontManager.autoDetectFonts(FontManager.java:229) at 
> org.apache.fop.fonts.DefaultFontConfigurator.configure(DefaultFontConfigurator.java:82)
>  at 
> org.apache.fop.render.PrintRendererConfigurator.getCustomFontCollection(PrintRendererConfigurator.java:147)
>  at 
> org.apache.fop.render.PrintRendererConfigurator.setupFontInfo(PrintRendererConfigurator.java:127)
>  at org.apache.fop.render.intermediate.IFUtil.setupFonts(IFUtil.java:170) at 
> org.apache.fop.render.intermediate.IFRenderer.setupFontInfo(IFRenderer.java:187)
>  at org.apache.fop.area.RenderPagesModel.<init>(RenderPagesModel.java:75) at 
> org.apache.fop.area.AreaTreeHandler.setupModel(AreaTreeHandler.java:135) at 
> org.apache.fop.area.AreaTreeHandler.<init>(AreaTreeHandler.java:105) at 
> org.apache.fop.render.RendererFactory.createFOEventHandler(RendererFactory.java:363)
>  at org.apache.fop.fo.FOTreeBuilder.<init>(FOTreeBuilder.java:109) at 
> org.apache.fop.apps.Fop.createDefaultHandler(Fop.java:104) at 
> org.apache.fop.apps.Fop.<init>(Fop.java:78) at 
> org.apache.fop.apps.FOUserAgent.newFop(FOUserAgent.java:184) at 
> org.apache.fop.apps.FopFactory.newFop(FopFactory.java:234){code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to