XSL:FO内联和漂亮打印

时间:2017-12-01 12:14:23

标签: java xml pdf xsl-fo

我正在尝试使用xsl:fo来创建pdf。我坚持使用内联元素的问题。我需要用一个粗体字来写行。例如:

  

我需要这个加粗。

我可以用这段代码做到这一点:

<fo:block>
    <fo:inline>I need </fo:inline><fo:inline font-weight="bold">this</fo:inline><fo:inline> to be bold</fo:inline>
</fo:block>

但是因为我编写了xml programmaticaly,它会被打印出来(我可能会禁用它,但它会在一行上,而且不是人类可读的。

格式化后不起作用:

<fo:block>
    <fo:inline>I need </fo:inline>
    <fo:inline font-weight="bold">this</fo:inline>
    <fo:inline> to be bold</fo:inline>
</fo:block>

当生成pdf时,它会在文本之间产生大的水平空间。

你知道怎么做这项工作吗?非常感谢。

1 个答案:

答案 0 :(得分:3)

我同意@Andremonly。

检查您是否在任何祖先FO上设置white-space-collapse="false"(请参阅https://www.w3.org/TR/xsl11/#white-space-collapse)。

还有其他属性会影响空白处理。您认为哪一个匹配?

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
 <fo:layout-master-set>
  <fo:simple-page-master master-name="page" 
   margin="0.1in" page-height="4in" page-width="3in">
   <fo:region-body region-name="body" margin="6pt"/>
  </fo:simple-page-master>
 </fo:layout-master-set>
 <fo:page-sequence master-reference="page">
  <fo:flow flow-name="body">
    <fo:block>
    <fo:inline>I need </fo:inline>
    <fo:inline font-weight="bold">this</fo:inline>
    <fo:inline> to be bold</fo:inline>
    </fo:block>
    <fo:block white-space-collapse="false">
    <fo:inline>I need </fo:inline>
    <fo:inline font-weight="bold">this</fo:inline>
    <fo:inline> to be bold</fo:inline>
    </fo:block>
    <fo:block white-space-treatment="preserve">
    <fo:inline>I need </fo:inline>
    <fo:inline font-weight="bold">this</fo:inline>
    <fo:inline> to be bold</fo:inline>
    </fo:block>
    <fo:block white-space-treatment="preserve" white-space-collapse="false">
    <fo:inline>I need </fo:inline>
    <fo:inline font-weight="bold">this</fo:inline>
    <fo:inline> to be bold</fo:inline>
    </fo:block>
    <fo:block linefeed-treatment="preserve">
    <fo:inline>I need </fo:inline>
    <fo:inline font-weight="bold">this</fo:inline>
    <fo:inline> to be bold</fo:inline>
    </fo:block>
    <fo:block white-space-collapse="false" linefeed-treatment="preserve">
    <fo:inline>I need </fo:inline>
    <fo:inline font-weight="bold">this</fo:inline>
    <fo:inline> to be bold</fo:inline>
    </fo:block>
    <fo:block white-space-treatment="preserve" linefeed-treatment="preserve">
    <fo:inline>I need </fo:inline>
    <fo:inline font-weight="bold">this</fo:inline>
    <fo:inline> to be bold</fo:inline>
    </fo:block>
    <fo:block white-space-treatment="preserve" white-space-collapse="false" linefeed-treatment="preserve">
    <fo:inline>I need </fo:inline>
    <fo:inline font-weight="bold">this</fo:inline>
    <fo:inline> to be bold</fo:inline>
    </fo:block>
  </fo:flow>
 </fo:page-sequence>
</fo:root>