Я пытаюсь масштабировать изображение до точных спецификаций, 87mm x 10mm
, но я не получаю его до нужного размера.Apache FOP, масштабное изображение вниз до точного размера в миллиметрах
Я использую 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>
Вот фрагмент кода, который должен отображать изображение, он отображает изображение, но никогда не спускаясь до размера I» .
<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
с помощью эта формула px = mm * dpi/25.4
и до сих пор не повезло.
Использование em
вместо mm
и content-width
вместо width
, изображение сжимается, но я понятия не имею, как конвертировать из mm
в em
единиц.
Для меня важно, чтобы изображение было увеличено до 87mm
width и 10mm
height, что это правильный способ сделать это?
Update: Кажется, что изображение отображается правильно, размер страницы неверен, вот скриншот взят в 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>
Так что' mm' поддерживается, я просто использовал его неправильно, спасибо @Ifurini! –
Я обновил свой вопрос, кажется, что размер страницы неверен, любая идея, почему мой размер страницы настолько несоразмерен? –
@JanVladimirMostert, это действительно странно; используя ваш файл FO в качестве ввода, я получаю, как и ожидалось, обычную страницу формата А4 (как с помощью fop.xconf, так и без конфигурации). – lfurini