使用类似div的浮动元素格式化语言



我有存储在结构化XML中的数据,我希望使用XSLT(或其他替代方法)使其更具可读性。目标文档应该有很多文本实例在同一行左右对齐,我需要有类似div floats:的行为

<div style="float: left;">
  <p align=left>
    Left text. Left text. Left text. Left text. Left text. Left text. 
  </p>
</div>
<div style="float: right;">
  <p align=right>
    Right text. Right text. Right text. Right text. Right text. Right text. 
  </p>
</div>
<div style="clear: both;" />

这样,当两者的文本长度都大于容器宽度时,会写入"左文本"DIV,然后在其下方写入"右文本"DIV

我不能使用XSLT来制作HTML文件,因为它将在打印中使用,而且我还需要一种在分页符处具有"保持一致"功能的语言(如果分页符发生在元素中间,则应在元素之前分页符)。拥有支持自动调整列大小的表(如HTML表)将是一个巨大的优势,但不是必需的。

我在研究XSL-FO,但找不到支持这些功能的免费渲染器。我曾想过用XSL制作一个WordML文件,但我还没有找到任何教程。有一个Word(或Open Office)文档会很好,因为我可以做一些小的调整。此外,我正在考虑使用LaTex。

你能给我什么建议吗?

EDIT:我检查了一些我不知道的CSS功能(已经好几年没有搞砸了),除了对浮动和表的自动布局有极好的支持外,它还有一些与打印相关的功能(内部分页符:避免、@page等)。尽管打印功能没有得到广泛支持,但Opera和IE确实支持它,我在IE9中进行了一些测试,它表现得很好。因此,我将尝试将XSLT与HTML/CSS结合使用,因为它拥有我所需要的一切,并且将有一个更平滑的学习曲线(我已经了解一些CSS,并且已经使用HTML多年了)。

我认为您应该通过使用一些众所周知的XML标准模式(如DITA或DOCBOOK)来决定采用更通用的方法来解决您的问题。

这些模式的优点是可以编写自己的XML,并根据它们支持的输出格式根据需要进行呈现。此外,它们是免费的,一旦你有了相应的源文档,你就可以轻松地获得PDF、RTF、WebHelp、HTML等。

所以,你需要:

  • 做你的决定,DITA还是DOCBOOK
  • 编写一个获取XML的transfrom,并将其转换为特定的标准DITA或DOCBOOK
  • 决定用于管理您选择的标准的工具,并测试您可以从中获得的所有输出,看看哪一个更适合

如果您决定使用DITA,您有两个免费选项:

  • DITA-OT
  • DITAC

就我个人而言,我会选择DITA和DITA-OT,因为它具有基于XSLT的插件和基于ANT的自定义构建的灵活性。但两者都有其原因。我从DITA-OT开始,最后使用DITA-OT和DITAC。

我没有在这里提供任何参考,因为你可以很容易地使用谷歌找到你需要的东西。


关于FLOAT

DITA-OT提供了一个特定的XSL-FO transtype,称为PDF2,其XSL-FO处理器为RenderX。RenderX目前支持fo:foat,所以我想您将能够找到自己的方式。可能你需要覆盖一些PDF2模板,这肯定比实现自己的PDF转换更简单。

请注意,RenderX是可行的,只要每个页面上的小脚水印对您来说是可以接受的。否则你应该花些钱。

我肯定会坚持XSL-FO和Apache Fop。我对我能得到的结果感到非常高兴,我唯一看到它挣扎的时候是有人认为尝试让它制作Word文档是个好主意。我从来没有见过这种方法产生好的效果。事实上,我对它以PDF或PS格式产生的输出非常满意。

请详细说明FOP在浮动和分页符方面是如何不足的?很难知道这是特定于这些功能的问题,还是特定于Word/RTF/HTML输出格式的功能。

最后,我会避免在工作/开放办公室的心态。如果您要努力实现文档生成的自动化,请将时间花在正确的事情上,这样就没有手动步骤了。

最新更新