Refine search
private void clearIndirects(PdfReader reader) { HashMap<RefKey, IndirectReferences> currIndirects = indirectMap.get(reader); ArrayList<RefKey> forDelete = new ArrayList<RefKey>(); for (Map.Entry<RefKey, IndirectReferences> entry: currIndirects.entrySet()) { PdfIndirectReference iRef = entry.getValue().theRef; RefKey key = new RefKey(iRef); PdfIndirectObject iobj = indirectObjects.get(key); if (iobj == null) { forDelete.add(entry.getKey()); } else if (iobj.object.isArray() || iobj.object.isDictionary() || iobj.object.isStream()) { forDelete.add(entry.getKey()); } } for (RefKey key: forDelete) currIndirects.remove(key); }
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(); }
static String getFontName(final PdfDictionary dic) { if (dic == null) return null; PdfObject type = getPdfObjectRelease(dic.get(PdfName.BASEFONT)); if (type == null || !type.isName()) return null; return PdfName.decodeName(type.toString()); }
private static PdfArray getNameArray(PdfObject obj) { if (obj == null) return null; obj = getPdfObjectRelease(obj); if (obj == null) return null; if (obj.isArray()) return (PdfArray)obj; else if (obj.isDictionary()) { PdfObject arr2 = getPdfObjectRelease(((PdfDictionary)obj).get(PdfName.D)); if (arr2 != null && arr2.isArray()) return (PdfArray)arr2; } return null; }
private static void mapGotoBookmark(HashMap<String, Object> map, PdfObject dest, IntHashtable pages) { if (dest.isString()) map.put("Named", dest.toString()); else if (dest.isName()) map.put("Named", PdfName.decodeName(dest.toString())); else if (dest.isArray()) map.put("Page", makeBookmarkParam((PdfArray)dest, pages)); //changed by ujihara 2004-06-13 map.put("Action", "GoTo"); }
PdfDictionary catalog = reader.getCatalog(); getPdfVersion().addToCatalog(catalog); PdfDictionary acroForm = (PdfDictionary) PdfReader.getPdfObject(catalog.get(PdfName.ACROFORM), reader.getCatalog()); if (acroFields != null && acroFields.getXfa().isChanged()) { markUsed(acroForm); acroForm.put(PdfName.SIGFLAGS, new PdfNumber(sigFlags)); markUsed(acroForm); markUsed(catalog); catalog.mergeDifferent(extraCatalog); for (Map.Entry<String, String> entry : moreInfo.entrySet()) { String key = entry.getKey(); PdfName keyName = new PdfName(key); String value = entry.getValue(); if (value == null) PdfObject xmpo = PdfReader.getPdfObject(catalog.get(PdfName.METADATA)); if (xmpo != null && xmpo.isStream()) { altMetadata = PdfReader.getStreamBytesRaw((PRStream) xmpo); PdfReader.killIndirect(catalog.get(PdfName.METADATA)); body.add(xmp, xmpo.getIndRef()); } else { catalog.put(PdfName.METADATA, body.add(xmp).getIndirectReference());
if (sw != null) { int scale = PushbuttonField.SCALE_ICON_ALWAYS; if (sw.equals(PdfName.B)) scale = PushbuttonField.SCALE_ICON_IS_TOO_BIG; else if (sw.equals(PdfName.S)) scale = PushbuttonField.SCALE_ICON_IS_TOO_SMALL; else if (sw.equals(PdfName.N)) scale = PushbuttonField.SCALE_ICON_NEVER; newButton.setScaleIcon(scale); PdfArray aj = ifit.getAsArray(PdfName.A); if (aj != null && aj.size() == 2) { float left = aj.getAsNumber(0).floatValue(); float bottom = aj.getAsNumber(1).floatValue(); newButton.setIconHorizontalAdjustment(left); newButton.setIconVerticalAdjustment(bottom); PdfObject i = mk.get(PdfName.I); if (i != null && i.isIndirect()) newButton.setIconReference((PRIndirectReference)i);
PdfObject v = PdfReader.getPdfObject(mergedDict.get(PdfName.V)); if (v == null) return ""; PdfName type = mergedDict.getAsName(PdfName.FT); if (PdfName.BTN.equals(type)) { PdfNumber ff = mergedDict.getAsNumber(PdfName.FF); int flags = 0; if (ff != null) flags = ff.intValue(); if ((flags & PdfFormField.FF_PUSHBUTTON) != 0) return ""; String value = ""; if (v instanceof PdfName) value = PdfName.decodeName(v.toString()); else if (v instanceof PdfString) value = ((PdfString)v).toUnicodeString(); return ((PdfString)v).toUnicodeString(); } else if (v instanceof PdfName) { return PdfName.decodeName(v.toString()); } else return "";
private PdfObject propagate(PdfObject obj) throws IOException { if (obj == null) { return new PdfNull(); } else if (obj.isArray()) { PdfArray a = (PdfArray)obj; for (int i = 0; i < a.size(); i++) { a.set(i, propagate(a.getPdfObject(i))); } return a; } else if (obj.isDictionary() || obj.isStream()) { PdfDictionary d = (PdfDictionary)obj; for (PdfName key : d.getKeys()) { d.put(key, propagate(d.get(key))); } return d; } else if (obj.isIndirect()) { obj = PdfReader.getPdfObject(obj); return addToBody(propagate(obj)).getIndirectReference(); } else return obj; }
PdfDictionary out = new PdfDictionary(in.size()); PdfObject type = PdfReader.getPdfObjectRelease(in.get(PdfName.TYPE)); PdfObject value = in.get(key); out.put(key, new PdfNumber(currentStructArrayNumber)); structTreeController.copyStructTreeForPage((PdfNumber) value, currentStructArrayNumber++); PdfName key = (PdfName)element; PdfObject value = in.get(key); if (structTreeController != null && structTreeController.reader != null && (key.equals(PdfName.STRUCTPARENTS) || key.equals(PdfName.STRUCTPARENT))) { continue; if (PdfName.PAGE.equals(type)) { if (!key.equals(PdfName.B) && !key.equals(PdfName.PARENT)) { parentObjects.put(value, in); if (tagged && value.isIndirect() && isStructTreeRootReference((PRIndirectReference)value)) { res = structureTreeRoot.getReference(); } else {
private void updateCalculationOrder(PdfReader reader) { PdfDictionary catalog = reader.getCatalog(); PdfDictionary acro = catalog.getAsDict(PdfName.ACROFORM); if (acro == null) return; PdfArray co = acro.getAsArray(PdfName.CO); if (co == null || co.size() == 0) return; AcroFields af = reader.getAcroFields(); for (int k = 0; k < co.size(); ++k) { PdfObject obj = co.getPdfObject(k); if (obj == null || !obj.isIndirect()) continue; String name = getCOName(reader, (PRIndirectReference) obj); if (af.getFieldItem(name) == null) continue; name = "." + name; if (calculationOrder.contains(name)) continue; calculationOrder.add(name); } }
protected PRIndirectReference getSinglePage(final int n) { PdfDictionary acc = new PdfDictionary(); PdfDictionary top = reader.rootPages; int base = 0; while (true) { for (int k = 0; k < pageInhCandidates.length; ++k) { PdfObject obj = top.get(pageInhCandidates[k]); if (obj != null) acc.put(pageInhCandidates[k], obj); PdfArray kids = (PdfArray)PdfReader.getPdfObjectRelease(top.get(PdfName.KIDS)); for (Iterator<PdfObject> it = kids.listIterator(); it.hasNext();) { PRIndirectReference ref = (PRIndirectReference)it.next(); PdfDictionary dic = (PdfDictionary)getPdfObject(ref); int last = reader.lastXrefPartial; PdfObject count = getPdfObjectRelease(dic.get(PdfName.COUNT)); reader.lastXrefPartial = last; int acn = 1; if (count != null && count.type() == PdfObject.NUMBER) acn = ((PdfNumber)count).intValue(); if (n < base + acn) { if (count == null) {
/** * Removes all the fields from the document. */ public void removeFields() { pageRefs.resetReleasePage(); for (int k = 1; k <= pageRefs.size(); ++k) { PdfDictionary page = pageRefs.getPageN(k); PdfArray annots = page.getAsArray(PdfName.ANNOTS); if (annots == null) { pageRefs.releasePage(k); continue; } for (int j = 0; j < annots.size(); ++j) { PdfObject obj = getPdfObjectRelease(annots.getPdfObject(j)); if (obj == null || !obj.isDictionary()) continue; PdfDictionary annot = (PdfDictionary)obj; if (PdfName.WIDGET.equals(annot.get(PdfName.SUBTYPE))) annots.remove(j--); } if (annots.isEmpty()) page.remove(PdfName.ANNOTS); else pageRefs.releasePage(k); } catalog.remove(PdfName.ACROFORM); pageRefs.resetReleasePage(); }
if (obj != null) { PdfArray ar = null; if (obj.isNumber()) { ar = new PdfArray(); ar.add(obj); struc.put(PdfName.K, ar); else if (obj.isArray()) { ar = (PdfArray)obj; if (ar.getAsNumber(0) != null) { PdfDictionary dic = new PdfDictionary(PdfName.MCR); dic.put(PdfName.PG, getCurrentPage()); dic.put(PdfName.MCID, new PdfNumber(mark)); ar.add(dic); content.append(struc.get(PdfName.S).getBytes()).append(" <</MCID ").append(mark); if (null != expansion) { content.append("/E (").append(expansion).append(")");
if (obj1 instanceof PdfObject) { PdfDictionary gs = getDirectDictionary((PdfObject) obj1); PdfObject obj = gs.get(PdfName.BM); if (obj != null) { if (!allowedBlendModes.contains(obj)) throw new PdfAConformanceException(MessageLocalization.getComposedMessage("blend.mode.1.not.allowed", obj.toString())); if (!PdfGState.BM_NORMAL.equals(obj)) transparencyDetectedOnThePage = true; PdfNumber ca = gs.getAsNumber(PdfName.ca); if (ca != null && ca.floatValue() < 1f) { transparencyDetectedOnThePage = true; ca = gs.getAsNumber(PdfName.CA); if (ca != null && ca.floatValue() < 1f) { transparencyDetectedOnThePage = true; PdfName tr2 = gs.getAsName(PdfName.TR2); if (tr2 != null && !tr2.equals(PdfName.DEFAULT)) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("an.extgstate.dictionary.shall.not.contain.the.TR2.key.with.a.value.other.than.default")); PdfNumber halftoneType = halfTone.getAsNumber(PdfName.HALFTONETYPE); if (halftoneType == null || (halftoneType.intValue() != 1 && halftoneType.intValue() != 5)) throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("all.halftones.shall.have.halftonetype.1.or.5")); PdfName ri = gs.getAsName(PdfName.RI); if (ri != null && !(PdfName.RELATIVECOLORIMETRIC.equals(ri) || PdfName.ABSOLUTECOLORIMETRIC.equals(ri) || PdfName.PERCEPTUAL.equals(ri) || PdfName.SATURATION.equals(ri))) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("1.value.of.ri.key.is.not.allowed", ri.toString()));
PdfObject filter = PdfReader.getPdfObject(get(PdfName.FILTER)); if (filter != null) { if (filter.isName()) { if (PdfName.FLATEDECODE.equals(filter)) return; else if (filter.isArray()) { if (((PdfArray) filter).contains(PdfName.FLATEDECODE)) return; put(PdfName.LENGTH, new PdfNumber(streamBytes.size())); if (filter == null) { put(PdfName.FILTER, PdfName.FLATEDECODE); PdfArray filters = new PdfArray(filter); filters.add(0, PdfName.FLATEDECODE); put(PdfName.FILTER, filters);
/** * Replaces CalRGB and CalGray colorspaces with DeviceRGB and DeviceGray. */ public void simplifyColorspace() { if (additional == null) return; PdfArray value = additional.getAsArray(PdfName.COLORSPACE); if (value == null) return; PdfObject cs = simplifyColorspace(value); PdfObject newValue; if (cs.isName()) newValue = cs; else { newValue = value; PdfName first = value.getAsName(0); if (PdfName.INDEXED.equals(first)) { if (value.size() >= 2) { PdfArray second = value.getAsArray(1); if (second != null) { value.set(1, simplifyColorspace(second)); } } } } additional.put(PdfName.COLORSPACE, newValue); }
private void fillDiffMap(PdfDictionary encDic, CMapToUnicode toUnicode) { 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);
if (obj1 instanceof PdfNumber) { PdfNumber number = (PdfNumber) obj1; if (Math.abs(number.doubleValue()) > maxRealValue && number.toString().contains(".")) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("real.number.is.out.of.range")); if (array.size() > maxArrayLength) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("pdf.array.exceeds.length.set.by.PDFA1.standard", Integer.toString(array.size()))); if (dictionary.size() > maxDictionaryLength) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("pdf.dictionary.is.out.of.bounds")); PdfName type = dictionary.getAsName(PdfName.TYPE); if (PdfName.CATALOG.equals(type)) { if (!dictionary.contains(PdfName.METADATA)) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("the.document.catalog.dictionary.shall.contain.metadata")); } else if (PdfName.PAGE.equals(type)) { if (dictionary.contains(PdfName.AA)) { throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("page.dictionary.shall.not.include.aa.entry")); } else if (PdfName.OUTPUTINTENT.equals(type)) { isCheckOutputIntent = true; PdfObject destOutputIntent = dictionary.get(PdfName.DESTOUTPUTPROFILE); if (destOutputIntent != null && pdfaDestOutputIntent != null) { if (pdfaDestOutputIntent.getIndRef() != destOutputIntent.getIndRef()) throw new PdfAConformanceException(obj1, MessageLocalization.getComposedMessage("if.outputintents.array.more.than.one.entry.the.same.indirect.object")); } else {