Package com.google.zxing.pdf417.encoder
Class PDF417HighLevelEncoder
java.lang.Object
com.google.zxing.pdf417.encoder.PDF417HighLevelEncoder
PDF417 high-level encoder following the algorithm described in ISO/IEC 15438:2001(E) in
annex P.
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final int
code for Byte compactionprivate static final Charset
private static final int
identifier for an ECI of a character set of code pageprivate static final int
identifier for a general purpose ECO formatprivate static final int
identifier for a user defined Extended Channel Interpretation (ECI)private static final int
mode latch to Byte Compaction mode (number of characters a multiple of 6)private static final int
mode latch to Byte Compaction mode (number of characters NOT a multiple of 6)private static final int
mode latch to Numeric Compaction modeprivate static final int
mode latch to Text Compaction modeprivate static final byte[]
private static final int
code for Numeric compactionprivate static final byte[]
private static final int
mode shift to Byte Compaction modeprivate static final int
Text compaction submode Alphaprivate static final int
Text compaction submode Lowerprivate static final int
Text compaction submode Mixedprivate static final int
Text compaction submode Punctuationprivate static final int
code for Text compactionprivate static final byte[]
Raw code table for text compaction Mixed sub-modeprivate static final byte[]
Raw code table for text compaction: Punctuation sub-mode -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static int
determineConsecutiveBinaryCount
(ECIInput input, int startpos, 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, 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 String
encodeHighLevel
(String msg, Compaction compaction, 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, 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, StringBuilder sb) private static int
encodeText
(ECIInput input, int startpos, int count, 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, 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[]
-
Field Details
-
TEXT_COMPACTION
private static final int TEXT_COMPACTIONcode for Text compaction- See Also:
-
BYTE_COMPACTION
private static final int BYTE_COMPACTIONcode for Byte compaction- See Also:
-
NUMERIC_COMPACTION
private static final int NUMERIC_COMPACTIONcode for Numeric compaction- See Also:
-
SUBMODE_ALPHA
private static final int SUBMODE_ALPHAText compaction submode Alpha- See Also:
-
SUBMODE_LOWER
private static final int SUBMODE_LOWERText compaction submode Lower- See Also:
-
SUBMODE_MIXED
private static final int SUBMODE_MIXEDText compaction submode Mixed- See Also:
-
SUBMODE_PUNCTUATION
private static final int SUBMODE_PUNCTUATIONText compaction submode Punctuation- See Also:
-
LATCH_TO_TEXT
private static final int LATCH_TO_TEXTmode latch to Text Compaction mode- See Also:
-
LATCH_TO_BYTE_PADDED
private static final int LATCH_TO_BYTE_PADDEDmode latch to Byte Compaction mode (number of characters NOT a multiple of 6)- See Also:
-
LATCH_TO_NUMERIC
private static final int LATCH_TO_NUMERICmode latch to Numeric Compaction mode- See Also:
-
SHIFT_TO_BYTE
private static final int SHIFT_TO_BYTEmode shift to Byte Compaction mode- See Also:
-
LATCH_TO_BYTE
private static final int LATCH_TO_BYTEmode latch to Byte Compaction mode (number of characters a multiple of 6)- See Also:
-
ECI_USER_DEFINED
private static final int ECI_USER_DEFINEDidentifier for a user defined Extended Channel Interpretation (ECI)- See Also:
-
ECI_GENERAL_PURPOSE
private static final int ECI_GENERAL_PURPOSEidentifier for a general purpose ECO format- See Also:
-
ECI_CHARSET
private static final int ECI_CHARSETidentifier for an ECI of a character set of code page- See Also:
-
TEXT_MIXED_RAW
private static final byte[] TEXT_MIXED_RAWRaw code table for text compaction Mixed sub-mode -
TEXT_PUNCTUATION_RAW
private static final byte[] TEXT_PUNCTUATION_RAWRaw code table for text compaction: Punctuation sub-mode -
MIXED
private static final byte[] MIXED -
PUNCTUATION
private static final byte[] PUNCTUATION -
DEFAULT_ENCODING
-
-
Constructor Details
-
PDF417HighLevelEncoder
private PDF417HighLevelEncoder()
-
-
Method Details
-
encodeHighLevel
static String encodeHighLevel(String msg, Compaction compaction, 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 messagecompaction
- compaction mode to useencoding
- character encoding used to encode in default or byte compaction ornull
for default / not applicableautoECI
- encode input minimally using multiple ECIs if needed If autoECI encoding is specified and additionallyencoding
is specified, then the encoder will use the specifiedCharset
for any character that can be encoded by it, regardless if a different encoding would lead to a more compact encoding. When noencoding
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, 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 inputstartpos
- the start position within the messagecount
- the number of characters to encodesb
- receives the encoded codewordsinitialSubmode
- 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, StringBuilder sb) throws WriterException Encode all of the message using Byte Compaction as described in ISO/IEC 15438:2001(E)- Parameters:
input
- the inputstartpos
- the start position within the messagecount
- the number of bytes to encodestartmode
- the mode from which this method startssb
- receives the encoded codewords- Throws:
WriterException
-
subBytes
-
encodeBinary
private static void encodeBinary(byte[] bytes, int startpos, int count, int startmode, 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 arraystartpos
- the start position within the messagecount
- the number of bytes to encodestartmode
- the mode from which this method startssb
- receives the encoded codewords
-
encodeNumeric
-
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
Determines the number of consecutive characters that are encodable using numeric compaction.- Parameters:
input
- the inputstartpos
- the start position within the input- Returns:
- the requested character count
-
determineConsecutiveTextCount
Determines the number of consecutive characters that are encodable using text compaction.- Parameters:
input
- the inputstartpos
- the start position within the input- Returns:
- the requested character count
-
determineConsecutiveBinaryCount
private static int determineConsecutiveBinaryCount(ECIInput input, int startpos, Charset encoding) throws WriterException Determines the number of consecutive characters that are encodable using binary compaction.- Parameters:
input
- the inputstartpos
- the start position within the messageencoding
- the charset used to convert the message to a byte array- Returns:
- the requested character count
- Throws:
WriterException
-
encodingECI
- Throws:
WriterException
-