protected void fixStructureTreeRoot(HashSet<RefKey> activeKeys, HashSet<PdfName> activeClassMaps) { HashMap<PdfName, PdfObject> newClassMap = new HashMap<PdfName, PdfObject>(activeClassMaps.size()); for (PdfName key: activeClassMaps) { PdfObject cm = structureTreeRoot.classes.get(key); if (cm != null) newClassMap.put(key, cm); } structureTreeRoot.classes = newClassMap; PdfArray kids = structureTreeRoot.getAsArray(PdfName.K); if (kids != null) { for (int i = 0; i < kids.size(); ++i) { PdfIndirectReference iref = (PdfIndirectReference)kids.getPdfObject(i); RefKey key = new RefKey(iref); if (!activeKeys.contains(key)) kids.remove(i--); } } }
public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfDictionary root = reader.getCatalog(); PdfDictionary names = root.getAsDict(PdfName.NAMES); PdfDictionary embeddedFiles = names.getAsDict(PdfName.EMBEDDEDFILES); PdfArray namesArray = embeddedFiles.getAsArray(PdfName.NAMES); namesArray.remove(0); namesArray.remove(0); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); stamper.close(); }
protected void fixStructureTreeRoot(HashSet<RefKey> activeKeys, HashSet<PdfName> activeClassMaps) { HashMap<PdfName, PdfObject> newClassMap = new HashMap<PdfName, PdfObject>(activeClassMaps.size()); for (PdfName key: activeClassMaps) { PdfObject cm = structureTreeRoot.classes.get(key); if (cm != null) newClassMap.put(key, cm); } structureTreeRoot.classes = newClassMap; PdfArray kids = structureTreeRoot.getAsArray(PdfName.K); if (kids != null) { for (int i = 0; i < kids.size(); ++i) { PdfIndirectReference iref = (PdfIndirectReference)kids.getPdfObject(i); RefKey key = new RefKey(iref); if (!activeKeys.contains(key)) kids.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--); } }
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--); } }
if (kids != null) { PdfObject firstKid = kids.getDirectObject(0); if (firstKid.isNumber()) kids.remove(0);
private void fixPgKey(ArrayList<PdfIndirectReference> newRefs, HashSet<RefKey> activeKeys){ for (PdfIndirectReference iref: newRefs) { PdfIndirectObject iobj = indirectObjects.get(new RefKey(iref)); if (iobj == null || !iobj.object.isDictionary()) continue; PdfDictionary dict = (PdfDictionary)iobj.object; PdfObject pg = dict.get(PdfName.PG); if (pg == null || activeKeys.contains(new RefKey((PdfIndirectReference)pg))) continue; PdfArray kids = dict.getAsArray(PdfName.K); if (kids == null) continue; for (int i = 0; i < kids.size(); ++i) { PdfObject obj = kids.getPdfObject(i); if (obj.type() != 0) { kids.remove(i--); } else { PdfIndirectObject kid = indirectObjects.get(new RefKey((PdfIndirectReference)obj)); if (kid != null && kid.object.isDictionary()) { PdfObject kidPg = ((PdfDictionary)kid.object).get(PdfName.PG); if (kidPg != null && activeKeys.contains(new RefKey((PdfIndirectReference)kidPg))) { dict.put(PdfName.PG, kidPg); break; } } } } } }
private void fixPgKey(ArrayList<PdfIndirectReference> newRefs, HashSet<RefKey> activeKeys){ for (PdfIndirectReference iref: newRefs) { PdfIndirectObject iobj = indirectObjects.get(new RefKey(iref)); if (iobj == null || !iobj.object.isDictionary()) continue; PdfDictionary dict = (PdfDictionary)iobj.object; PdfObject pg = dict.get(PdfName.PG); if (pg == null || activeKeys.contains(new RefKey((PdfIndirectReference)pg))) continue; PdfArray kids = dict.getAsArray(PdfName.K); if (kids == null) continue; for (int i = 0; i < kids.size(); ++i) { PdfObject obj = kids.getPdfObject(i); if (obj.type() != 0) { kids.remove(i--); } else { PdfIndirectObject kid = indirectObjects.get(new RefKey((PdfIndirectReference)obj)); if (kid != null && kid.object.isDictionary()) { PdfObject kidPg = ((PdfDictionary)kid.object).get(PdfName.PG); if (kidPg != null && activeKeys.contains(new RefKey((PdfIndirectReference)kidPg))) { dict.put(PdfName.PG, kidPg); break; } } } } } }
private static void deleteOldReferences(PdfArray all, PdfArray toDelete) { if (all == null || toDelete == null) return; for (PdfObject pi : toDelete) { if (!pi.isIndirect()) continue; PRIndirectReference pir = (PRIndirectReference)pi; for (int k = 0; k < all.size(); ++k) { PdfObject po = all.getPdfObject(k); if (!po.isIndirect()) continue; PRIndirectReference pod = (PRIndirectReference)po; if (pir.getNumber() == pod.getNumber()) { all.remove(k); --k; } } } }
private static void deleteOldReferences(PdfArray all, PdfArray toDelete) { if (all == null || toDelete == null) return; for (PdfObject pi : toDelete) { if (!pi.isIndirect()) continue; PRIndirectReference pir = (PRIndirectReference)pi; for (int k = 0; k < all.size(); ++k) { PdfObject po = all.getPdfObject(k); if (!po.isIndirect()) continue; PRIndirectReference pod = (PRIndirectReference)po; if (pir.getNumber() == pod.getNumber()) { all.remove(k); --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(); }
PdfReader reader = new PdfReader(resource); PdfDictionary form = reader.getCatalog().getAsDict(PdfName.ACROFORM); PdfArray fields = form.getAsArray(PdfName.FIELDS); for (PdfObject object: fields) { PdfDictionary field = (PdfDictionary) PdfReader.getPdfObject(object); if ("Text1".equals(field.getAsString(PdfName.T).toString())) { PdfDictionary newField = new PdfDictionary(); PRIndirectReference newFieldRef = reader.addPdfObject(newField); fields.add(newFieldRef); newField.putAll(field); newField.put(PdfName.T, new PdfString("foobar")); PdfArray newKids = new PdfArray(); newField.put(PdfName.KIDS, newKids); PdfArray kids = field.getAsArray(PdfName.KIDS); PdfObject widget = kids.remove(0); newKids.add(widget); PdfDictionary widgetDict = (PdfDictionary) PdfReader.getPdfObject(widget); widgetDict.put(PdfName.PARENT, newFieldRef); break; } } PdfStamper stamper = new PdfStamper(reader, result); stamper.close();
if (!obj.isIndirect()) { while (k < kidsPR.size()) kidsPR.remove(k); break;
if (!obj.isIndirect()) { while (k < kidsPR.size()) kidsPR.remove(k); break;
/** * 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(); }
/** * 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(); }
annots.remove(idx); --idx;