apache fop嵌入字体粗体

时间:2013-06-17 08:55:41

标签: pdf-generation apache-fop

我在apache fop 1.0环境中使用嵌入式字体:

<fo:block-container  
  right="10mm" position="absolute">
  <fo:block font-family="hnlt57con" >
    my text
  </fo:block>
</fo:block-container>

configfile如下所示:

<fop version="1.0">
  <renderers>
   <renderer mime="application/pdf">
   <fonts>
       <font kerning="no" embed-url="Y:/test/helvetica-neue-lt-std-57-condensed.ttf" embedding-mode="subset">
           <font-triplet name="hnlt57con" style="normal" weight="normal" />
       </font>         
   </fonts>
   </renderer>
</renderers>

这样可以正常工作,文本以字体hnlt57con呈现。

我现在要做的是以粗体显示一些文字:

<fo:block-container  
  right="10mm" position="absolute">
  <fo:block font-family="hnlt57conbold" font-weight="bold"  >
    my text
  </fo:block>
</fo:block-container>

configfile如下所示:

<fop version="1.0">
  <renderers>
   <renderer mime="application/pdf">
   <fonts>
       <font kerning="no" embed-url="Y:/test/helvetica-neue-lt-std-57-condensed.ttf" embedding-mode="subset">
           <font-triplet name="hnlt57con" style="normal" weight="normal" />
       </font>
       <font kerning="no" embed-url="Y:/test/helvetica-neue-lt-std-57-condensed.ttf" embedding-mode="subset">
           <font-triplet name="hnlt57conbold" style="normal" weight="bold" />                 
       </font>       
   </fonts>
   </renderer>
</renderers>

不幸的是,文本不是以粗体显示,而是以与上例相同的方式。

添加额外的font-triplet(如http://www.scriptorium.com/whitepapers/fop_fonts/FOP_fonts5.html中的sugessted)并没有改变任何内容:

<fop version="1.0">
  <renderers>
   <renderer mime="application/pdf">
   <fonts>
       <font kerning="no" embed-url="Y:/test/helvetica-neue-lt-std-57-condensed.ttf" embedding-mode="subset">
           <font-triplet name="hnlt57con" style="normal" weight="normal" />
       </font>
       <font kerning="no" embed-url="Y:/test/helvetica-neue-lt-std-57-condensed.ttf" embedding-mode="subset">
           <font-triplet name="hnlt57conbold" style="normal" weight="bold" />
           <font-triplet name="hnlt57conbold" style="normal" weight="700" />
       </font>            
   </fonts>
   </renderer>
</renderers>

helvetica-neue-lt-std-57-condensed.ttf是一种使用fontforge从helvetica-neue-lt-std-57-condensed.otf转换自己的字体。

我的问题:

如何在嵌入字体中以粗体呈现一些文本?

该字体是否有可能以粗体显示,因为它是从otf转换而来的?在MS-Word中,我可以粗体使用它。

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

是的,你错过了最重要的事情。普通字体不是粗体字体,它们是不同的东西,因此是不同的文件。在您的示例中,您将正常字体和粗体字体指向完全相同的TTF文件(读取:字体文件)。即helvetica-neue-lt-std-57-condensed.ttf。

所以你告诉FOP使用与普通和粗体完全相同的字体文件,因此你会看到相同的输出。

要对此进行测试,请尝试将“粗体”条目指向您拥有的其他TTF文件。您将看到字符更改为该字体。

简而言之,“粗体”字体和“普通”字体不是从同一个TTF字体文件创建的,它们来自两个不同的文件。您应该将粗体条目指向具有粗体字形的其他文件。

哦,我应该补充一点,尽管您认为它在Microsoft Word中有效,但您确实错了。 Word是(1)使用不同但相似的字体而不告诉你或(2):假冒“通过膨胀字体中的像素来加粗。除非你真的在Windows中安装了它,否则不会使用完全不同的粗体字体不知道。