提问者:小点点

配置蜡染以使用自定义字体


我有一个问题配置蜡染PDFTranscoder为Svg到Pdf转换。我想嵌入自定义truetype字体来PDF输出,因此我使用蜡染转码器。我在fop配置文件中提供字体配置,如下所述:https://xmlgraphics.apache.org/fop/2.2/fonts.html

我尝试使用org. apache.xmlgraph.Fop版本2.1和2.2进行转换。没有任何成功。

我的pdf输出带有“Times New Roman”字体,而不是嵌入字体“Arial”,因为它应该,基于下面的示例:

我的配置文件:

 <?xml version="1.0" encoding="UTF-8"?>
 <fop version="1.0">
  <renderers>
   <renderer mime="application/pdf">
     <fonts>
        <directory>C:/path/to/fontsfolder</directory>   
        <auto-detect/>
     </fonts>
   </renderer>
  </renderers>
 </fop>

这是我的转码器代码:

 import org.apache.batik.transcoder.*;
 import org.apache.fop.svg.PDFTranscoder; 
 import org.w3c.dom.Document;


 PDFTranscoder transcoder = new PDFTranscoder();

 try {
   DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
   Configuration cfg = cfgBuilder.buildFromFile(new File("path-to-xml-config-file"));
   ContainerUtil.configure(transcoder, cfg);
 } catch (Exception e) {
   throw new TranscoderException(e);
 }
   transcoder.transcode(new TranscoderInput(doc),
                      new TranscoderOutput(os));

                     
                     

示例svg文件:

<defs>
<style type="text/css">
     @font-face{font-family:'Arial';font-style: normal;font-weight:
     400;src:url('C:/path/to/fontsfolder/arial.ttf')
     format('truetype');}
</style>
</defs>
   
 
  <text x="55" y="245" style="font-family: 'Arial'; font-weight:normal;
font-style: normal" >Sample text</text>

有人能告诉我Transcoder配置缺少什么吗?在这种情况下,将svg字体嵌入svg文件不是一个选项。


共1个答案

匿名用户

更新配置文件并将字体部分移到渲染器部分之外,如下所示:

我的配置文件:

 <?xml version="1.0" encoding="UTF-8"?>
 <fop version="1.0">
     <fonts>
        <directory>C:/path/to/fontsfolder</directory>   
        <auto-detect/>
     </fonts>
 </fop>

从Apache网站批量字体配置是完全错误的:https://xmlgraphics.apache.org/fop/2.2/fonts.html

这个答案是作为问题配置蜡染使用自定义字体的编辑发布在CCBY-SA3.0下。