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 Umberto Rustichelli aka Ubi <op...@gt50.org> on 2017/12/05 14:18:12 UTC

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


Re: fop 1.1 servlet ignores my custom TTF font

Posted by Umberto Rustichelli aka Ubi <op...@gt50.org>.
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 [mailto:opensc@gt50.org]
> *Sent:* 05 December 2017 14:18
> *To:* fop-users@xmlgraphics.apache.org
> *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" 
> <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. 
> <https://esva.gt50.org/cgi-bin/learn-msg.cgi?id=BE6AC400C3.AED19>
> Clicca qui per metterlo in blacklist 
> <https://esva.gt50.org/cgi-bin/learn-msg.cgi?blacklist=1&id=BE6AC400C3.AED19>
>


RE: fop 1.1 servlet ignores my custom TTF font

Posted by Simon Steiner <si...@gmail.com>.
Hi,

 

You have

this.fopFactory.setUserConfig(userConfigFile);

 

before

this.fopFactory = FopFactory.newInstance();

 

Thanks

 

From: Umberto Rustichelli aka Ubi [mailto:opensc@gt50.org] 
Sent: 05 December 2017 14:18
To: fop-users@xmlgraphics.apache.org
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> "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