我有一个问题配置蜡染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文件不是一个选项。
更新配置文件并将字体部分移到渲染器部分之外,如下所示:
我的配置文件:
<?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下。