具有浮动 div 类元素的格式化语言

Posted

技术标签:

【中文标题】具有浮动 div 类元素的格式化语言【英文标题】:Formatting language with floating div like element 【发布时间】:2011-09-05 21:56:25 【问题描述】:

我有存储在结构化 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;" />

这样,当两者的文本长度大于容器宽度时,写入“Left text” DIV,然后写入“Right text” DIV BELOW

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

我正在研究 XSL-FO,但我找不到支持这些功能的免费渲染器。我考虑过使用 XSL 制作 WordML 文件,但我没有找到任何关于它的教程。拥有一个 Word(或 Open Office)文档会很棒,因为我可以进行细微的调整。另外,我正在考虑使用 LaTex。

你能给我什么建议?

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

【问题讨论】:

您真正需要什么建议?无法正确收集您的想法。简述。 由于我是 XML 转换的初学者,我需要一个语言建议(免费),它允许我需要的这 2 个功能(浮动和分页符)。 XSL-FO 似乎不足(至少对于 FOP 和 XEP Free)。我不知道 Latex 是否允许我这样做。我知道我可以在 Word 文档中做到这一点(也可能在 OO Writer 中),因此 XML 到 Word(或 Writer)是一种选择,但我找不到任何好的参考或教程。基本上我需要帮助选择一种语言来学习。 你的意思是要将XML文件的内容渲染成表格? 我想以演示格式呈现 XML,例如 HTML、XSL-FO、WordML 等。 我知道!!!。我想知道,如果您正在渲染 XML,它会是 HTML table 吗?对了,你知道php吗? 【参考方案1】:

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

这些模式的优点是可以让您编写自己的 XML 并根据它们支持的输出格式根据需要呈现它。而且,它们是免费的,只要你有正确的源文件,你就可以很容易地获得PDF、RTF、WebHelp、HTML等。

所以,你需要:

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

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

DITA-OT DITAC

就个人而言,我会选择 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 是可行的。否则你应该花点钱。

【讨论】:

我的第一个想法(甚至在开始学习 XSL 之前)是 DocBook 或 DITA,但我发现它势不可挡,尤其是 DocBook。而且由于我对浮动有这些设计限制,我认为它不会起作用。你知道 DITA 是如何支持它的吗? DITA 不支持“浮动”。这是您选择从应该支持它的 DITA 源获得的输出格式。如果您的最终选择是通过 XSL-FO 获取 PDF,而不是从头开始编写 XSL-FO,请使用 DITA-OT,它会为您完成工作。 @Luiz-Borges:DITA-OT 提供了一种特定的 XSL-FO 转换类型,称为 PDF2,其 XSL-FO 处理器是 RenderX。 RenderX 目前支持fo:float,所以我想您将能够找到自己的方式。 可能您将需要覆盖一些 PDF2 模板,这绝对比实现您自己的 PDF 转换更简单。 @Luiz-Borgez:除此之外,请尝试更好地参与 SO 社区的工作方式。您可能会被告知upvoting 和accept-rate/answers。 @empo,我刚刚发现了 Prince 及其精彩。我本来打算在一些 PDF 打印机上使用 Opera,但我肯定会看到免费版 Prince 角落里的水印,它非常时尚 :)【参考方案2】:

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

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

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

【讨论】:

FOP 不支持 fo:float,这是必须的,因为或当前的文档大量使用这种风格(基于 HTML/CSS)并且人们已经习惯了。此外,替代方案非常糟糕,您可以选择:半空间与表格或与列表项黑客重叠。 哇,我已经很久没有使用 FOP 了,我只是假设浮点数在某种程度上得到了支持。我的错。对不起。

以上是关于具有浮动 div 类元素的格式化语言的主要内容,如果未能解决你的问题,请参考以下文章

什么是BFC? CSS 使用伪元素清除浮动的方法

BFC——块级格式化上下文

清除浮动clear/BFC

解决高度坍塌问题

BFC-边距重叠解决方案

有没有办法强制 div 内的浮动 div 元素仅使用 css 和 html 垂直占据可用空间?