0

バーコード4Jのpdf417beanクラスを使用して、バイナリデータをpdf417バーコードに変換しようとしています。しかし、それは私に次のエラーを与えています

java.lang.IllegalArgumentException: エンコードできない文字が検出されました: Í (Unicode: 205)
    org.krysalis.barcode4j.impl.pdf417.PDF417HighLevelEncoder.determineConsecutiveBinaryCount(PDF417HighLevelEncoder.java:468)
    org.krysalis.barcode4j.impl.pdf417.PDF417HighLevelEncoder.encodeHighLevel(PDF417HighLevelEncoder.java:108)
    org.krysalis.barcode4j.impl.pdf417.PDF417LogicImpl.generateBarcodeLogic(PDF417LogicImpl.java:193)
    org.krysalis.barcode4j.impl.pdf417.PDF417Bean.generateBarcode(PDF417Bean.java:79)
    com.pb.iop.labelgen.impl.BarcodeService.generateBarcodecodePDF417(BarcodeService.java:244)
    sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    com.sun.jersey.server.impl.model.method.dispatch.Abs​​tractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:165)
    com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
    com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:276)
    com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133)
    com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:83)
    com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133)
    com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:71)
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1171)
    com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1103)
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1053)
    com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1043)
    com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:406)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:477)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:662)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

これが私が使用しているコードベースの一部です

        PDF417Bean bean = new PDF417Bean();

        bean.doQuietZone(true);
        bean.setModuleWidth(UnitConv.in2mm(moduleWidthInches));
        bean.setQuietZone(UnitConv.in2mm(quietZoneInches));
        bean.setBarHeight(height);

        boolean antiAlias = false;
        int orientation = 0;

        BitmapCanvasProvider canvas = new BitmapCanvasProvider(
                dpi, BufferedImage.TYPE_BYTE_BINARY, antiAlias, orientation);

        indiciaData = indiciaData.replaceAll("\\s+", "");
        byte[] binaryData = Base64.decodeBase64(indiciaData.getBytes());
        String base64DecodedMsg = StringUtils.newStringIso8859_1(binaryData);

        bean.generateBarcode(canvas, base64DecodedMsg);
        canvas.finish();


        String mime = MimeTypes.MIME_BMP;
        out = new ByteArrayOutputStream();

        final BitmapEncoder encoder = BitmapEncoderRegistry.getInstance(mime);
        encoder.encode(canvas.getBufferedImage(), out, mime, dpi);

base 64 からの変換に apache commons を使用しています

4

3 に答える 3

0

Jeremias は、簡単に使用するためだけに、解決策を指摘しました。

new String("your string goes here written in UTF-8".getBytes("UTF-8"), "Cp437")

例えば:

new String("ČĆŽŠĐ čćžšđ or Í".getBytes("UTF-8"), "Cp437")

オンラインでバーコードのデコードを確認できます: http://online-barcode-reader.inliteresearch.com/default.aspx

クロアチア語の分音符号文字に対しては問題なく動作し、UTF-8 の任意の文字に対しても動作するようです。スルダチノ。

于 2013-12-30T07:49:20.067 に答える
0

Barcode4J PDF417HighLevelEncoder クラスを変更してみて、エンコーディングを Cp437 の代わりに ISO-8859-1 に変更しました。いくつかのバーコードを生成しましたが、正しくスキャンされています。ISO 8859-1をサポートするように変更できるようです。

于 2012-03-23T11:39:20.947 に答える
0

ISO-8859-1 の代わりに new String(binaryData, "Cp437") を使用する必要があります。PDF417のページには、そのエンコーディングを使用するように書かれています。現在、他のエンコーディングは使用できません。残念ながら、「Í」は Cp437 にはないため使用できません。CVS HEAD から Barcode4J をダウンロードして自分でコンパイルすると、RFC 2397 データ URL を使用してバイナリ データを使用できます:開発版の PDF417 説明

于 2012-03-16T17:33:04.000 に答える