/** * Close PdfStamper * @throws IOException * @throws DocumentException */ public void close() throws IOException, DocumentException { writer.close(stamper.getMoreInfo()); } }
private void markUsed(PdfObject obj) { if (!append) return; ((PdfStamperImp)writer).markUsed(obj); }
/** Starts the process of adding extra content to an existing PDF * document. * <p> * The reader will be closed when this PdfStamper is closed * @param reader the original document. It cannot be reused * @param os the output stream * @throws DocumentException on error * @throws IOException on error */ public PdfStamper(final PdfReader reader, final OutputStream os) throws DocumentException, IOException { stamper = new PdfStamperImp(reader, os, '\0', false); }
protected void setOutlines() throws IOException { if (newBookmarks == null) return; deleteOutlines(); if (newBookmarks.isEmpty()) return; PdfDictionary catalog = reader.getCatalog(); boolean namedAsNames = catalog.get(PdfName.DESTS) != null; writeOutlines(catalog, namedAsNames); markUsed(catalog); }
setViewerPreferences(); flatFields(); flatFreeTextFields(); flattenAnnotations(); addFieldResources(); 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); if (!flat) { acroFields.getXfa().setXfa(this); if (acroForm != null) { acroForm.put(PdfName.SIGFLAGS, new PdfNumber(sigFlags)); markUsed(acroForm); markUsed(catalog); addSharedObjectsToBody(); setOutlines(); setJavaScript(); addFileAttachments(); fillOCProperties(false); PdfDictionary ocdict = catalog.getAsDict(PdfName.OCPROPERTIES);
stamper.mergeVerification(); preClosed = true; AcroFields af = writer.getAcroFields(); String name = getFieldName(); boolean fieldExists = af.doesSignatureFieldExist(name); PdfIndirectReference refSig = writer.getPdfIndirectReference(); writer.setSigFlags(3); PdfDictionary fieldLock = null; if (fieldExists) { PdfDictionary widget = af.getFieldItem(name).getWidget(0); writer.markUsed(widget); fieldLock = widget.getAsDict(PdfName.LOCK); widget.put(PdfName.LOCK, writer.addToBody(this.fieldLock).getIndirectReference()); fieldLock = this.fieldLock; widget.put(PdfName.P, writer.getPageReference(getPage())); widget.put(PdfName.V, refSig); PdfObject obj = PdfReader.getPdfObjectRelease(widget.get(PdfName.F)); sigField.put(PdfName.LOCK, writer.addToBody(this.fieldLock).getIndirectReference()); fieldLock = this.fieldLock; sigField.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, getAppearance()); sigField.setPage(pagen); writer.addAnnotation(sigField, pagen); if (signatureEvent != null) signatureEvent.getSignatureDictionary(cryptoDictionary);
if (annots == null || annots.size() == 0) return; registerReader(fdf, false); IntHashtable hits = new IntHashtable(); HashMap<String, PdfObject> irt = new HashMap<String, PdfObject>(); if (page == null || page.intValue() >= reader.getNumberOfPages()) continue; findAllObjects(fdf, obj, hits); an.add(obj); if (obj.type() == PdfObject.INDIRECT) { addToBody(obj, getNewObjectNumber(fdf, n, 0)); annotsp = new PdfArray(); dic.put(PdfName.ANNOTS, annotsp); markUsed(dic); markUsed(annotsp); annotsp.add(obj);
if (annot.isForm()) { fieldsAdded = true; getAcroFields(); PdfFormField field = (PdfFormField) annot; if (field.getParent() != null) return; expandFields(field, allAnnots); } else allAnnots.add(annot); addDocumentField(field.getIndirectReference()); annots = new PdfArray(); pageN.put(PdfName.ANNOTS, annots); markUsed(pageN); } else annots = (PdfArray) pdfobj; annots.add(annot.getIndirectReference()); markUsed(annots); if (!annot.isUsed()) { PdfRectangle rect = (PdfRectangle) annot.get(PdfName.RECT); addToBody(annot, annot.getIndirectReference());
protected void flatFields() { if (append) throw new IllegalArgumentException(MessageLocalization.getComposedMessage("field.flattening.is.not.supported.in.append.mode")); getAcroFields(); Map<String, Item> fields = acroFields.getFields(); if (fieldsAdded && partialFlattening.isEmpty()) { NumberArray array = new NumberArray(widthCoef, 0, 0, heightCoef, 0, 0); stream.put(PdfName.MATRIX, array); markUsed(stream); PdfContentByte cb = getOverContent(page); cb.setLiteral("Q "); cb.addTemplate(app, box.getLeft(), box.getBottom()); eliminateAcroformObjects();
PageStamp ps = (PageStamp) element; PdfDictionary pageN = ps.pageN; markUsed(pageN); PdfArray ar = null; PdfObject content = PdfReader.getPdfObject(pageN.get(PdfName.CONTENTS), pageN); if (ps.under != null) { out.append(PdfContents.SAVESTATE); applyRotation(pageN, out); out.append(ps.under.getInternalBuffer()); out.append(PdfContents.RESTORESTATE); PdfStream stream = new PdfStream(out.toByteArray()); stream.flateCompress(compressionLevel); ar.addFirst(addToBody(stream).getIndirectReference()); out.reset(); if (ps.over != null) { out.append(buf.getBuffer(), 0, ps.replacePoint); out.append(PdfContents.SAVESTATE); applyRotation(pageN, out); out.append(buf.getBuffer(), ps.replacePoint, buf.size() - ps.replacePoint); out.append(PdfContents.RESTORESTATE); stream = new PdfStream(out.toByteArray()); stream.flateCompress(compressionLevel); ar.add(addToBody(stream).getIndirectReference()); alterResources(ps);
protected void setJavaScript() throws IOException { HashMap<String, PdfObject> djs = pdf.getDocumentLevelJS(); if (djs.isEmpty()) return; PdfDictionary catalog = reader.getCatalog(); PdfDictionary names = (PdfDictionary) PdfReader.getPdfObject(catalog.get(PdfName.NAMES), catalog); if (names == null) { names = new PdfDictionary(); catalog.put(PdfName.NAMES, names); markUsed(catalog); } markUsed(names); PdfDictionary tree = PdfNameTree.writeTree(djs, this); names.put(PdfName.JAVASCRIPT, addToBody(tree).getIndirectReference()); }
void deleteOutlines() { PdfDictionary catalog = reader.getCatalog(); PdfObject obj = catalog.get(PdfName.OUTLINES); if (obj == null) return; if (obj instanceof PRIndirectReference) { PRIndirectReference outlines = (PRIndirectReference) obj; outlineTravel(outlines); PdfReader.killIndirect(outlines); } catalog.remove(PdfName.OUTLINES); markUsed(catalog); }
PdfArray kids = (PdfArray) PdfReader.getPdfObject(parent.get(PdfName.KIDS), parent); kids.add(pref); markUsed(kids); reader.pageRefs.insertPage(pageNumber, pref); } else { markUsed(kids); reader.pageRefs.insertPage(pageNumber, pref); correctAcroFieldPages(pageNumber); markUsed(parent); PdfNumber count = (PdfNumber) PdfReader.getPdfObjectRelease(parent.get(PdfName.COUNT)); parent.put(PdfName.COUNT, new PdfNumber(count.intValue() + 1));
void setThumbnail(Image image, int page) throws PdfException, DocumentException { PdfIndirectReference thumb = getImageReference(addDirectImageSimple(image)); reader.resetReleasePage(); PdfDictionary dic = reader.getPageN(page); dic.put(PdfName.THUMB, thumb); reader.resetReleasePage(); }
/** * Adds an annotation of form field in a specific page. This page number * can be overridden with {@link PdfAnnotation#setPlaceInPage(int)}. * @param annot the annotation * @param page the page */ public void addAnnotation(final PdfAnnotation annot, final int page) { stamper.addAnnotation(annot, page); }
PdfTemplate t = new PdfTemplate(writer); t.setBoundingBox(new Rectangle(0, 0)); writer.addDirectTemplateSimple(t, null); return t; PdfTemplate t = app[1] = new PdfTemplate(writer); t.setBoundingBox(new Rectangle(100, 100)); writer.addDirectTemplateSimple(t, new PdfName("n1")); t.setLiteral(questionMark); PdfTemplate t = app[2] = new PdfTemplate(writer); t.setBoundingBox(rect); writer.addDirectTemplateSimple(t, new PdfName("n2")); if (image != null) { if (imageScale == 0) { PdfTemplate t = app[3] = new PdfTemplate(writer); t.setBoundingBox(new Rectangle(100, 100)); writer.addDirectTemplateSimple(t, new PdfName("n3")); t.setLiteral("% DSBlank\n"); PdfTemplate t = app[4] = new PdfTemplate(writer); t.setBoundingBox(new Rectangle(0, rect.getHeight() * (1 - TOP_SECTION), rect.getRight(), rect.getTop())); writer.addDirectTemplateSimple(t, new PdfName("n4")); Font font; if (layer2Font == null) frm = new PdfTemplate(writer); frm.setBoundingBox(rotated);
/** * Gets the template that aggregates all appearance layers. This corresponds to the /FRM resource. * <p> * Consult <A HREF="http://partners.adobe.com/asn/developer/pdfs/tn/PPKAppearances.pdf">PPKAppearances.pdf</A> * for further details. * @return the template that aggregates all appearance layers */ public PdfTemplate getTopLayer() { if (frm == null) { frm = new PdfTemplate(writer); frm.setBoundingBox(rect); writer.addDirectTemplateSimple(frm, new PdfName("FRM")); } return frm; }
/** * Adds the appropriate developer extension. */ public void addDeveloperExtension(final PdfDeveloperExtension de) { writer.addDeveloperExtension(de); }
/** * Adds the comments present in an FDF file. * @param fdf the FDF file * @throws IOException on error */ public void addComments(final FdfReader fdf) throws IOException { stamper.addComments(fdf); }
setViewerPreferences(); flatFields(); flatFreeTextFields(); flattenAnnotations(); addFieldResources(); 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); if (!flat) { acroFields.getXfa().setXfa(this); if (acroForm != null) { acroForm.put(PdfName.SIGFLAGS, new PdfNumber(sigFlags)); markUsed(acroForm); markUsed(catalog); addSharedObjectsToBody(); setOutlines(); setJavaScript(); addFileAttachments(); fillOCProperties(false); PdfDictionary ocdict = catalog.getAsDict(PdfName.OCPROPERTIES);