2

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

<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。

你能给我什么建议?

编辑:我正在检查一些我不知道的 CSS 功能(多年来没有弄乱它),它确实有一些与打印相关的功能(page-break-inside:avoid、@page 等)除了有一个对浮动和表格自动布局的出色支持。尽管打印功能没有得到广泛支持,但 Opera 和 IE 确实支持它,我在 IE9 中进行了一些测试,它的渲染效果非常好。所以我将尝试使用 HTML/CSS 的 XSLT,因为它拥有我需要的一切,并且学习曲线更流畅(我已经了解了一些 CSS,并且已经使用 HTML 多年)。

4

2 回答 2

2

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

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

因此,您需要:

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

如果您决定使用 DITA,您有两个自由选择:

  • DITA-OT
  • 迪塔克

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

我没有在此处提供任何参考,因为您可以使用 Google 轻松找到所需的内容。


关于浮动

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

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

于 2011-06-01T05:54:47.463 回答
0

我肯定会坚持使用 XSL-FO 和Apache Fop。我对我能够获得的结果感到非常满意,并且我唯一看到它挣扎的时候是有人认为尝试让它生成 Word 文档是个好主意。我从未见过这会产生好的结果。事实上,我对它以 PDF 或 PS 格式生成的输出感到满意。

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

最后,我会避免在工作/开放式办公室心态中使用 tweek it。如果您要努力实现文档生成的自动化,请花时间把它做好,这样就不需要手动步骤了。

于 2011-06-01T06:14:58.323 回答