Class PDF417HighLevelEncoder


  • final class PDF417HighLevelEncoder
    extends java.lang.Object
    PDF417 high-level encoder following the algorithm described in ISO/IEC 15438:2001(E) in annex P.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static int BYTE_COMPACTION
      code for Byte compaction
      private static java.nio.charset.Charset DEFAULT_ENCODING  
      private static int ECI_CHARSET
      identifier for an ECI of a character set of code page
      private static int ECI_GENERAL_PURPOSE
      identifier for a general purpose ECO format
      private static int ECI_USER_DEFINED
      identifier for a user defined Extended Channel Interpretation (ECI)
      private static int LATCH_TO_BYTE
      mode latch to Byte Compaction mode (number of characters a multiple of 6)
      private static int LATCH_TO_BYTE_PADDED
      mode latch to Byte Compaction mode (number of characters NOT a multiple of 6)
      private static int LATCH_TO_NUMERIC
      mode latch to Numeric Compaction mode
      private static int LATCH_TO_TEXT
      mode latch to Text Compaction mode
      private static byte[] MIXED  
      private static int NUMERIC_COMPACTION
      code for Numeric compaction
      private static byte[] PUNCTUATION  
      private static int SHIFT_TO_BYTE
      mode shift to Byte Compaction mode
      private static int SUBMODE_ALPHA
      Text compaction submode Alpha
      private static int SUBMODE_LOWER
      Text compaction submode Lower
      private static int SUBMODE_MIXED
      Text compaction submode Mixed
      private static int SUBMODE_PUNCTUATION
      Text compaction submode Punctuation
      private static int TEXT_COMPACTION
      code for Text compaction
      private static byte[] TEXT_MIXED_RAW
      Raw code table for text compaction Mixed sub-mode
      private static byte[] TEXT_PUNCTUATION_RAW
      Raw code table for text compaction: Punctuation sub-mode
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      private static int determineConsecutiveBinaryCount​(ECIInput input, int startpos, java.nio.charset.Charset encoding)
      Determines the number of consecutive characters that are encodable using binary compaction.
      private static int determineConsecutiveDigitCount​(ECIInput input, int startpos)
      Determines the number of consecutive characters that are encodable using numeric compaction.
      private static int determineConsecutiveTextCount​(ECIInput input, int startpos)
      Determines the number of consecutive characters that are encodable using text compaction.
      private static void encodeBinary​(byte[] bytes, int startpos, int count, int startmode, java.lang.StringBuilder sb)
      Encode parts of the message using Byte Compaction as described in ISO/IEC 15438:2001(E), chapter 4.4.3.
      (package private) static java.lang.String encodeHighLevel​(java.lang.String msg, Compaction compaction, java.nio.charset.Charset encoding, boolean autoECI)
      Performs high-level encoding of a PDF417 message using the algorithm described in annex P of ISO/IEC 15438:2001(E).
      private static void encodeMultiECIBinary​(ECIInput input, int startpos, int count, int startmode, java.lang.StringBuilder sb)
      Encode all of the message using Byte Compaction as described in ISO/IEC 15438:2001(E)
      private static void encodeNumeric​(ECIInput input, int startpos, int count, java.lang.StringBuilder sb)  
      private static int encodeText​(ECIInput input, int startpos, int count, java.lang.StringBuilder sb, int initialSubmode)
      Encode parts of the message using Text Compaction as described in ISO/IEC 15438:2001(E), chapter 4.4.2.
      private static void encodingECI​(int eci, java.lang.StringBuilder sb)  
      private static boolean isAlphaLower​(char ch)  
      private static boolean isAlphaUpper​(char ch)  
      private static boolean isDigit​(char ch)  
      private static boolean isMixed​(char ch)  
      private static boolean isPunctuation​(char ch)  
      private static boolean isText​(char ch)  
      (package private) static byte[] subBytes​(ECIInput input, int start, int end)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • TEXT_COMPACTION

        private static final int TEXT_COMPACTION
        code for Text compaction
        See Also:
        Constant Field Values
      • BYTE_COMPACTION

        private static final int BYTE_COMPACTION
        code for Byte compaction
        See Also:
        Constant Field Values
      • NUMERIC_COMPACTION

        private static final int NUMERIC_COMPACTION
        code for Numeric compaction
        See Also:
        Constant Field Values
      • SUBMODE_ALPHA

        private static final int SUBMODE_ALPHA
        Text compaction submode Alpha
        See Also:
        Constant Field Values
      • SUBMODE_LOWER

        private static final int SUBMODE_LOWER
        Text compaction submode Lower
        See Also:
        Constant Field Values
      • SUBMODE_MIXED

        private static final int SUBMODE_MIXED
        Text compaction submode Mixed
        See Also:
        Constant Field Values
      • SUBMODE_PUNCTUATION

        private static final int SUBMODE_PUNCTUATION
        Text compaction submode Punctuation
        See Also:
        Constant Field Values
      • LATCH_TO_TEXT

        private static final int LATCH_TO_TEXT
        mode latch to Text Compaction mode
        See Also:
        Constant Field Values
      • LATCH_TO_BYTE_PADDED

        private static final int LATCH_TO_BYTE_PADDED
        mode latch to Byte Compaction mode (number of characters NOT a multiple of 6)
        See Also:
        Constant Field Values
      • LATCH_TO_NUMERIC

        private static final int LATCH_TO_NUMERIC
        mode latch to Numeric Compaction mode
        See Also:
        Constant Field Values
      • SHIFT_TO_BYTE

        private static final int SHIFT_TO_BYTE
        mode shift to Byte Compaction mode
        See Also:
        Constant Field Values
      • LATCH_TO_BYTE

        private static final int LATCH_TO_BYTE
        mode latch to Byte Compaction mode (number of characters a multiple of 6)
        See Also:
        Constant Field Values
      • ECI_USER_DEFINED

        private static final int ECI_USER_DEFINED
        identifier for a user defined Extended Channel Interpretation (ECI)
        See Also:
        Constant Field Values
      • ECI_GENERAL_PURPOSE

        private static final int ECI_GENERAL_PURPOSE
        identifier for a general purpose ECO format
        See Also:
        Constant Field Values
      • ECI_CHARSET

        private static final int ECI_CHARSET
        identifier for an ECI of a character set of code page
        See Also:
        Constant Field Values
      • TEXT_MIXED_RAW

        private static final byte[] TEXT_MIXED_RAW
        Raw code table for text compaction Mixed sub-mode
      • TEXT_PUNCTUATION_RAW

        private static final byte[] TEXT_PUNCTUATION_RAW
        Raw code table for text compaction: Punctuation sub-mode
      • MIXED

        private static final byte[] MIXED
      • PUNCTUATION

        private static final byte[] PUNCTUATION
      • DEFAULT_ENCODING

        private static final java.nio.charset.Charset DEFAULT_ENCODING
    • Constructor Detail

      • PDF417HighLevelEncoder

        private PDF417HighLevelEncoder()
    • Method Detail

      • encodeHighLevel

        static java.lang.String encodeHighLevel​(java.lang.String msg,
                                                Compaction compaction,
                                                java.nio.charset.Charset encoding,
                                                boolean autoECI)
                                         throws WriterException
        Performs high-level encoding of a PDF417 message using the algorithm described in annex P of ISO/IEC 15438:2001(E). If byte compaction has been selected, then only byte compaction is used.
        Parameters:
        msg - the message
        compaction - compaction mode to use
        encoding - character encoding used to encode in default or byte compaction or null for default / not applicable
        autoECI - encode input minimally using multiple ECIs if needed If autoECI encoding is specified and additionally encoding is specified, then the encoder will use the specified Charset for any character that can be encoded by it, regardless if a different encoding would lead to a more compact encoding. When no encoding is specified then charsets will be chosen so that the byte representation is minimal.
        Returns:
        the encoded message (the char values range from 0 to 928)
        Throws:
        WriterException
      • encodeText

        private static int encodeText​(ECIInput input,
                                      int startpos,
                                      int count,
                                      java.lang.StringBuilder sb,
                                      int initialSubmode)
                               throws WriterException
        Encode parts of the message using Text Compaction as described in ISO/IEC 15438:2001(E), chapter 4.4.2.
        Parameters:
        input - the input
        startpos - the start position within the message
        count - the number of characters to encode
        sb - receives the encoded codewords
        initialSubmode - should normally be SUBMODE_ALPHA
        Returns:
        the text submode in which this method ends
        Throws:
        WriterException
      • encodeMultiECIBinary

        private static void encodeMultiECIBinary​(ECIInput input,
                                                 int startpos,
                                                 int count,
                                                 int startmode,
                                                 java.lang.StringBuilder sb)
                                          throws WriterException
        Encode all of the message using Byte Compaction as described in ISO/IEC 15438:2001(E)
        Parameters:
        input - the input
        startpos - the start position within the message
        count - the number of bytes to encode
        startmode - the mode from which this method starts
        sb - receives the encoded codewords
        Throws:
        WriterException
      • subBytes

        static byte[] subBytes​(ECIInput input,
                               int start,
                               int end)
      • encodeBinary

        private static void encodeBinary​(byte[] bytes,
                                         int startpos,
                                         int count,
                                         int startmode,
                                         java.lang.StringBuilder sb)
        Encode parts of the message using Byte Compaction as described in ISO/IEC 15438:2001(E), chapter 4.4.3. The Unicode characters will be converted to binary using the cp437 codepage.
        Parameters:
        bytes - the message converted to a byte array
        startpos - the start position within the message
        count - the number of bytes to encode
        startmode - the mode from which this method starts
        sb - receives the encoded codewords
      • encodeNumeric

        private static void encodeNumeric​(ECIInput input,
                                          int startpos,
                                          int count,
                                          java.lang.StringBuilder sb)
      • isDigit

        private static boolean isDigit​(char ch)
      • isAlphaUpper

        private static boolean isAlphaUpper​(char ch)
      • isAlphaLower

        private static boolean isAlphaLower​(char ch)
      • isMixed

        private static boolean isMixed​(char ch)
      • isPunctuation

        private static boolean isPunctuation​(char ch)
      • isText

        private static boolean isText​(char ch)
      • determineConsecutiveDigitCount

        private static int determineConsecutiveDigitCount​(ECIInput input,
                                                          int startpos)
        Determines the number of consecutive characters that are encodable using numeric compaction.
        Parameters:
        input - the input
        startpos - the start position within the input
        Returns:
        the requested character count
      • determineConsecutiveTextCount

        private static int determineConsecutiveTextCount​(ECIInput input,
                                                         int startpos)
        Determines the number of consecutive characters that are encodable using text compaction.
        Parameters:
        input - the input
        startpos - the start position within the input
        Returns:
        the requested character count
      • determineConsecutiveBinaryCount

        private static int determineConsecutiveBinaryCount​(ECIInput input,
                                                           int startpos,
                                                           java.nio.charset.Charset encoding)
                                                    throws WriterException
        Determines the number of consecutive characters that are encodable using binary compaction.
        Parameters:
        input - the input
        startpos - the start position within the message
        encoding - the charset used to convert the message to a byte array
        Returns:
        the requested character count
        Throws:
        WriterException