2013-05-31 3 views
0

Я хочу иметь штрих-код (Code128), сгенерированный во время преобразования xsl fop. Как сказано в документации apache fop (и barcode4j docs), если вы хотите использовать расширение, поместите его в путь к классам. Это отлично подходит для настольного приложения и апплета, запускаемого из затмения. Но как запустить его из браузера?Как использовать apache fop с расширениями (f.e. barcode4j) в java-апплете

В качестве доказательства концепции я извлек все из так называемой «жирной баночки» - одну банку, все переупаковано из затмения как «Экспорт в runnable jar» с «Извлечение необходимых библиотек в сгенерированный JAR». Все работает как ожидалось (перевод и многое другое), за исключением генерации штрих-кода. Это мое единственное расширение apache fop, поэтому я предполагаю, что проблема связана с упомянутым classpath, поскольку для апплета нет такой вещи?

Вот моя основная часть HTML:

<html lang="en-US"> 
    <body> 
    <script src="http://www.java.com/js/deployJava.js"></script> 
    <script> var attributes = { codebase:'.', code:'com.signapplet.SignApplet.class', archive:'SignApplet.jar', width:1024, height:968}; 
      var parameters = {jnlp_href: 'SignApplet.jnlp'} ; 
      deployJava.runApplet(attributes, parameters, '1.6'); 
    </script> 
    </body> 
</html> 

и JNLP:

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp spec="1.0+" codebase="" href=""> 
<information> 
    <title>Sign Applet</title> 
    <vendor>me</vendor> 
</information> 
<security><all-permissions/></security> 
<resources> 
    <j2se version="1.6+" 
      href="http://java.sun.com/products/autodl/j2se"/> 
    <jar href="SignApplet.jar" main="true" /> 
</resources> 
<applet-desc 
    name="Sign Applet" 
    main-class="com.signapplet.SignApplet" 
    width="300" 
    height="300" > 
</applet-desc> 
<update check="background"/> 
</jnlp> 

Я добавлю, что на Java консоли У меня есть стандартный тарабарщину ("19: 43: 04429 WARN FOUserAgent: 97 - Неизвестный объект форматирования "{http://barcode4j.krysalis.org/ns} height" встречается (ребенок с кодом128}. (Нет контекстной информации) "), поскольку я не включил надлежащее полное расширение barcode4j, но я проверил и все правильно упаковано в моем jar file plus все работает правильно в затмении.

Это копировать/вставить пример кода из barcode4j страницы:

<fo:block> 
    <fo:instream-foreign-object> 
    <barcode:barcode 
      xmlns:barcode="http://barcode4j.krysalis.org/ns" 
      message="my message" orientation="90"> 
     <barcode:code128> 
     <barcode:height>8mm</barcode:height> 
     </barcode:code128> 
    </barcode:barcode> 
    </fo:instream-foreign-object> 
</fo:block> 

Я использую последнюю barcode4j-FOP-Ext-complete.jar и апаша-FOP 1.1. Что я делаю не так?

ответ

0

Создание «жирной банки» несет риск потери дубликатов файлов, если вы не будете осторожны. Расширения FOP открываются методом JAR Service Provider Mechanism (подход META-INF/services). Это означает, что вам необходимо объединить файлы вместо метаданных в META-INF/services.

+0

Спасибо! Вероятно, это была причина. Я использовал отдельную банку расширения barcode4j, и теперь все работает правильно. Я всегда проверяю список переопределенных файлов, перечисленных в eclipse в конце, но кажется, что eclipse забыл о META-INF/services .. –

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