将 scaled-down 背景图像放置在 body 区域的底部
Position a scaled-down background image at the bottom of the body region
我需要在封面上显示大背景图片。该图像需要:
- 要缩小到
region-body
的宽度。
- 正好位于
region-body
的底部。
使用 background-image
不是一个选项,因为图像需要缩放。因此,我将图像打印在延伸到 region-body
以下的长 region-before
中。有效。
然后我尝试使用 absolute-position="absolute"
和 bottom="0cm"
将图像定位在 region-before
的底部。不幸的是,bottom
没有按我预期的方式工作。 (图片保持在顶部。)
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="section1-cover" page-height="11in" page-width="8.5in"
margin-top="1cm" margin-bottom="0">
<fo:region-before region-name="xsl-region-before" extent="11in - 1cm - .75in"
background-color="beige"/>
<fo:region-body margin-top="1cm" margin-bottom=".75in" margin-right=".395in"
margin-left=".395in"/>
<fo:region-after region-name="xsl-region-after" extent=".75in" background-color="orange"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="section1-cover">
<fo:static-content flow-name="xsl-region-before">
<fo:block-container margin-right=".395in" margin-left=".395in"
absolute-position="absolute" bottom="0cm">
<!-- I expected that block-container to go down to the bottom -->
<fo:block line-height=".5">
<!-- line-height="1" seems more logical but yields unwanted extra space -->
<fo:external-graphic src="url('cover-background.jpg')" width="100%"
content-width="scale-down-to-fit"/></fo:block>
</fo:block-container>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="28pt">Title</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
有人有解决办法吗?
注意:我不想从顶部定位该图像,因为我无法可靠地计算缩放后的图像高度。
注意: 它必须在 FOP 中工作。
使用<fo:region-before display-align="after" />
(并省略fo:block-container
)。参见 https://www.w3.org/TR/xsl11/#display-align。
FOP 一致性页面 (https://xmlgraphics.apache.org/fop/compliance.html) 声明 FOP 具有部分一致性,因此 YMMV。
用 Larry Wall 的话来说,方法不止一种:
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master
master-name="section1-cover"
page-height="11in" page-width="8.5in">
<fo:region-body
margin-top="1cm"
margin-bottom="0.75in"
background-color="beige" />
<fo:region-after
region-name="xsl-region-after"
extent=".75in"
background-color="orange" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="section1-cover">
<fo:flow flow-name="xsl-region-body">
<fo:block-container
absolute-position="absolute"
bottom="0in"
left="0.395in"
right="0.395in"
display-align="after">
<fo:block line-height="0">
<fo:external-graphic
src="url('cover-background.jpg')"
width="100%"
content-width="scale-down-to-fit"/>
</fo:block>
</fo:block-container>
<fo:block
margin-left="0.375in"
margin-right="0.375in"
font-size="28pt">Title</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
已使用 AH Formatter V6.5 和 FOP 进行测试。
稍微修改一下图片就可以使用background-image。例如,您可以创建一个与您的页面大小相同的空白背景图像,并将您的图像放置在该空白背景中的正确位置。
并找到缩放后的图像高度:
- 在任何支持 real-world 尺寸 (mm/in) 的图像编辑器中打开图像。 Illustrator,例如 Inkscape。
- 将图像缩放到您想要的宽度。
- 测量高度(在 Inkscape 中:通过在图像上画一条垂直线)。
或者计算它:
您知道希望图像具有的宽度 (x) 以及图像的原始大小(高度 h 和宽度 w)。你想要的高度(y)是(x/w)*h。
我需要在封面上显示大背景图片。该图像需要:
- 要缩小到
region-body
的宽度。 - 正好位于
region-body
的底部。
使用 background-image
不是一个选项,因为图像需要缩放。因此,我将图像打印在延伸到 region-body
以下的长 region-before
中。有效。
然后我尝试使用 absolute-position="absolute"
和 bottom="0cm"
将图像定位在 region-before
的底部。不幸的是,bottom
没有按我预期的方式工作。 (图片保持在顶部。)
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="section1-cover" page-height="11in" page-width="8.5in"
margin-top="1cm" margin-bottom="0">
<fo:region-before region-name="xsl-region-before" extent="11in - 1cm - .75in"
background-color="beige"/>
<fo:region-body margin-top="1cm" margin-bottom=".75in" margin-right=".395in"
margin-left=".395in"/>
<fo:region-after region-name="xsl-region-after" extent=".75in" background-color="orange"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="section1-cover">
<fo:static-content flow-name="xsl-region-before">
<fo:block-container margin-right=".395in" margin-left=".395in"
absolute-position="absolute" bottom="0cm">
<!-- I expected that block-container to go down to the bottom -->
<fo:block line-height=".5">
<!-- line-height="1" seems more logical but yields unwanted extra space -->
<fo:external-graphic src="url('cover-background.jpg')" width="100%"
content-width="scale-down-to-fit"/></fo:block>
</fo:block-container>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="28pt">Title</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
有人有解决办法吗?
注意:我不想从顶部定位该图像,因为我无法可靠地计算缩放后的图像高度。
注意: 它必须在 FOP 中工作。
使用<fo:region-before display-align="after" />
(并省略fo:block-container
)。参见 https://www.w3.org/TR/xsl11/#display-align。
FOP 一致性页面 (https://xmlgraphics.apache.org/fop/compliance.html) 声明 FOP 具有部分一致性,因此 YMMV。
用 Larry Wall 的话来说,方法不止一种:
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master
master-name="section1-cover"
page-height="11in" page-width="8.5in">
<fo:region-body
margin-top="1cm"
margin-bottom="0.75in"
background-color="beige" />
<fo:region-after
region-name="xsl-region-after"
extent=".75in"
background-color="orange" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="section1-cover">
<fo:flow flow-name="xsl-region-body">
<fo:block-container
absolute-position="absolute"
bottom="0in"
left="0.395in"
right="0.395in"
display-align="after">
<fo:block line-height="0">
<fo:external-graphic
src="url('cover-background.jpg')"
width="100%"
content-width="scale-down-to-fit"/>
</fo:block>
</fo:block-container>
<fo:block
margin-left="0.375in"
margin-right="0.375in"
font-size="28pt">Title</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
已使用 AH Formatter V6.5 和 FOP 进行测试。
稍微修改一下图片就可以使用background-image。例如,您可以创建一个与您的页面大小相同的空白背景图像,并将您的图像放置在该空白背景中的正确位置。
并找到缩放后的图像高度:
- 在任何支持 real-world 尺寸 (mm/in) 的图像编辑器中打开图像。 Illustrator,例如 Inkscape。
- 将图像缩放到您想要的宽度。
- 测量高度(在 Inkscape 中:通过在图像上画一条垂直线)。
或者计算它: 您知道希望图像具有的宽度 (x) 以及图像的原始大小(高度 h 和宽度 w)。你想要的高度(y)是(x/w)*h。