fop 1.1 servlet ignores my custom TTF font

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

fop 1.1 servlet ignores my custom TTF font

Umberto Rustichelli aka Ubi

Respectable, I've been trying many ways to solve this, following online manuals, reading forum posts etc., but I miserably failed. I'm no Java expert.

Environment is Linux, Java is 1.6.07, fop is version 1.1
To make sure I'm not stuck with some cache, everytime I have stopped Tomcat, remover webapps/fop* and put the new fop.war into webapps/, then re-run tomcat.

I have some fonts that I must use in the PDF renderer (FO to PDF transformation), let's say I just have one that is /opt/fopTest/fonts/Ocrb.ttf

After trying some recipes found on the web, like retouching fop.xconf before compiling or where I just put the fop configuration file somewhere... nada.
Currently I have modified src/java/org/apache/fop/servlet/FopServlet.java this way:

    public void init() throws ServletException {

            this.uriResolver = new ServletContextURIResolver(getServletContext());
            this.transFactory = TransformerFactory.newInstance();
            this.transFactory.setURIResolver(this.uriResolver);

            // Ubi: here or in position POS-ALPHA,
            // the effect seems to be the same (fonts not found!)
            try
            {
                File userConfigFile = new File("/opt/fopTest/Ubi.fop-config.xml");
                this.fopFactory.setUserConfig(userConfigFile);
            }
            catch (Exception exc)
            {
                 // I don't see the point in catching this one, should I?
            }

            this.fopFactory = FopFactory.newInstance();
            this.fopFactory.setURIResolver(this.uriResolver);

            // POS-ALPHA

            configureFopFactory();
        }


and /opt/fopTest/Ubi.fop-config.xml just contains


    <?xml version="1.0"?>
    <fop version="1.0">
      <renderers>
        <renderer mime="application/pdf">
          <fonts>
            <!-- Ubi: try this one... -->
            <directory>/opt/fopTest/fonts/Ocrb.ttf</directory>
            <auto-detect/>
            <!-- Ubi: (the previous was apprently insufficient for the servlet)
                    ....try this one, too. See https://xmlgraphics.apache.org/fop/1.1/fonts.html#register -->
            <font
                            embed-url="file:///opt/fopTest/fonts/Ocrb.ttf"
                            encoding-mode="auto">
                            <font-triplet name="OCRB" style="normal" weight="normal" />
            </font>
          </fonts>
        </renderer>
      </renderers>
    </fop>


By running tomcat with strace, I see that file /opt/fopTest/Ubi.fop-config.xml is actually read, but the font OCRB is not found when invoked (logs/catalina.out):

    WARNING: Font "OCRB,normal,400" not found. Substituting with "any,normal,400"


On the command line, this one works, instead :

java -cp build/fop.jar:lib/xmlgraphics-commons-1.5.jar:<the usual lib/*.jar files> \
        org.apache.fop.tools.fontlist.FontListMain \
        -c /etc/PeS/var/FOP/Ubi.fop-config.xml \
        /tmp/test2.pdf

and the OCRB font appears in the PDF.

So, what am I doing wrong with the servlet???
Is there a bullet-proof way to exploit fonts, possibly with the standard fop servlet (without writing code)?
Otherwise, how can I quickly debug/inspect the issue?

Thanks a lot

   Ubi

Reply | Threaded
Open this post in threaded view
|

RE: fop 1.1 servlet ignores my custom TTF font

Simon Steiner

Hi,

 

You have

this.fopFactory.setUserConfig(userConfigFile);

 

before

this.fopFactory = FopFactory.newInstance();

 

Thanks

 

From: Umberto Rustichelli aka Ubi [mailto:[hidden email]]
Sent: 05 December 2017 14:18
To: [hidden email]
Subject: fop 1.1 servlet ignores my custom TTF font

 


Respectable, I've been trying many ways to solve this, following online manuals, reading forum posts etc., but I miserably failed. I'm no Java expert.

Environment is Linux, Java is 1.6.07, fop is version 1.1
To make sure I'm not stuck with some cache, everytime I have stopped Tomcat, remover webapps/fop* and put the new fop.war into webapps/, then re-run tomcat.

I have some fonts that I must use in the PDF renderer (FO to PDF transformation), let's say I just have one that is /opt/fopTest/fonts/Ocrb.ttf

After trying some recipes found on the web, like retouching fop.xconf before compiling or where I just put the fop configuration file somewhere... nada.
Currently I have modified src/java/org/apache/fop/servlet/FopServlet.java this way:

    public void init() throws ServletException {

            this.uriResolver = new ServletContextURIResolver(getServletContext());
            this.transFactory = TransformerFactory.newInstance();
            this.transFactory.setURIResolver(this.uriResolver);

            // Ubi: here or in position POS-ALPHA,
            // the effect seems to be the same (fonts not found!)
            try
            {
                File userConfigFile = new File("/opt/fopTest/Ubi.fop-config.xml");
                this.fopFactory.setUserConfig(userConfigFile);
            }
            catch (Exception exc)
            {
                 // I don't see the point in catching this one, should I?
            }

            this.fopFactory = FopFactory.newInstance();
            this.fopFactory.setURIResolver(this.uriResolver);

            // POS-ALPHA

            configureFopFactory();
        }


and /opt/fopTest/Ubi.fop-config.xml just contains


    <?xml version="1.0"?>
    <fop version="1.0">
      <renderers>
        <renderer mime="application/pdf">
          <fonts>
            <!-- Ubi: try this one... -->
            <directory>/opt/fopTest/fonts/Ocrb.ttf</directory>
            <auto-detect/>
            <!-- Ubi: (the previous was apprently insufficient for the servlet)
                    ....try this one, too. See https://xmlgraphics.apache.org/fop/1.1/fonts.html#register -->
            <font
                            embed-url="file:///opt/fopTest/fonts/Ocrb.ttf"
                            encoding-mode="auto">
                            <font-triplet name="OCRB" style="normal" weight="normal" />
            </font>
          </fonts>
        </renderer>
      </renderers>
    </fop>


By running tomcat with strace, I see that file /opt/fopTest/Ubi.fop-config.xml is actually read, but the font OCRB is not found when invoked (logs/catalina.out):

    WARNING: Font "OCRB,normal,400" not found. Substituting with "any,normal,400"


On the command line, this one works, instead :

java -cp build/fop.jar:lib/xmlgraphics-commons-1.5.jar:<the usual lib/*.jar files> \
        org.apache.fop.tools.fontlist.FontListMain \
        -c /etc/PeS/var/FOP/Ubi.fop-config.xml \
        /tmp/test2.pdf

and the OCRB font appears in the PDF.

So, what am I doing wrong with the servlet???
Is there a bullet-proof way to exploit fonts, possibly with the standard fop servlet (without writing code)?
Otherwise, how can I quickly debug/inspect the issue?

Thanks a lot

   Ubi

Reply | Threaded
Open this post in threaded view
|

Re: fop 1.1 servlet ignores my custom TTF font

Umberto Rustichelli aka Ubi

Thanks Simon, moved the code, it works.

Turned out that I already tried that (see the "POS-ALPHA" comment), but apparently at the time I was messing up somewhere else.


On 12/05/2017 03:32 PM, Simon Steiner wrote:

Hi,

 

You have

this.fopFactory.setUserConfig(userConfigFile);

 

before

this.fopFactory = FopFactory.newInstance();

 

Thanks

 

From: Umberto Rustichelli aka Ubi [[hidden email]]
Sent: 05 December 2017 14:18
To: [hidden email]
Subject: fop 1.1 servlet ignores my custom TTF font

 


Respectable, I've been trying many ways to solve this, following online manuals, reading forum posts etc., but I miserably failed. I'm no Java expert.

Environment is Linux, Java is 1.6.07, fop is version 1.1
To make sure I'm not stuck with some cache, everytime I have stopped Tomcat, remover webapps/fop* and put the new fop.war into webapps/, then re-run tomcat.

I have some fonts that I must use in the PDF renderer (FO to PDF transformation), let's say I just have one that is /opt/fopTest/fonts/Ocrb.ttf

After trying some recipes found on the web, like retouching fop.xconf before compiling or where I just put the fop configuration file somewhere... nada.
Currently I have modified src/java/org/apache/fop/servlet/FopServlet.java this way:

    public void init() throws ServletException {

            this.uriResolver = new ServletContextURIResolver(getServletContext());
            this.transFactory = TransformerFactory.newInstance();
            this.transFactory.setURIResolver(this.uriResolver);

            // Ubi: here or in position POS-ALPHA,
            // the effect seems to be the same (fonts not found!)
            try
            {
                File userConfigFile = new File("/opt/fopTest/Ubi.fop-config.xml");
                this.fopFactory.setUserConfig(userConfigFile);
            }
            catch (Exception exc)
            {
                 // I don't see the point in catching this one, should I?
            }

            this.fopFactory = FopFactory.newInstance();
            this.fopFactory.setURIResolver(this.uriResolver);

            // POS-ALPHA

            configureFopFactory();
        }


and /opt/fopTest/Ubi.fop-config.xml just contains


    <?xml version="1.0"?>
    <fop version="1.0">
      <renderers>
        <renderer mime="application/pdf">
          <fonts>
            <!-- Ubi: try this one... -->
            <directory>/opt/fopTest/fonts/Ocrb.ttf</directory>
            <auto-detect/>
            <!-- Ubi: (the previous was apprently insufficient for the servlet)
                    ....try this one, too. See https://xmlgraphics.apache.org/fop/1.1/fonts.html#register -->
            <font
                            embed-url="file:///opt/fopTest/fonts/Ocrb.ttf"
                            encoding-mode="auto">
                            <font-triplet name="OCRB" style="normal" weight="normal" />
            </font>
          </fonts>
        </renderer>
      </renderers>
    </fop>


By running tomcat with strace, I see that file /opt/fopTest/Ubi.fop-config.xml is actually read, but the font OCRB is not found when invoked (logs/catalina.out):

    WARNING: Font "OCRB,normal,400" not found. Substituting with "any,normal,400"


On the command line, this one works, instead :

java -cp build/fop.jar:lib/xmlgraphics-commons-1.5.jar:<the usual lib/*.jar files> \
        org.apache.fop.tools.fontlist.FontListMain \
        -c /etc/PeS/var/FOP/Ubi.fop-config.xml \
        /tmp/test2.pdf

and the OCRB font appears in the PDF.

So, what am I doing wrong with the servlet???
Is there a bullet-proof way to exploit fonts, possibly with the standard fop servlet (without writing code)?
Otherwise, how can I quickly debug/inspect the issue?

Thanks a lot

   Ubi


--
Questo messaggio e' stato analizzato con Libra ESVA ed e' risultato non infetto.
Clicca qui per segnalarlo come spam.

Clicca qui per metterlo in blacklist