我正在尝试使用 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,所以它会打印得很漂亮(我可以禁用它,但它会在一行上,这不是人类可读的。

像这样格式化时它不起作用:
<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 时,它会在文本之间产生较大的水平间距。

你有什么想法如何使这项工作?非常感谢。

最佳答案

我同意@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>

关于java - XSL :FO inline and pretty print,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47593194/

10-11 04:04