如何在 Java 小程序中使用带有扩展名的 apache fop (f.e.barcode4j)

Posted

技术标签:

【中文标题】如何在 Java 小程序中使用带有扩展名的 apache fop (f.e.barcode4j)【英文标题】:How to use apache fop with extensions (f.e. barcode4j) in java applet 【发布时间】:2013-05-27 14:05:25 【问题描述】:

我想要在 xsl fop 翻译过程中生成一个条形码 (Code128)。正如 apache fop 文档(和barcode4j 文档)中所说,如果要使用扩展,请将其放在类路径中。这适用于桌面应用程序和从 Eclipse 运行的小程序。但是如何从浏览器运行它呢?

作为概念证明,我将所有内容提取到所谓的“fat-jar”中 - 一个 jar,所有内容都从 eclipse 重新打包为“导出到可运行 jar”,并带有“将所需的库提取到生成的 JAR 中”。除了条形码生成之外,一切都按预期工作(翻译和许多其他事情)。这是我唯一的 apache fop 扩展,所以我想问题出在提到的类路径上,因为小程序没有这样的东西?

这是我的 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" 
      
      >
 </applet-desc>
 <update check="background"/>
</jnlp>

我将在 java 控制台上添加,我有标准的乱码 ("19:43:04,429 WARN FOUserAgent:97 - Unknown formatting object "http://barcode4j.krysalis.org/nsheight" 遇到(code128 的孩子。(否上下文信息可用)”),因为我没有包含正确的完整barcode4j扩展,但我检查了所有内容都正确打包在我的jar文件中,并且在eclipse中一切正常。

这是来自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 和apache-fop 1.1。我做错了什么?

【问题讨论】:

【参考方案1】:

如果您不小心,创建“fat-jar”可能会丢失重复文件。 FOP 扩展由JAR Service Provider Mechanism(META-INF/服务方法)发现。这意味着您必须合并而不是覆盖 META-INF/services 中的文件。

【讨论】:

谢谢!这大概就是原因。我使用了barcode4j扩展的单独jar,现在一切正常。我总是检查 eclipse 最后列出的覆盖文件列表,但似乎 eclipse 忘记了 META-INF/services ..

以上是关于如何在 Java 小程序中使用带有扩展名的 apache fop (f.e.barcode4j)的主要内容,如果未能解决你的问题,请参考以下文章

如何将动态外部组件加载到 Angular 应用程序中

我可以将带有 iOS 8 扩展的应用程序部署到运行 iOS 7 的设备上吗?

Java小程序加载失败时如何显示消息?

如何使用内联 带有webpack的React应用程序中的标签

Java AWT - 如何在 Arraylist 中保存图像

如何在java中保存扩展名为.xls的excel文件?