我正在努力使用我的xsl:fo(Apache Fop 1.1).我正在尝试使用内嵌图像和内联文本元素生成一个块,其中可能包含换行符.
<fo:block>
<fo:inline>First Line Second Line, Image: </fo:inline>
<fo:inline>
<fo:external-graphic scaling="non-uniform" content-height="scale-to-fit" content-width="4mm" height="4mm" src="data:image;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABfCAIAAAB6Ck5uAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA0SURBVHhe7cGBAAAAAMOg+VNf4QBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCoAXMKAAFau+l4AAAAAElFTkSuQmCC"/>
</fo:inline>
<fo:inline> some more Text on Line 2 3rd Line</fo:inline>
</fo:block>
Run Code Online (Sandbox Code Playgroud)
我希望输出会是
FirstLine
SecondLine, Image: || some more Text on Line 2
3rd Line
Run Code Online (Sandbox Code Playgroud)
我得到的是:
FirstLine SecondLine, Image: || some more Text on Line 2 3rd Line
Run Code Online (Sandbox Code Playgroud)
我已经玩了一段时间,在fo:block元素和/或fo:inline元素上有以下属性,给出了奇怪或意外的结果.
white-space-collapse="false"
white-space-treatment="preserve"
linefeed-treatment="preserve"
Run Code Online (Sandbox Code Playgroud)
有什么建议?
编辑1:将内联元素更改为这样的块
<fo:block white-space-treatment="ignore">
<fo:block white-space="pre">First Line
Second Line, Image: </fo:block>
<fo:block>
<fo:external-graphic scaling="non-uniform" content-height="scale-to-fit" content-width="4mm" height="4mm" src="data:image;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABfCAIAAAB6Ck5uAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA0SURBVHhe7cGBAAAAAMOg+VNf4QBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCoAXMKAAFau+l4AAAAAElFTkSuQmCC"/>
</fo:block>
<fo:block white-space="pre"> some more Text on Line 2 3rd Line</fo:block>
</fo:block>
Run Code Online (Sandbox Code Playgroud)
给了我在元素中的预期包装,但是为每个块生成了一个新行,这不是我想要存档的.
lfu*_*ini 15
换行符可以作为换行符或数字字符实体(
或 )存在于FO文档中; 以下FO块完全等效:
<fo:block>Before the linefeed
after the linefeed.</fo:block>
<fo:block>Before the linefeed
after the linefeed.</fo:block>
Run Code Online (Sandbox Code Playgroud)
换行的默认处理包括:
这就解释了为什么您的初始输入会产生一个输出,其中所有内容块连续放置在同一行上.
使用该属性linefeed-treatment="preserve"保留两种形式的换行符,并且行构建过程将遵循它们(它们被称为强制换行符).请注意,linefeed-treatment仅适用于fo:block元素 ; 它对fo:inline元素没有影响.
您的"编辑1"块有比您需要的更多换行,因为"......第二行,图像:",图像和"第2行的一些文本......"在三个不同的fo:block元素内,每个块都生成自己的线.
获得所需输出的最简单方法可能是这一个,fo:block只保留一个换行符(这只是你的原始输入,在删除不必要的fo:inlines并将所有内容放在同一行上之后:
<fo:block linefeed-treatment="preserve">First Line
Second Line, Image: <fo:external-graphic scaling="non-uniform" content-height="scale-to-fit" content-width="4mm" height="4mm" src="data:image;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABfCAIAAAB6Ck5uAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA0SURBVHhe7cGBAAAAAMOg+VNf4QBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCoAXMKAAFau+l4AAAAAElFTkSuQmCC"/> some more Text on Line 2 3rd Line</fo:block>
Run Code Online (Sandbox Code Playgroud)
请注意,您不能缩进此代码,因为额外的换行也会出现在输出中!
第二个解决方案,不涉及使用linefeed-treatment属性并创建更容易读取的代码,将使用空块而不是强制换行:
<fo:block>
First Line<fo:block/>Second Line, Image:
<fo:external-graphic scaling="non-uniform" content-height="scale-to-fit" content-width="4mm" height="4mm" src="data:image;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABfCAIAAAB6Ck5uAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA0SURBVHhe7cGBAAAAAMOg+VNf4QBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCoAXMKAAFau+l4AAAAAElFTkSuQmCC"/>
some more Text on Line 2<fo:block/>3rd Line
</fo:block>
Run Code Online (Sandbox Code Playgroud)
由于不保留换行,我们可以自由使用它们:
<fo:block>
First Line
<fo:block/>
Second Line, Image:
<fo:external-graphic scaling="non-uniform" content-height="scale-to-fit" content-width="4mm" height="4mm" src="data:image;base64,iVBORw0KGgoAAAANSUhEUgAAAGcAAABfCAIAAAB6Ck5uAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA0SURBVHhe7cGBAAAAAMOg+VNf4QBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCoAXMKAAFau+l4AAAAAElFTkSuQmCC"/>
some more Text on Line 2
<fo:block/>
3rd Line
</fo:block>
Run Code Online (Sandbox Code Playgroud)
空块分区外部块的内容,而不在输出中创建任何内容.
| 归档时间: |
|
| 查看次数: |
15679 次 |
| 最近记录: |