You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by "simon steiner (JIRA)" <ji...@apache.org> on 2017/09/19 13:40:00 UTC

[jira] [Updated] (BATIK-1002) org.apache.batik.apps.rasterizer.SVGConverter

     [ https://issues.apache.org/jira/browse/BATIK-1002?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

simon steiner updated BATIK-1002:
---------------------------------
    Description: 
Hi,


I've a weird problem, I'm using org.apache.fop.svg.PDFTranscoder to generate a

PDf from an SVG document in xml format, the problem that I'm facing is despite of defining 'pdf-renderer-cfg.xml' in the specified format and configuring the PDFTranscoder with it, PDFTranscoder is not embedding the font into the PDF. In the 'embed-url' I've given actual path to the true type font.


The contents of 'pdf-renderer-cfg.xml' are :


<?xml version="1.0" encoding="UTF-8"?>
<pdf-renderer>
  <fonts>
         <font metrics-url="/home/prince/appDir/webapp/lib/Fonts/cursive-standard.xml" kerning="no" embed-url="/home/prince/appDir/webapp/lib/Fonts/Cursive-standard.ttf">
          <font-triplet name="Cursive" style="normal" weight="normal"/>
        </font>
  </fonts>
</pdf-renderer>


and to configure the PDF transcoder I've extended org.apache.batik.apps.rasterizer.SVGConverter


and overridden 'execute' method as :

{code}
   public void execute() throws SVGConverterException {
        // Compute the set of SVGConverterSource from the source properties
        // (srcDir and srcFile);
        // This throws an exception if there is not at least one src file.
        Vector sources =  computeSources();

        // Compute the destination files from dest
        Vector dstFiles = null;
        if(sources.size() == 1 && dst != null && isFile(dst)){
            dstFiles = new Vector();
            dstFiles.addElement(dst);
        }
        else{
            dstFiles =  computeDstFiles(sources);
        }
       
        //Getting the path of the FOP config file
        String fopPath = UtilProperties.getPropertyValue("fop.properties", "fop.path", "webapp/lib/Fonts");
        File userConfigFile = new File(fopPath + "/pdf-renderer-cfg.xml");       
       
        //Build the configuration
        cfgBuilder = new DefaultConfigurationBuilder();       
        try {
            cfg = cfgBuilder.buildFromFile(userConfigFile);
        } catch (ConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
        //Get the PDF Transcoder object
        pdfTranscoder = new PDFTranscoder();
       
        //Configure the transcoder
        try {
            pdfTranscoder.configure(cfg);
        } catch (ConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
        // Now, get the transcoder to use for the operation       
        Transcoder transcoder = (Transcoder) pdfTranscoder;
        if(transcoder == null) {
            throw new SVGConverterException(ERROR_CANNOT_ACCESS_TRANSCODER,
                                             new Object[]{destinationType.toString()},
                                             true /* fatal error */);
        }

        // Now, compute the set of transcoding hints to use
        Map hints = computeTranscodingHints();
        transcoder.setTranscodingHints(hints);

        // Notify listener that task has been computed
        if(!controller.proceedWithComputedTask(transcoder,
                                               hints,
                                               sources,
                                               dstFiles)){
            return;
        }

        // Convert files one by one
        for(int i = 0 ; i < sources.size() ; i++) {
            // Get the file from the vector.
            SVGConverterSource currentFile
                = (SVGConverterSource)sources.elementAt(i);
            File outputFile  = (File)dstFiles.elementAt(i);

            createOutputDir(outputFile);
            transcode(currentFile, outputFile, transcoder);
        }
    }
   
}
{code}

and the content of the svg file is  :


<svg width="432" height="288" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
 <g>
  <title>Layer 1</title>
  <image transform="rotate(14.4551, 388.899, 199.566)" xlink:href="http://localhost:8080/app/control/app/flex/svgdol/1321955504845/20111123141633795.jpg" id="svg_2" height="362.33104" width="308.62977" y="18.40178" x="234.58535"/>
  <image transform="rotate(-13.6166, 149.053, 95.3409)" xlink:href="http://localhost:8080/app/control/app/flex/svgdol/1321955504845/20111123141524886.jpg" id="svg_1" height="246.3374" width="314.99999" y="-27.82715" x="-8.44604"/>
  <text transform="matrix(1, 0, 0, 1.20588, 0, -25.8382)" xml:space="preserve" text-anchor="middle" font-family="Cursive" font-size="24" id="svg_3" y="155.817" x="265" stroke-width="0" stroke="#000000" fill="#000000">All Mine....!!!!</text>
 </g>
</svg>


but even after this the PDFTransocder 's output , i.e. the PDF doesn't contain the text in proper font, I tried to install the font on my O.S. as well,

but that too didn't work.


I'm using batik-all-1.6.jar ,Java version is 1.6 and O.S. is Linux(Ubuntu).

Any guidance /pointers will of extreme help as I've been debugging the library at runtime since last couple of days and haven't been able to find the cause.


Regards
Prince

  was:
Hi,


I've a weird problem, I'm using org.apache.fop.svg.PDFTranscoder to generate a

PDf from an SVG document in xml format, the problem that I'm facing is despite of defining 'pdf-renderer-cfg.xml' in the specified format and configuring the PDFTranscoder with it, PDFTranscoder is not embedding the font into the PDF. In the 'embed-url' I've given actual path to the true type font.


The contents of 'pdf-renderer-cfg.xml' are :


<?xml version="1.0" encoding="UTF-8"?>
<pdf-renderer>
  <fonts>
         <font metrics-url="/home/prince/appDir/webapp/lib/Fonts/cursive-standard.xml" kerning="no" embed-url="/home/prince/appDir/webapp/lib/Fonts/Cursive-standard.ttf">
          <font-triplet name="Cursive" style="normal" weight="normal"/>
        </font>
  </fonts>
</pdf-renderer>


and to configure the PDF transcoder I've extended org.apache.batik.apps.rasterizer.SVGConverter


and overridden 'execute' method as :


   public void execute() throws SVGConverterException {
        // Compute the set of SVGConverterSource from the source properties
        // (srcDir and srcFile);
        // This throws an exception if there is not at least one src file.
        Vector sources =  computeSources();

        // Compute the destination files from dest
        Vector dstFiles = null;
        if(sources.size() == 1 && dst != null && isFile(dst)){
            dstFiles = new Vector();
            dstFiles.addElement(dst);
        }
        else{
            dstFiles =  computeDstFiles(sources);
        }
       
        //Getting the path of the FOP config file
        String fopPath = UtilProperties.getPropertyValue("fop.properties", "fop.path", "webapp/lib/Fonts");
        File userConfigFile = new File(fopPath + "/pdf-renderer-cfg.xml");       
       
        //Build the configuration
        cfgBuilder = new DefaultConfigurationBuilder();       
        try {
            cfg = cfgBuilder.buildFromFile(userConfigFile);
        } catch (ConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
        //Get the PDF Transcoder object
        pdfTranscoder = new PDFTranscoder();
       
        //Configure the transcoder
        try {
            pdfTranscoder.configure(cfg);
        } catch (ConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
        // Now, get the transcoder to use for the operation       
        Transcoder transcoder = (Transcoder) pdfTranscoder;
        if(transcoder == null) {
            throw new SVGConverterException(ERROR_CANNOT_ACCESS_TRANSCODER,
                                             new Object[]{destinationType.toString()},
                                             true /* fatal error */);
        }

        // Now, compute the set of transcoding hints to use
        Map hints = computeTranscodingHints();
        transcoder.setTranscodingHints(hints);

        // Notify listener that task has been computed
        if(!controller.proceedWithComputedTask(transcoder,
                                               hints,
                                               sources,
                                               dstFiles)){
            return;
        }

        // Convert files one by one
        for(int i = 0 ; i < sources.size() ; i++) {
            // Get the file from the vector.
            SVGConverterSource currentFile
                = (SVGConverterSource)sources.elementAt(i);
            File outputFile  = (File)dstFiles.elementAt(i);

            createOutputDir(outputFile);
            transcode(currentFile, outputFile, transcoder);
        }
    }
   
}


and the content of the svg file is  :


<svg width="432" height="288" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
 <g>
  <title>Layer 1</title>
  <image transform="rotate(14.4551, 388.899, 199.566)" xlink:href="http://localhost:8080/app/control/app/flex/svgdol/1321955504845/20111123141633795.jpg" id="svg_2" height="362.33104" width="308.62977" y="18.40178" x="234.58535"/>
  <image transform="rotate(-13.6166, 149.053, 95.3409)" xlink:href="http://localhost:8080/app/control/app/flex/svgdol/1321955504845/20111123141524886.jpg" id="svg_1" height="246.3374" width="314.99999" y="-27.82715" x="-8.44604"/>
  <text transform="matrix(1, 0, 0, 1.20588, 0, -25.8382)" xml:space="preserve" text-anchor="middle" font-family="Cursive" font-size="24" id="svg_3" y="155.817" x="265" stroke-width="0" stroke="#000000" fill="#000000">All Mine....!!!!</text>
 </g>
</svg>


but even after this the PDFTransocder 's output , i.e. the PDF doesn't contain the text in proper font, I tried to install the font on my O.S. as well,

but that too didn't work.


I'm using batik-all-1.6.jar ,Java version is 1.6 and O.S. is Linux(Ubuntu).

Any guidance /pointers will of extreme help as I've been debugging the library at runtime since last couple of days and haven't been able to find the cause.


Regards
Prince


> org.apache.batik.apps.rasterizer.SVGConverter
> ---------------------------------------------
>
>                 Key: BATIK-1002
>                 URL: https://issues.apache.org/jira/browse/BATIK-1002
>             Project: Batik
>          Issue Type: Bug
>          Components: SVG DOM
>    Affects Versions: 1.6
>         Environment: Operating System: Linux
> Platform: PC
>            Reporter: Prince Sewani
>            Assignee: Batik Developer's Mailing list
>
> Hi,
> I've a weird problem, I'm using org.apache.fop.svg.PDFTranscoder to generate a
> PDf from an SVG document in xml format, the problem that I'm facing is despite of defining 'pdf-renderer-cfg.xml' in the specified format and configuring the PDFTranscoder with it, PDFTranscoder is not embedding the font into the PDF. In the 'embed-url' I've given actual path to the true type font.
> The contents of 'pdf-renderer-cfg.xml' are :
> <?xml version="1.0" encoding="UTF-8"?>
> <pdf-renderer>
>   <fonts>
>          <font metrics-url="/home/prince/appDir/webapp/lib/Fonts/cursive-standard.xml" kerning="no" embed-url="/home/prince/appDir/webapp/lib/Fonts/Cursive-standard.ttf">
>           <font-triplet name="Cursive" style="normal" weight="normal"/>
>         </font>
>   </fonts>
> </pdf-renderer>
> and to configure the PDF transcoder I've extended org.apache.batik.apps.rasterizer.SVGConverter
> and overridden 'execute' method as :
> {code}
>    public void execute() throws SVGConverterException {
>         // Compute the set of SVGConverterSource from the source properties
>         // (srcDir and srcFile);
>         // This throws an exception if there is not at least one src file.
>         Vector sources =  computeSources();
>         // Compute the destination files from dest
>         Vector dstFiles = null;
>         if(sources.size() == 1 && dst != null && isFile(dst)){
>             dstFiles = new Vector();
>             dstFiles.addElement(dst);
>         }
>         else{
>             dstFiles =  computeDstFiles(sources);
>         }
>        
>         //Getting the path of the FOP config file
>         String fopPath = UtilProperties.getPropertyValue("fop.properties", "fop.path", "webapp/lib/Fonts");
>         File userConfigFile = new File(fopPath + "/pdf-renderer-cfg.xml");       
>        
>         //Build the configuration
>         cfgBuilder = new DefaultConfigurationBuilder();       
>         try {
>             cfg = cfgBuilder.buildFromFile(userConfigFile);
>         } catch (ConfigurationException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (SAXException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } catch (IOException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         }
>        
>         //Get the PDF Transcoder object
>         pdfTranscoder = new PDFTranscoder();
>        
>         //Configure the transcoder
>         try {
>             pdfTranscoder.configure(cfg);
>         } catch (ConfigurationException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         }
>        
>         // Now, get the transcoder to use for the operation       
>         Transcoder transcoder = (Transcoder) pdfTranscoder;
>         if(transcoder == null) {
>             throw new SVGConverterException(ERROR_CANNOT_ACCESS_TRANSCODER,
>                                              new Object[]{destinationType.toString()},
>                                              true /* fatal error */);
>         }
>         // Now, compute the set of transcoding hints to use
>         Map hints = computeTranscodingHints();
>         transcoder.setTranscodingHints(hints);
>         // Notify listener that task has been computed
>         if(!controller.proceedWithComputedTask(transcoder,
>                                                hints,
>                                                sources,
>                                                dstFiles)){
>             return;
>         }
>         // Convert files one by one
>         for(int i = 0 ; i < sources.size() ; i++) {
>             // Get the file from the vector.
>             SVGConverterSource currentFile
>                 = (SVGConverterSource)sources.elementAt(i);
>             File outputFile  = (File)dstFiles.elementAt(i);
>             createOutputDir(outputFile);
>             transcode(currentFile, outputFile, transcoder);
>         }
>     }
>    
> }
> {code}
> and the content of the svg file is  :
> <svg width="432" height="288" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
>  <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
>  <g>
>   <title>Layer 1</title>
>   <image transform="rotate(14.4551, 388.899, 199.566)" xlink:href="http://localhost:8080/app/control/app/flex/svgdol/1321955504845/20111123141633795.jpg" id="svg_2" height="362.33104" width="308.62977" y="18.40178" x="234.58535"/>
>   <image transform="rotate(-13.6166, 149.053, 95.3409)" xlink:href="http://localhost:8080/app/control/app/flex/svgdol/1321955504845/20111123141524886.jpg" id="svg_1" height="246.3374" width="314.99999" y="-27.82715" x="-8.44604"/>
>   <text transform="matrix(1, 0, 0, 1.20588, 0, -25.8382)" xml:space="preserve" text-anchor="middle" font-family="Cursive" font-size="24" id="svg_3" y="155.817" x="265" stroke-width="0" stroke="#000000" fill="#000000">All Mine....!!!!</text>
>  </g>
> </svg>
> but even after this the PDFTransocder 's output , i.e. the PDF doesn't contain the text in proper font, I tried to install the font on my O.S. as well,
> but that too didn't work.
> I'm using batik-all-1.6.jar ,Java version is 1.6 and O.S. is Linux(Ubuntu).
> Any guidance /pointers will of extreme help as I've been debugging the library at runtime since last couple of days and haven't been able to find the cause.
> Regards
> Prince



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-dev-help@xmlgraphics.apache.org