void addRange(PdfString from, PdfString to, PdfObject code) {
   byte[] a1 = decodeStringToByte(from);
   byte[] a2 = decodeStringToByte(to);
   if (a1.length != a2.length || a1.length == 0)
     throw new IllegalArgumentException("Invalid map.");
   byte[] sout = null;
   if (code instanceof PdfString) sout = decodeStringToByte((PdfString) code);
   int start = byteArrayToInt(a1);
   int end = byteArrayToInt(a2);
   for (int k = start; k <= end; ++k) {
     intToByteArray(k, a1);
     PdfString s = new PdfString(a1);
     s.setHexWriting(true);
     if (code instanceof PdfArray) {
       addChar(s, ((PdfArray) code).getPdfObject(k - start));
     } else if (code instanceof PdfNumber) {
       int nn = ((PdfNumber) code).intValue() + k - start;
       addChar(s, new PdfNumber(nn));
     } else if (code instanceof PdfString) {
       PdfString s1 = new PdfString(sout);
       s1.setHexWriting(true);
       ++sout[sout.length - 1];
       addChar(s, s1);
     }
   }
 }
 public String decodeStringToUnicode(PdfString ps) {
   if (ps.isHexWriting()) return PdfEncodings.convertToString(ps.getBytes(), "UnicodeBigUnmarked");
   else return ps.toUnicodeString();
 }
 public static byte[] decodeStringToByte(PdfString s) {
   byte[] b = s.getBytes();
   byte[] br = new byte[b.length];
   System.arraycopy(b, 0, br, 0, b.length);
   return br;
 }