Class Encoder

java.lang.Object
com.itextpdf.barcodes.qrcode.Encoder

final class Encoder extends Object
  • Field Details

    • ALPHANUMERIC_TABLE

      private static final int[] ALPHANUMERIC_TABLE
    • DEFAULT_BYTE_MODE_ENCODING

      static final String DEFAULT_BYTE_MODE_ENCODING
      See Also:
  • Constructor Details

    • Encoder

      private Encoder()
  • Method Details

    • calculateMaskPenalty

      private static int calculateMaskPenalty(ByteMatrix matrix)
    • encode

      public static void encode(String content, ErrorCorrectionLevel ecLevel, QRCode qrCode) throws WriterException
      Encode "bytes" with the error correction level "ecLevel". The encoding mode will be chosen internally by chooseMode(). On success, store the result in "qrCode".

      We recommend you to use QRCode.EC_LEVEL_L (the lowest level) for "getECLevel" since our primary use is to show QR code on desktop screens. We don't need very strong error correction for this purpose.

      Note that there is no way to encode bytes in MODE_KANJI. We might want to add EncodeWithMode() with which clients can specify the encoding mode. For now, we don't need the functionality.

      Parameters:
      content - String to encode
      ecLevel - Error-correction level to use
      qrCode - QR code to store the result in
      Throws:
      WriterException
    • encode

      public static void encode(String content, ErrorCorrectionLevel ecLevel, Map<EncodeHintType,Object> hints, QRCode qrCode) throws WriterException
      Encode "bytes" with the error correction level "ecLevel". The encoding mode will be chosen internally by chooseMode(). On success, store the result in "qrCode".

      We recommend you to use QRCode.EC_LEVEL_L (the lowest level) for "getECLevel" since our primary use is to show QR code on desktop screens. We don't need very strong error correction for this purpose.

      Note that there is no way to encode bytes in MODE_KANJI. We might want to add EncodeWithMode() with which clients can specify the encoding mode. For now, we don't need the functionality.

      Parameters:
      content - String to encode
      ecLevel - Error-correction level to use
      hints - Optional Map containing encoding and suggested minimum version to use
      qrCode - QR code to store the result in
      Throws:
      WriterException
    • getAlphanumericCode

      static int getAlphanumericCode(int code)
      Returns:
      the code point of the table used in alphanumeric mode or -1 if there is no corresponding code in the table.
    • chooseMode

      public static Mode chooseMode(String content)
      Choose the best mode by examining the content.
      Parameters:
      content - content to examine
      Returns:
      mode to use
    • chooseMode

      public static Mode chooseMode(String content, String encoding)
      Choose the best mode by examining the content. Note that 'encoding' is used as a hint; if it is Shift_JIS, and the input is only double-byte Kanji, then we return Mode.KANJI
      Parameters:
      content - content to examine
      encoding - hint for the encoding to use
      Returns:
      mode to use
    • isOnlyDoubleByteKanji

      private static boolean isOnlyDoubleByteKanji(String content)
    • chooseMaskPattern

      private static int chooseMaskPattern(BitVector bits, ErrorCorrectionLevel ecLevel, int version, ByteMatrix matrix) throws WriterException
      Throws:
      WriterException
    • initQRCode

      private static void initQRCode(int numInputBytes, ErrorCorrectionLevel ecLevel, int desiredMinVersion, Mode mode, QRCode qrCode) throws WriterException
      Initialize "qrCode" according to "numInputBytes", "ecLevel", and "mode". On success, modify "qrCode".
      Throws:
      WriterException
    • terminateBits

      static void terminateBits(int numDataBytes, BitVector bits) throws WriterException
      Terminate bits as described in 8.4.8 and 8.4.9 of JISX0510:2004 (p.24).
      Throws:
      WriterException
    • getNumDataBytesAndNumECBytesForBlockID

      static void getNumDataBytesAndNumECBytesForBlockID(int numTotalBytes, int numDataBytes, int numRSBlocks, int blockID, int[] numDataBytesInBlock, int[] numECBytesInBlock) throws WriterException
      Get number of data bytes and number of error correction bytes for block id "blockID". Store the result in "numDataBytesInBlock", and "numECBytesInBlock". See table 12 in 8.5.1 of JISX0510:2004 (p.30)
      Throws:
      WriterException
    • interleaveWithECBytes

      static void interleaveWithECBytes(BitVector bits, int numTotalBytes, int numDataBytes, int numRSBlocks, BitVector result) throws WriterException
      Interleave "bits" with corresponding error correction bytes. On success, store the result in "result". The interleave rule is complicated. See 8.6 of JISX0510:2004 (p.37) for details.
      Throws:
      WriterException
    • generateECBytes

      static ByteArray generateECBytes(ByteArray dataBytes, int numEcBytesInBlock)
    • appendModeInfo

      static void appendModeInfo(Mode mode, BitVector bits)
      Append mode info. On success, store the result in "bits".
    • appendLengthInfo

      static void appendLengthInfo(int numLetters, int version, Mode mode, BitVector bits) throws WriterException
      Append length info. On success, store the result in "bits".
      Throws:
      WriterException
    • appendBytes

      static void appendBytes(String content, Mode mode, BitVector bits, String encoding) throws WriterException
      Append "bytes" in "mode" mode (encoding) into "bits". On success, store the result in "bits".
      Throws:
      WriterException
    • appendNumericBytes

      static void appendNumericBytes(String content, BitVector bits)
    • appendAlphanumericBytes

      static void appendAlphanumericBytes(String content, BitVector bits) throws WriterException
      Throws:
      WriterException
    • append8BitBytes

      static void append8BitBytes(String content, BitVector bits, String encoding) throws WriterException
      Throws:
      WriterException
    • appendKanjiBytes

      static void appendKanjiBytes(String content, BitVector bits) throws WriterException
      Throws:
      WriterException
    • appendECI

      private static void appendECI(CharacterSetECI eci, BitVector bits)