2015-08-31 6 views
1

У меня возникла проблема с созданием динамического сообщения с использованием Barcode4J ean-13 в документе apache FOP xsl. Я получил штрих-код для генерации с использованием жесткого кодированного сообщения. Тем не менее, я хотел бы передать номер штрих-кода в документ xsl в качестве параметра. Как мне это сделать?Динамическое сообщение с использованием Barcode4J в документе Apache FOP XSL

Кроме того, я ссылаюсь на barcode4J site на страницу справки без везения. Я пробовал использовать описанную технику here, но не повезло.

Это как мой XSL документ выглядит

<fo:block-container left="1000" top="1000" 
      z-index="1" position="relative"> 
      <fo:block> 
       <fo:instream-foreign-object> 
        <bc:barcode xmlns:bc="http://barcode4j.krysalis.org/ns" 
         message="123456789789"> 
         <bc:ean-13 /> 
        </bc:barcode> 
       </fo:instream-foreign-object> 
      </fo:block> 
     </fo:block-container> 

ответ

1

Вы не можете сказать, какая версия XSLT вы используете.

Если вы хотите передать параметр к вашей XSLT, вам необходимо объявить параметр как дочерний элемент вашего xsl:stylesheet и т.д .:

<xsl:param name="barcode" /> 

для XSLT 1.0 см http://www.w3.org/TR/xslt#top-level-variables. Вы можете объявить об этом больше, если используете XSLT 2.0.

Как передать значение параметра будет зависеть от того, какой процессор XSLT вы используете, но вы можете ожидать, что это будет описано в документации процессора XSLT.

Вы можете использовать параметр $barcode в «шаблона значения атрибута» в вашей иначе-буквальной разметке:

<fo:block-container left="1000" top="1000" 
     z-index="1" position="relative"> 
     <fo:block> 
      <fo:instream-foreign-object> 
       <bc:barcode xmlns:bc="http://barcode4j.krysalis.org/ns" 
        message="{$barcode}"> 
        <bc:ean-13 /> 
       </bc:barcode> 
      </fo:instream-foreign-object> 
     </fo:block> 
    </fo:block-container> 

Для шаблонов значений атрибутов в XSLT 1.0 см http://www.w3.org/TR/xslt#dt-attribute-value-template

+0

Спасибо за помощь. Поэтому я добавил параметр в лист XSLT. Однако, когда я даю параметру статическое значение «», он работает. Но если удалить статическое значение и установить параметр в java в XSLT Transformer, значение не будет отображаться при создании документа XSLT. Вместо этого он говорит: «java.lang.NullPointerException: параметр msg не должен быть пустым», который ссылается на сообщение на barcode4j, которое не может быть пустым. –

+0

Это 'msg' или 'message'? Чтобы проверить параметры стилей, можете ли вы временно вернуться к жесткому кодированию значения '@ message' и использовать значение параметра в другом месте? Например, вы можете поместить '' в какой-либо другой шаблон, где вы можете проверить вывод, который параметр задан правильно. –

+0

Спасибо за отзыв. Он говорит «msg», потому что он ссылается на неявную реализацию в Barcode4j lib, когда сообщение не установлено. Если вы делаете ' '- тогда он даст ту же ошибку NullPointerException. –

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