/** * Returns the <CODE>PdfObject</CODE> with the specified index, resolving * a possible indirect reference to a direct object. * * Thus this method will never return a <CODE>PdfIndirectReference</CODE> * object. * * @param idx The index of the <CODE>PdfObject</CODE> to be returned * @return A direct <CODE>PdfObject</CODE> or <CODE>null</CODE> */ public PdfObject getDirectObject(final int idx) { return PdfReader.getPdfObject(getPdfObject(idx)); }
/** * Returns the <CODE>PdfObject</CODE> with the specified index, resolving * a possible indirect reference to a direct object. * * Thus this method will never return a <CODE>PdfIndirectReference</CODE> * object. * * @param idx The index of the <CODE>PdfObject</CODE> to be returned * @return A direct <CODE>PdfObject</CODE> or <CODE>null</CODE> */ public PdfObject getDirectObject(final int idx) { return PdfReader.getPdfObject(getPdfObject(idx)); }
private void fillOrderRecursively(PdfArray orderArray, HashSet<PdfObject> order) { for (int i = 0; i < orderArray.size(); i++) { PdfArray orderChild = getDirectArray(orderArray.getPdfObject(i)); if (orderChild == null) { order.add(orderArray.getPdfObject(i)); } else { fillOrderRecursively(orderChild, order); } } }
private static String makeBookmarkParam(PdfArray dest, IntHashtable pages) { StringBuffer s = new StringBuffer(); PdfObject obj = dest.getPdfObject(0); if (obj.isNumber()) s.append(((PdfNumber)obj).intValue() + 1); else s.append(pages.get(getNumber((PdfIndirectReference)obj))); //changed by ujihara 2004-06-13 s.append(' ').append(dest.getPdfObject(1).toString().substring(1)); for (int k = 2; k < dest.size(); ++k) s.append(' ').append(dest.getPdfObject(k).toString()); return s.toString(); }
private static String makeBookmarkParam(PdfArray dest, IntHashtable pages) { StringBuffer s = new StringBuffer(); PdfObject obj = dest.getPdfObject(0); if (obj.isNumber()) s.append(((PdfNumber)obj).intValue() + 1); else s.append(pages.get(getNumber((PdfIndirectReference)obj))); //changed by ujihara 2004-06-13 s.append(' ').append(dest.getPdfObject(1).toString().substring(1)); for (int k = 2; k < dest.size(); ++k) s.append(' ').append(dest.getPdfObject(k).toString()); return s.toString(); }
/** Normalizes a <CODE>Rectangle</CODE> so that llx and lly are smaller than urx and ury. * @param box the original rectangle * @return a normalized <CODE>Rectangle</CODE> */ public static Rectangle getNormalizedRectangle(final PdfArray box) { float llx = ((PdfNumber)getPdfObjectRelease(box.getPdfObject(0))).floatValue(); float lly = ((PdfNumber)getPdfObjectRelease(box.getPdfObject(1))).floatValue(); float urx = ((PdfNumber)getPdfObjectRelease(box.getPdfObject(2))).floatValue(); float ury = ((PdfNumber)getPdfObjectRelease(box.getPdfObject(3))).floatValue(); return new Rectangle(Math.min(llx, urx), Math.min(lly, ury), Math.max(llx, urx), Math.max(lly, ury)); }
/** Normalizes a <CODE>Rectangle</CODE> so that llx and lly are smaller than urx and ury. * @param box the original rectangle * @return a normalized <CODE>Rectangle</CODE> */ public static Rectangle getNormalizedRectangle(final PdfArray box) { float llx = ((PdfNumber)getPdfObjectRelease(box.getPdfObject(0))).floatValue(); float lly = ((PdfNumber)getPdfObjectRelease(box.getPdfObject(1))).floatValue(); float urx = ((PdfNumber)getPdfObjectRelease(box.getPdfObject(2))).floatValue(); float ury = ((PdfNumber)getPdfObjectRelease(box.getPdfObject(3))).floatValue(); return new Rectangle(Math.min(llx, urx), Math.min(lly, ury), Math.max(llx, urx), Math.max(lly, ury)); }
private static void iterateItems(PdfDictionary dic, HashMap<Integer, PdfObject> items) { PdfArray nn = (PdfArray)PdfReader.getPdfObjectRelease(dic.get(PdfName.NUMS)); if (nn != null) { for (int k = 0; k < nn.size(); ++k) { PdfNumber s = (PdfNumber)PdfReader.getPdfObjectRelease(nn.getPdfObject(k++)); items.put(Integer.valueOf(s.intValue()), nn.getPdfObject(k)); } } else if ((nn = (PdfArray)PdfReader.getPdfObjectRelease(dic.get(PdfName.KIDS))) != null) { for (int k = 0; k < nn.size(); ++k) { PdfDictionary kid = (PdfDictionary)PdfReader.getPdfObjectRelease(nn.getPdfObject(k)); iterateItems(kid, items); } } }
private void serArray(PdfArray array, int level, ByteBuffer bb, HashMap<RefKey, Integer> serialized) throws IOException { bb.append("$A"); if (level <= 0) return; for (int k = 0; k < array.size(); ++k) { serObject(array.getPdfObject(k), level, bb, serialized); } }
private void serArray(PdfArray array, int level, ByteBuffer bb, HashMap<RefKey, Integer> serialized) throws IOException { bb.append("$A"); if (level <= 0) return; for (int k = 0; k < array.size(); ++k) { serObject(array.getPdfObject(k), level, bb, serialized); } }
private static void iterateItems(PdfDictionary dic, HashMap<Integer, PdfObject> items) { PdfArray nn = (PdfArray)PdfReader.getPdfObjectRelease(dic.get(PdfName.NUMS)); if (nn != null) { for (int k = 0; k < nn.size(); ++k) { PdfNumber s = (PdfNumber)PdfReader.getPdfObjectRelease(nn.getPdfObject(k++)); items.put(Integer.valueOf(s.intValue()), nn.getPdfObject(k)); } } else if ((nn = (PdfArray)PdfReader.getPdfObjectRelease(dic.get(PdfName.KIDS))) != null) { for (int k = 0; k < nn.size(); ++k) { PdfDictionary kid = (PdfDictionary)PdfReader.getPdfObjectRelease(nn.getPdfObject(k)); iterateItems(kid, items); } } }
private void removeInactiveReferences(PdfArray array, HashSet<RefKey> activeKeys) { for (int i = 0; i < array.size(); ++i) { PdfObject obj = array.getPdfObject(i); if ((obj.type() == 0 && !activeKeys.contains(new RefKey((PdfIndirectReference)obj))) || (obj.isDictionary() && containsInactivePg((PdfDictionary)obj, activeKeys))) array.remove(i--); } }
private void removeInactiveReferences(PdfArray array, HashSet<RefKey> activeKeys) { for (int i = 0; i < array.size(); ++i) { PdfObject obj = array.getPdfObject(i); if ((obj.type() == 0 && !activeKeys.contains(new RefKey((PdfIndirectReference)obj))) || (obj.isDictionary() && containsInactivePg((PdfDictionary)obj, activeKeys))) array.remove(i--); } }
/** * Gets number of indirect. If type of directed indirect is PAGES, it refers PAGE object through KIDS. * (Contributed by Kazuya Ujihara) * @param indirect * 2004-06-13 */ private static int getNumber(PdfIndirectReference indirect) { PdfDictionary pdfObj = (PdfDictionary)PdfReader.getPdfObjectRelease(indirect); if (pdfObj.contains(PdfName.TYPE) && pdfObj.get(PdfName.TYPE).equals(PdfName.PAGES) && pdfObj.contains(PdfName.KIDS)) { PdfArray kids = (PdfArray)pdfObj.get(PdfName.KIDS); indirect = (PdfIndirectReference)kids.getPdfObject(0); } return indirect.getNumber(); }
private PdfObject cleverPdfArrayClone(PdfArray array) { PdfArray newArray = new PdfArray(); for (int i = 0; i < array.size(); i++) { PdfObject obj = array.getPdfObject(i); if (obj instanceof PdfDictionary) newArray.add(cleverPdfDictionaryClone((PdfDictionary) obj)); else newArray.add(obj); } return newArray; }
void sweepKids(PdfObject obj) { PdfObject oo = PdfReader.killIndirect(obj); if (oo == null || !oo.isDictionary()) return; PdfDictionary dic = (PdfDictionary) oo; PdfArray kids = (PdfArray) PdfReader.killIndirect(dic.get(PdfName.KIDS)); if (kids == null) return; for (int k = 0; k < kids.size(); ++k) { sweepKids(kids.getPdfObject(k)); } }
void sweepKids(PdfObject obj) { PdfObject oo = PdfReader.killIndirect(obj); if (oo == null || !oo.isDictionary()) return; PdfDictionary dic = (PdfDictionary) oo; PdfArray kids = (PdfArray) PdfReader.killIndirect(dic.get(PdfName.KIDS)); if (kids == null) return; for (int k = 0; k < kids.size(); ++k) { sweepKids(kids.getPdfObject(k)); } }
private int removeRefFromArray(PdfArray array, PdfObject refo) { if (refo == null || !refo.isIndirect()) return array.size(); PdfIndirectReference ref = (PdfIndirectReference)refo; for (int j = 0; j < array.size(); ++j) { PdfObject obj = array.getPdfObject(j); if (!obj.isIndirect()) continue; if (((PdfIndirectReference)obj).getNumber() == ref.getNumber()) array.remove(j--); } return array.size(); }
private int removeRefFromArray(PdfArray array, PdfObject refo) { if (refo == null || !refo.isIndirect()) return array.size(); PdfIndirectReference ref = (PdfIndirectReference)refo; for (int j = 0; j < array.size(); ++j) { PdfObject obj = array.getPdfObject(j); if (!obj.isIndirect()) continue; if (((PdfIndirectReference)obj).getNumber() == ref.getNumber()) array.remove(j--); } return array.size(); }
private static PdfArray getDirectArray(PdfArray in) { PdfArray out = new PdfArray(); for (int i = 0; i < in.size(); ++i) { PdfObject value = getDirectObject(in.getPdfObject(i)); if (value == null) continue; if (value.isArray()) { out.add(getDirectArray((PdfArray) value)); } else if (value.isDictionary()) { out.add(getDirectDict((PdfDictionary) value)); } else { out.add(value); } } return out; }