Exemplo n.º 1
0
 /**
  * @param key
  * @param value
  */
 public void put(int key, O value) {
   Object[] recs = hashtable.get(key);
   if (recs == null) {
     recs = new Object[1];
     hashtable.put(key, recs);
   } else {
     Object[] old = recs;
     recs = new Object[old.length + 1];
     for (int i = 0; i < old.length; i++) {
       recs[i] = old[i];
     }
     hashtable.put(key, recs);
   }
   recs[recs.length - 1] = value;
 }
Exemplo n.º 2
0
 void addDocument(PdfReader reader) throws DocumentException, IOException {
   if (!reader.isOpenedWithFullPermissions())
     throw new BadPasswordException(
         MessageLocalization.getComposedMessage("pdfreader.not.opened.with.owner.password"));
   openDoc();
   if (readers2intrefs.containsKey(reader)) {
     reader = new PdfReader(reader);
   } else {
     if (reader.isTampered())
       throw new DocumentException(
           MessageLocalization.getComposedMessage("the.document.was.reused"));
     reader.consolidateNamedDestinations();
     reader.setTampered(true);
   }
   reader.shuffleSubsetNames();
   readers2intrefs.put(reader, new IntHashtable());
   readers.add(reader);
   int len = reader.getNumberOfPages();
   IntHashtable refs = new IntHashtable();
   for (int p = 1; p <= len; ++p) {
     refs.put(reader.getPageOrigRef(p).getNumber(), 1);
     reader.releasePage(p);
   }
   pages2intrefs.put(reader, refs);
   visited.put(reader, new IntHashtable());
   AcroFields acro = reader.getAcroFields();
   // when a document with NeedAppearances is encountered, the flag is set
   // in the resulting document.
   boolean needapp = !acro.isGenerateAppearances();
   if (needapp) needAppearances = true;
   fields.add(acro);
   updateCalculationOrder(reader);
 }
Exemplo n.º 3
0
 private void fillEncoding(PdfName encoding) {
   if (PdfName.MAC_ROMAN_ENCODING.equals(encoding) || PdfName.WIN_ANSI_ENCODING.equals(encoding)) {
     byte b[] = new byte[256];
     for (int k = 0; k < 256; ++k) b[k] = (byte) k;
     String enc = WINANSI;
     if (PdfName.MAC_ROMAN_ENCODING.equals(encoding)) enc = MACROMAN;
     String cv = PdfEncodings.convertToString(b, enc);
     char arr[] = cv.toCharArray();
     for (int k = 0; k < 256; ++k) {
       uni2byte.put(arr[k], k);
     }
   } else {
     for (int k = 0; k < 256; ++k) {
       uni2byte.put(stdEnc[k], k);
     }
   }
 }
Exemplo n.º 4
0
 static IntHashtable createMetric(String s) {
   IntHashtable h = new IntHashtable();
   StringTokenizer tk = new StringTokenizer(s);
   while (tk.hasMoreTokens()) {
     int n1 = Integer.parseInt(tk.nextToken());
     h.put(n1, Integer.parseInt(tk.nextToken()));
   }
   return h;
 }
Exemplo n.º 5
0
 @Override
 protected int getNewObjectNumber(PdfReader reader, int number, int generation) {
   IntHashtable refs = readers2intrefs.get(reader);
   int n = refs.get(number);
   if (n == 0) {
     n = getIndirectReferenceNumber();
     refs.put(number, n);
   }
   return n;
 }
Exemplo n.º 6
0
 private IntHashtable readWidths(PdfArray ws) {
   IntHashtable hh = new IntHashtable();
   if (ws == null) return hh;
   for (int k = 0; k < ws.size(); ++k) {
     int c1 = ((PdfNumber) PdfReader.getPdfObjectRelease(ws.getPdfObject(k))).intValue();
     PdfObject obj = PdfReader.getPdfObjectRelease(ws.getPdfObject(++k));
     if (obj.isArray()) {
       PdfArray a2 = (PdfArray) obj;
       for (int j = 0; j < a2.size(); ++j) {
         int c2 = ((PdfNumber) PdfReader.getPdfObjectRelease(a2.getPdfObject(j))).intValue();
         hh.put(c1++, c2);
       }
     } else {
       int c2 = ((PdfNumber) obj).intValue();
       int w = ((PdfNumber) PdfReader.getPdfObjectRelease(ws.getPdfObject(++k))).intValue();
       for (; c1 <= c2; ++c1) hh.put(c1, w);
     }
   }
   return hh;
 }
 public static HashMap getNamedDestination(PdfReader reader, boolean fromNames) {
   IntHashtable pages = new IntHashtable();
   int numPages = reader.getNumberOfPages();
   for (int k = 1; k <= numPages; ++k) pages.put(reader.getPageOrigRef(k).getNumber(), k);
   HashMap names =
       fromNames ? reader.getNamedDestinationFromNames() : reader.getNamedDestinationFromStrings();
   for (Iterator it = names.entrySet().iterator(); it.hasNext(); ) {
     Map.Entry entry = (Map.Entry) it.next();
     ArrayList arr = ((PdfArray) entry.getValue()).getArrayList();
     StringBuffer s = new StringBuffer();
     try {
       s.append(pages.get(((PdfIndirectReference) arr.get(0)).getNumber()));
       s.append(' ').append(arr.get(1).toString().substring(1));
       for (int k = 2; k < arr.size(); ++k) s.append(' ').append(arr.get(k).toString());
       entry.setValue(s.toString());
     } catch (Exception e) {
       it.remove();
     }
   }
   return names;
 }
Exemplo n.º 8
0
 private void doType1TT() {
   CMapToUnicode toUnicode = null;
   PdfObject enc = PdfReader.getPdfObject(font.get(PdfName.ENCODING));
   if (enc == null) {
     fillEncoding(null);
     try {
       toUnicode = processToUnicode();
       if (toUnicode != null) {
         Map<Integer, Integer> rm = toUnicode.createReverseMapping();
         for (Map.Entry<Integer, Integer> kv : rm.entrySet()) {
           uni2byte.put(kv.getKey().intValue(), kv.getValue().intValue());
         }
       }
     } catch (Exception ex) {
       throw new ExceptionConverter(ex);
     }
   } else {
     if (enc.isName()) fillEncoding((PdfName) enc);
     else if (enc.isDictionary()) {
       PdfDictionary encDic = (PdfDictionary) enc;
       enc = PdfReader.getPdfObject(encDic.get(PdfName.BASEENCODING));
       if (enc == null) fillEncoding(null);
       else fillEncoding((PdfName) enc);
       PdfArray diffs = encDic.getAsArray(PdfName.DIFFERENCES);
       if (diffs != null) {
         diffmap = new IntHashtable();
         int currentNumber = 0;
         for (int k = 0; k < diffs.size(); ++k) {
           PdfObject obj = diffs.getPdfObject(k);
           if (obj.isNumber()) currentNumber = ((PdfNumber) obj).intValue();
           else {
             int c[] = GlyphList.nameToUnicode(PdfName.decodeName(((PdfName) obj).toString()));
             if (c != null && c.length > 0) {
               uni2byte.put(c[0], currentNumber);
               diffmap.put(c[0], currentNumber);
             } else {
               if (toUnicode == null) {
                 toUnicode = processToUnicode();
                 if (toUnicode == null) {
                   toUnicode = new CMapToUnicode();
                 }
               }
               final String unicode = toUnicode.lookup(new byte[] {(byte) currentNumber}, 0, 1);
               if ((unicode != null) && (unicode.length() == 1)) {
                 this.uni2byte.put(unicode.charAt(0), currentNumber);
                 this.diffmap.put(unicode.charAt(0), currentNumber);
               }
             }
             ++currentNumber;
           }
         }
       }
     }
   }
   PdfArray newWidths = font.getAsArray(PdfName.WIDTHS);
   PdfNumber first = font.getAsNumber(PdfName.FIRSTCHAR);
   PdfNumber last = font.getAsNumber(PdfName.LASTCHAR);
   if (BuiltinFonts14.containsKey(fontName)) {
     BaseFont bf;
     try {
       bf = BaseFont.createFont(fontName, WINANSI, false);
     } catch (Exception e) {
       throw new ExceptionConverter(e);
     }
     int e[] = uni2byte.toOrderedKeys();
     for (int k = 0; k < e.length; ++k) {
       int n = uni2byte.get(e[k]);
       widths[n] = bf.getRawWidth(n, GlyphList.unicodeToName(e[k]));
     }
     if (diffmap != null) { // widths for diffmap must override existing ones
       e = diffmap.toOrderedKeys();
       for (int k = 0; k < e.length; ++k) {
         int n = diffmap.get(e[k]);
         widths[n] = bf.getRawWidth(n, GlyphList.unicodeToName(e[k]));
       }
       diffmap = null;
     }
     ascender = bf.getFontDescriptor(ASCENT, 1000);
     capHeight = bf.getFontDescriptor(CAPHEIGHT, 1000);
     descender = bf.getFontDescriptor(DESCENT, 1000);
     italicAngle = bf.getFontDescriptor(ITALICANGLE, 1000);
     fontWeight = bf.getFontDescriptor(FONT_WEIGHT, 1000);
     llx = bf.getFontDescriptor(BBOXLLX, 1000);
     lly = bf.getFontDescriptor(BBOXLLY, 1000);
     urx = bf.getFontDescriptor(BBOXURX, 1000);
     ury = bf.getFontDescriptor(BBOXURY, 1000);
   }
   if (first != null && last != null && newWidths != null) {
     int f = first.intValue();
     int nSize = f + newWidths.size();
     if (widths.length < nSize) {
       int[] tmp = new int[nSize];
       System.arraycopy(widths, 0, tmp, 0, f);
       widths = tmp;
     }
     for (int k = 0; k < newWidths.size(); ++k) {
       widths[f + k] = newWidths.getAsNumber(k).intValue();
     }
   }
   fillFontDesc(font.getAsDict(PdfName.FONTDESCRIPTOR));
 }
Exemplo n.º 9
0
 static {
   for (int l = 0; l < hwKeyboardLayouts.length; l++)
     hwKeyboardLayoutsLst.put(hwKeyboardLayouts[l], dummy);
 }
Exemplo n.º 10
0
 /**
  * Sets a reference to "visited" in the copy process.
  *
  * @param ref the reference that needs to be set to "visited"
  * @return true if the reference was set to visited
  */
 protected boolean setVisited(PRIndirectReference ref) {
   IntHashtable refs = visited.get(ref.getReader());
   if (refs != null) return refs.put(ref.getNumber(), 1) != 0;
   else return false;
 }