2015-06-17 144 views
0

这种情况: 我将html转换为xsl-fo格式为pdf。 我正在使用表格显示标题文本,如“4.4.1。[标题文本]”,因为它可能发生[标题文本]很长,并且在这种情况下应该换行,如下所示:带上标和垂直对齐的XSL-FO表格单元格

[table-row] 
    [cell with numbering] [cell with header text] 
[/table-row] 

有4种不同情况下,报头可以如何组成:

  1. 标题文本单线
  2. 标题文本换行到下一行
  3. 标题文本单线与标
  4. 标题文本换行到下一行与标

的问题是,标会增加该行的高度和乱用垂直文本对齐方式。这是它会怎样看默认情况下,所有4个情况:

__________________________ 
|_1.2.3_|_header_text____|  <<< OK 

__________________________ 
| 1.2.3 | long long long |  <<< OK 
|_______|_header_text____| 

__________________________ 
| 1.2.3 |   (1) |  <<< NOT OK 
|_______|_header_text____| 

__________________________ 
| 1.2.3 | long long long |  <<< OK 
|  |   (1) | 
|_______|_header_text____| 

正如你所看到的,在情况三号编号和大部分的标题文字的一个很好的方式不对齐。

我可以通过使用display-align =“after”在表格单元上使用编号来解决第3种情况。但为了不弄乱其他三种情况,我需要确定标题文本的内容是否会包装到下一行。 我用于输出的字体不是等宽字体,这就是为什么计数字符最好是近似值。

我的问题是,如何可以这样做的话3的样子:

__________________________ 
|  |   (1) | 
|_1.2.3_|_header_text____| 

而其他保持不变。

谢谢!

编辑:例如,标记为壳体3

<fo:table font-size="18pt" font-weight="bold" font-style="italic" space-after="2mm" space-before="7mm" keep-with-next.within-page="always"> 
    <fo:table-column column-width="16mm"/> 
    <fo:table-column/> 
    <fo:table-body> 
     <fo:table-row> 
      <fo:table-cell> 
       <fo:block>1.2.3</fo:block> 
      </fo:table-cell> 
      <fo:table-cell> 
       <fo:block> 
        <fo:block text-align="left"> 
         <fo:block>Header Text (<fo:inline baseline-shift="super">1</fo:inline>) 
         </fo:block> 
        </fo:block> 
       </fo:block> 
      </fo:table-cell> 
     </fo:table-row> 
    </fo:table-body> 
</fo:table> 

编辑2:我试图扭转标逻辑:

  • 不要在文本中使用上标标记该上标
  • 应为的标题(包括编号)的所有文本部分包裹在

这个“工作”,我测试它的情况下3 + 4和标题文本是符合编号在这两种情况下。

但它有一个缺点,就是在标题顶部有一点额外的间距,我必须扭转才能完全恢复标题中的上标设置。

回答

1

我正在使用fo:inline元素来包装上标文本。如果将行堆叠策略从默认的最大高度更改为字体高度,则不会与上标产生差距。尝试:

<fo:inline vertical-align="super" line-stacking-strategy="font-height">Your superscript text here</fo:inline> 

编辑:我把线堆叠战略父块过这实际上造成的影响。我Altsoft的渲染XML2PDF测试:

<fo:block line-stacking-strategy="font-height">Header Text <fo:inline baseline-shift="super">(1)</fo:inline> 

得到确切相同的基线,我建议将其用于在前场过于:

<fo:block line-stacking-strategy="font-height">1.2.3</fo:block> 
+0

我想你的建议,但unfortunateIy它看起来像它不在产出方面没有什么不同。 我在原始问题中添加了(原始)标记的示例。 – flitz

+0

通过块级元素上的行堆栈策略,它可以工作。谢谢! 我也对其他案例进行了测试。剩下的唯一小问题是上标文本现在将与其行的区域顶部重叠一点点。但是这不是一个大问题,而且上标文本通常是较小的字体(在问题的示例中未显示)这一事实更不重要。 – flitz

相关问题