我正在使用 Apache FOP 制作一个 PDF 生成器,其中一个主要要求是用一系列像这样的破折号填充段落的剩余空白空间:
This is a paragraph on a page that will be converted to PDF
but the remaining space must be filled.-------------------
This is another paragraph on the same page and again the re
maining space must be filled.------------------------------
棘手的部分是我将使用非等宽(可变宽度)字体。此外,段落对齐方式将设置为justify
。这两个要求是由政府设置的,不能更改(这实际上是有道理的,因为生成的 PDF 主要用于打印目的)。
根据我的发现,在 FOP 中精确计算文本宽度(考虑到可变宽度、字距调整等)似乎是不可能的。
我目前的解决方案是破解 xsl:
<fo:block background-image=dash.jpg>
<fo:inline background-color=white>This is a paragraph on a page that will be converted to PDF but the remaining space must be filled.</fo:inline>
</fo:block>
dash.jpg
是一个破折号字符的图像,其尺寸经过仔细计算,以便当它平铺在段落中时它位于正确位置,同时考虑到字体高度和间距等因素。该<fo:inline>
标签将使用白色背景覆盖这些破折号,使其仅出现在段落的剩余空白空间中。
然而,这个 hack 的问题在于它是一个 hack:图像高度的计算不能非常精确,因为字体大小、间距和边距是使用点而不是像素计算的,这是我做出的决定,因为生成的 PDF 主要用于印刷。
我想不出其他解决方案,因为 FOP 本身不支持某些属性,例如float
and display
,老实说,这可以帮助我走得更远。我想知道你是否有比我现在更好的解决方案。
@NavinRawat 提出的答案:
<fo:block text-align-last="justify">... a long paragraph ...<fo:leader leader-pattern="dots" /></fo:block>