Apache FOP,将图像缩小到以毫米为单位的精确尺寸
Apache FOP, scale image down to exact size in millimeters
我正在尝试将图像缩小到精确的规格,87mm x 10mm
,但我没有将它缩小到正确的尺寸。
我正在使用 Apache FOP 2.0,这是我的 fop.xconf:
<fop version="1.0">
<strict-configuration>true</strict-configuration>
<strict-validation>true</strict-validation>
<base>./</base>
<font-base>./</font-base>
<source-resolution>72</source-resolution>
<target-resolution>72</target-resolution>
<default-page-settings height="11in" width="8.26in"/>
</fop>
这是应该显示图像的片段,它显示了图像,但从未缩小到我指定的尺寸。
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="3pt" text-align="center" font-weight="bold">
<fo:external-graphic src="data:image/png;base64, {{barcodeimage}}" content-width="87mm" width="100%" content-height="10mm" scaling="non-uniform"/>
</fo:block>
<fo:block font-size="8pt" text-align="center" font-weight="bold">
{{barcodetext}}
</fo:block>
</fo:flow>
切换到高度和宽度并且图像根本没有调整大小:
<fo:external-graphic src="data:image/png;base64, {{barcodeimage}}" width="87mm" height="10mm" scaling="non-uniform"/>
我试过使用 pt
而不是 mm
,但没有成功,尝试使用这个公式 px = mm * dpi / 25.4
切换到 px
,但仍然没有成功。
使用em
而不是mm
和content-width
而不是width
,图像缩小了,但我不知道如何从[=16=转换] 到 em
个单位。
我需要将大图像缩小到 87mm
宽度和 10mm
高度,正确的方法是什么?
更新:图像显示正确,页面大小不正确,这是在Okular PDF Viewer中截取的屏幕截图:
这是我的完整页面XML:
<?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="simple" page-height="29.7cm" page-width="21cm" margin="1cm">
<fo:region-body margin-top="18mm"/>
<fo:region-before extent="0"/>
<fo:region-after extent="0"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simple">
<!-- Page Header Goes Here -->
<fo:static-content flow-name="xsl-region-before">
<fo:block font-size="8pt" text-align="center" font-weight="normal">
Test BarCode
</fo:block>
</fo:static-content>
<!-- Page Footer Goes Here -->
<fo:static-content flow-name="xsl-region-after">
<fo:block font-size="8pt" text-align="center">
Page
<fo:page-number/>
</fo:block>
</fo:static-content>
<!-- Page Body Goes Here -->
<fo:flow flow-name="xsl-region-body">
<fo:block text-align="center">
<fo:external-graphic src="data:image/png;base64, barcodeimage" content-width="87mm" content-height="10mm" scaling="non-uniform"/>
</fo:block>
<fo:block font-size="5pt" text-align="center" font-weight="normal">
barcodetext
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
您应该能够使用 content-width
、content-height
和 scaling
:
实现您的需求
<fo:external-graphic src="data:image/png;base64, {{barcodeimage}}"
content-width="87mm" content-height="10mm"
scaling="non-uniform"/>
总结不同属性的作用:
content-width
和 content-height
控制 图像大小
scaling
控制图像纵横比(保留或修改以适合所需的图像大小)
width
和 height
控制查看图像的 视口大小 ;它可以比图像尺寸大,从而留下一些空隙,或者比图像尺寸小
overflow
说明视口尺寸小于图像尺寸时要做什么
(披露:我是一名 FOP 开发人员,虽然最近不太活跃)
我正在尝试将图像缩小到精确的规格,87mm x 10mm
,但我没有将它缩小到正确的尺寸。
我正在使用 Apache FOP 2.0,这是我的 fop.xconf:
<fop version="1.0">
<strict-configuration>true</strict-configuration>
<strict-validation>true</strict-validation>
<base>./</base>
<font-base>./</font-base>
<source-resolution>72</source-resolution>
<target-resolution>72</target-resolution>
<default-page-settings height="11in" width="8.26in"/>
</fop>
这是应该显示图像的片段,它显示了图像,但从未缩小到我指定的尺寸。
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="3pt" text-align="center" font-weight="bold">
<fo:external-graphic src="data:image/png;base64, {{barcodeimage}}" content-width="87mm" width="100%" content-height="10mm" scaling="non-uniform"/>
</fo:block>
<fo:block font-size="8pt" text-align="center" font-weight="bold">
{{barcodetext}}
</fo:block>
</fo:flow>
切换到高度和宽度并且图像根本没有调整大小:
<fo:external-graphic src="data:image/png;base64, {{barcodeimage}}" width="87mm" height="10mm" scaling="non-uniform"/>
我试过使用 pt
而不是 mm
,但没有成功,尝试使用这个公式 px = mm * dpi / 25.4
切换到 px
,但仍然没有成功。
使用em
而不是mm
和content-width
而不是width
,图像缩小了,但我不知道如何从[=16=转换] 到 em
个单位。
我需要将大图像缩小到 87mm
宽度和 10mm
高度,正确的方法是什么?
更新:图像显示正确,页面大小不正确,这是在Okular PDF Viewer中截取的屏幕截图:
这是我的完整页面XML:
<?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="simple" page-height="29.7cm" page-width="21cm" margin="1cm">
<fo:region-body margin-top="18mm"/>
<fo:region-before extent="0"/>
<fo:region-after extent="0"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simple">
<!-- Page Header Goes Here -->
<fo:static-content flow-name="xsl-region-before">
<fo:block font-size="8pt" text-align="center" font-weight="normal">
Test BarCode
</fo:block>
</fo:static-content>
<!-- Page Footer Goes Here -->
<fo:static-content flow-name="xsl-region-after">
<fo:block font-size="8pt" text-align="center">
Page
<fo:page-number/>
</fo:block>
</fo:static-content>
<!-- Page Body Goes Here -->
<fo:flow flow-name="xsl-region-body">
<fo:block text-align="center">
<fo:external-graphic src="data:image/png;base64, barcodeimage" content-width="87mm" content-height="10mm" scaling="non-uniform"/>
</fo:block>
<fo:block font-size="5pt" text-align="center" font-weight="normal">
barcodetext
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
您应该能够使用 content-width
、content-height
和 scaling
:
<fo:external-graphic src="data:image/png;base64, {{barcodeimage}}"
content-width="87mm" content-height="10mm"
scaling="non-uniform"/>
总结不同属性的作用:
content-width
和content-height
控制 图像大小scaling
控制图像纵横比(保留或修改以适合所需的图像大小)width
和height
控制查看图像的 视口大小 ;它可以比图像尺寸大,从而留下一些空隙,或者比图像尺寸小overflow
说明视口尺寸小于图像尺寸时要做什么
(披露:我是一名 FOP 开发人员,虽然最近不太活跃)