Ejemplo n.º 1
0
 private void putkerntab() throws IOException {
   if (kernpairs == 0) return;
   in.seek(kernpairs);
   int count = in.readUnsignedShortLE();
   int nzero = 0;
   int kerns[] = new int[count * 3];
   for (int k = 0; k < kerns.length; ) {
     kerns[k++] = in.read();
     kerns[k++] = in.read();
     if ((kerns[k++] = in.readShortLE()) != 0) ++nzero;
   }
   if (nzero == 0) return;
   out.print("StartKernData\nStartKernPairs");
   outval(nzero);
   out.print('\n');
   for (int k = 0; k < kerns.length; k += 3) {
     if (kerns[k + 2] != 0) {
       out.print("KPX ");
       out.print(WinChars[kerns[k]]);
       out.print(' ');
       out.print(WinChars[kerns[k + 1]]);
       outval(kerns[k + 2]);
       out.print('\n');
     }
   }
   /* Put out trailer */
   out.print("EndKernPairs\nEndKernData\n");
 }
Ejemplo n.º 2
0
 private String readString() throws IOException {
   StringBuffer buf = new StringBuffer();
   while (true) {
     int c = in.read();
     if (c <= 0) break;
     buf.append((char) c);
   }
   return buf.toString();
 }
Ejemplo n.º 3
0
 public String readString(int size) throws IOException {
   StringBuffer buf = new StringBuffer();
   int ch;
   while ((size--) > 0) {
     ch = file.read();
     if (ch == -1) break;
     buf.append((char) ch);
   }
   return buf.toString();
 }
Ejemplo n.º 4
0
 /**
  * If the embedded flag is <CODE>false</CODE> or if the font is one of the 14 built in types, it
  * returns <CODE>null</CODE>, otherwise the font is read and output in a PdfStream object.
  *
  * @return the PdfStream containing the font or <CODE>null</CODE>
  * @throws DocumentException if there is an error reading the font
  */
 private PdfStream getFontStream() throws DocumentException {
   if (builtinFont || !embedded) return null;
   RandomAccessFileOrArray rf = null;
   try {
     String filePfb = fileName.substring(0, fileName.length() - 3) + "pfb";
     if (pfb == null) rf = new RandomAccessFileOrArray(filePfb);
     else rf = new RandomAccessFileOrArray(pfb);
     int fileLength = rf.length();
     byte st[] = new byte[fileLength - 18];
     int lengths[] = new int[3];
     int bytePtr = 0;
     for (int k = 0; k < 3; ++k) {
       if (rf.read() != 0x80) throw new DocumentException("Start marker missing in " + filePfb);
       if (rf.read() != PFB_TYPES[k])
         throw new DocumentException("Incorrect segment type in " + filePfb);
       int size = rf.read();
       size += rf.read() << 8;
       size += rf.read() << 16;
       size += rf.read() << 24;
       lengths[k] = size;
       while (size != 0) {
         int got = rf.read(st, bytePtr, size);
         if (got < 0) throw new DocumentException("Premature end in " + filePfb);
         bytePtr += got;
         size -= got;
       }
     }
     return new StreamFont(st, lengths);
   } catch (Exception e) {
     throw new DocumentException(e);
   } finally {
     if (rf != null) {
       try {
         rf.close();
       } catch (Exception e) {
         // empty on purpose
       }
     }
   }
 }
Ejemplo n.º 5
0
 private void openpfm() throws IOException {
   in.seek(0);
   vers = in.readShortLE();
   h_len = in.readIntLE();
   copyright = readString(60);
   type = in.readShortLE();
   points = in.readShortLE();
   verres = in.readShortLE();
   horres = in.readShortLE();
   ascent = in.readShortLE();
   intleading = in.readShortLE();
   extleading = in.readShortLE();
   italic = (byte) in.read();
   uline = (byte) in.read();
   overs = (byte) in.read();
   weight = in.readShortLE();
   charset = (byte) in.read();
   pixwidth = in.readShortLE();
   pixheight = in.readShortLE();
   kind = (byte) in.read();
   avgwidth = in.readShortLE();
   maxwidth = in.readShortLE();
   firstchar = in.read();
   lastchar = in.read();
   defchar = (byte) in.read();
   brkchar = (byte) in.read();
   widthby = in.readShortLE();
   device = in.readIntLE();
   face = in.readIntLE();
   bits = in.readIntLE();
   bitoff = in.readIntLE();
   extlen = in.readShortLE();
   psext = in.readIntLE();
   chartab = in.readIntLE();
   res1 = in.readIntLE();
   kernpairs = in.readIntLE();
   res2 = in.readIntLE();
   fontname = in.readIntLE();
   if (h_len != in.length() || extlen != 30 || fontname < 75 || fontname > 512)
     throw new IOException(MessageLocalization.getComposedMessage("not.a.valid.pfm.file"));
   in.seek(psext + 14);
   capheight = in.readShortLE();
   xheight = in.readShortLE();
   ascender = in.readShortLE();
   descender = in.readShortLE();
 }
Ejemplo n.º 6
0
 public boolean nextToken() throws IOException {
   StringBuffer outBuf = null;
   stringValue = EMPTY;
   int ch = 0;
   do {
     ch = file.read();
   } while (ch != -1 && isWhitespace(ch));
   if (ch == -1) return false;
   switch (ch) {
     case '[':
       type = TK_START_ARRAY;
       break;
     case ']':
       type = TK_END_ARRAY;
       break;
     case '/':
       {
         outBuf = new StringBuffer();
         type = TK_NAME;
         while (true) {
           ch = file.read();
           if (delims[ch + 1]) break;
           if (ch == '#') {
             ch = (getHex(file.read()) << 4) + getHex(file.read());
           }
           outBuf.append((char) ch);
         }
         backOnePosition(ch);
         break;
       }
     case '>':
       ch = file.read();
       if (ch != '>') throwError("'>' not expected");
       type = TK_END_DIC;
       break;
     case '<':
       {
         int v1 = file.read();
         if (v1 == '<') {
           type = TK_START_DIC;
           break;
         }
         outBuf = new StringBuffer();
         type = TK_STRING;
         hexString = true;
         int v2 = 0;
         while (true) {
           while (isWhitespace(v1)) v1 = file.read();
           if (v1 == '>') break;
           v1 = getHex(v1);
           if (v1 < 0) break;
           v2 = file.read();
           while (isWhitespace(v2)) v2 = file.read();
           if (v2 == '>') {
             ch = v1 << 4;
             outBuf.append((char) ch);
             break;
           }
           v2 = getHex(v2);
           if (v2 < 0) break;
           ch = (v1 << 4) + v2;
           outBuf.append((char) ch);
           v1 = file.read();
         }
         if (v1 < 0 || v2 < 0) throwError("Error reading string");
         break;
       }
     case '%':
       type = TK_COMMENT;
       do {
         ch = file.read();
       } while (ch != -1 && ch != '\r' && ch != '\n');
       break;
     case '(':
       {
         outBuf = new StringBuffer();
         type = TK_STRING;
         hexString = false;
         int nesting = 0;
         while (true) {
           ch = file.read();
           if (ch == -1) break;
           if (ch == '(') {
             ++nesting;
           } else if (ch == ')') {
             --nesting;
           } else if (ch == '\\') {
             boolean lineBreak = false;
             ch = file.read();
             switch (ch) {
               case 'n':
                 ch = '\n';
                 break;
               case 'r':
                 ch = '\r';
                 break;
               case 't':
                 ch = '\t';
                 break;
               case 'b':
                 ch = '\b';
                 break;
               case 'f':
                 ch = '\f';
                 break;
               case '(':
               case ')':
               case '\\':
                 break;
               case '\r':
                 lineBreak = true;
                 ch = file.read();
                 if (ch != '\n') backOnePosition(ch);
                 break;
               case '\n':
                 lineBreak = true;
                 break;
               default:
                 {
                   if (ch < '0' || ch > '7') {
                     break;
                   }
                   int octal = ch - '0';
                   ch = file.read();
                   if (ch < '0' || ch > '7') {
                     backOnePosition(ch);
                     ch = octal;
                     break;
                   }
                   octal = (octal << 3) + ch - '0';
                   ch = file.read();
                   if (ch < '0' || ch > '7') {
                     backOnePosition(ch);
                     ch = octal;
                     break;
                   }
                   octal = (octal << 3) + ch - '0';
                   ch = octal & 0xff;
                   break;
                 }
             }
             if (lineBreak) continue;
             if (ch < 0) break;
           } else if (ch == '\r') {
             ch = file.read();
             if (ch < 0) break;
             if (ch != '\n') {
               backOnePosition(ch);
               ch = '\n';
             }
           }
           if (nesting == -1) break;
           outBuf.append((char) ch);
         }
         if (ch == -1) throwError("Error reading string");
         break;
       }
     default:
       {
         outBuf = new StringBuffer();
         if (ch == '-' || ch == '+' || ch == '.' || (ch >= '0' && ch <= '9')) {
           type = TK_NUMBER;
           do {
             outBuf.append((char) ch);
             ch = file.read();
           } while (ch != -1 && ((ch >= '0' && ch <= '9') || ch == '.'));
         } else {
           type = TK_OTHER;
           do {
             outBuf.append((char) ch);
             ch = file.read();
           } while (!delims[ch + 1]);
         }
         backOnePosition(ch);
         break;
       }
   }
   if (outBuf != null) stringValue = outBuf.toString();
   return true;
 }
Ejemplo n.º 7
0
 public int read() throws IOException {
   return file.read();
 }