2015-10-01 4 views
1

Я пытаюсь масштабировать изображение до точных спецификаций, 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:

screenshot

И это моя полная страница 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> 

ответ

2

Вы должны быть в состоянии добиться того, что вам нужно, используя 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, хотя и не очень активен в последнее время)

+0

Так что' mm' поддерживается, я просто использовал его неправильно, спасибо @Ifurini! –

+0

Я обновил свой вопрос, кажется, что размер страницы неверен, любая идея, почему мой размер страницы настолько несоразмерен? –

+1

@JanVladimirMostert, это действительно странно; используя ваш файл FO в качестве ввода, я получаю, как и ожидалось, обычную страницу формата А4 (как с помощью fop.xconf, так и без конфигурации). – lfurini

Смежные вопросы