Refine search
public PdfMetaInformation(final File source) throws IOException { PdfReader reader = new PdfReader(source.getAbsolutePath()); this.sourcePageCount = reader.getNumberOfPages(); this.sourceMetaInfo = reader.getInfo(); this.sourceBookmarks = SimpleBookmark.getBookmark(reader); reader.close(); }
/** * Sets the display duration for the page (for presentations) * * @param seconds the number of seconds to display the page. A negative value removes the entry * @param page the page where the duration will be applied. The first page is 1 */ void setDuration(int seconds, int page) { PdfDictionary pg = reader.getPageN(page); if (seconds < 0) pg.remove(PdfName.DUR); else pg.put(PdfName.DUR, new PdfNumber(seconds)); markUsed(pg); }
public String compareXmp(String outPdf, String cmpPdf, boolean ignoreDateAndProducerProperties) { init(outPdf, cmpPdf); PdfReader cmpReader = null; PdfReader outReader = null; try { cmpReader = new PdfReader(this.cmpPdf); outReader = new PdfReader(this.outPdf); byte[] cmpBytes = cmpReader.getMetadata(), outBytes = outReader.getMetadata(); return compareXmp(cmpBytes, outBytes, ignoreDateAndProducerProperties); } catch (IOException e) { return "XMP parsing failure!"; } finally { if (cmpReader != null) cmpReader.close(); if (outReader != null) outReader.close(); } }
/** * Retrieve the given page's resource dictionary * @param pageNum 1-based page number from which to retrieve the resource dictionary * @return The page's resources, or 'null' if the page has none. * @since 5.1 */ public PdfDictionary getPageResources(final int pageNum) { return getPageResources(getPageN(pageNum)); }
private static boolean isPasswordRequired(final File file) throws IOException { PdfReader reader = new PdfReader(file.getAbsolutePath()); boolean isEncrypted = reader.isEncrypted(); reader.close(); return isEncrypted; }
PdfDictionary acroForm = reader.getCatalog().getAsDict(PdfName.ACROFORM); PdfArray acroFds = null; if (acroForm != null) { acroFds = (PdfArray) PdfReader.getPdfObject(acroForm.get(PdfName.FIELDS), acroForm); PdfAppearance app = null; if (obj != null) { PdfObject objReal = PdfReader.getPdfObject(obj); if (obj instanceof PdfIndirectReference && !obj.isIndirect()) app = new PdfAppearance((PdfIndirectReference) obj); else if (objReal instanceof PdfStream) { app = new PdfAppearance(iref); if (iref.isIndirect()) { objReal = PdfReader.getPdfObject(iref); Rectangle box = PdfReader.getNormalizedRectangle(merged.getAsArray(PdfName.RECT)); PdfContentByte cb = getOverContent(page); cb.setLiteral("Q "); PdfDictionary pageDic = reader.getPageN(page); PRIndirectReference wdref = (PRIndirectReference) ran2; while (true) { PdfDictionary wd = (PdfDictionary) PdfReader.getPdfObject(wdref); PRIndirectReference parentRef = (PRIndirectReference) wd.get(PdfName.PARENT); PdfReader.killIndirect(wdref); PdfDictionary parent = (PdfDictionary) PdfReader.getPdfObject(parentRef);
for (int page = 1; page <= reader.getNumberOfPages(); ++page) { PdfDictionary pageDic = reader.getPageN(page); PdfArray annots = pageDic.getAsArray(PdfName.ANNOTS); if ((annDic.get(PdfName.SUBTYPE)).equals(PdfName.WIDGET)) { int flags = ff != null ? ff.intValue() : 0; continue; PdfDictionary appDic = obj1 instanceof PdfIndirectReference ? (PdfDictionary) PdfReader.getPdfObject(obj1) : (PdfDictionary) obj1; PdfAppearance app = null; PdfObject objReal = PdfReader.getPdfObject(obj); app = new PdfAppearance(iref); if (iref.isIndirect()) { objReal = PdfReader.getPdfObject(iref); Rectangle rect = PdfReader.getNormalizedRectangle(annDic.getAsArray(PdfName.RECT)); Rectangle bBox = PdfReader.getNormalizedRectangle((objDict.getAsArray(PdfName.BBOX))); PdfContentByte cb = getOverContent(page); !Arrays.equals(DEFAULT_MATRIX, objDict.getAsArray(PdfName.MATRIX).asDoubleArray())) { PdfReader.killIndirect(pageDic.get(PdfName.ANNOTS));
HashMap<String, PdfObject> irt = new HashMap<String, PdfObject>(); ArrayList<PdfObject> an = new ArrayList<PdfObject>(); for (int k = 0; k < annots.size(); ++k) { PdfObject obj = annots.getPdfObject(k); PdfDictionary annot = (PdfDictionary) PdfReader.getPdfObject(obj); PdfNumber page = annot.getAsNumber(PdfName.PAGE); if (page == null || page.intValue() >= reader.getNumberOfPages()) continue; findAllObjects(fdf, obj, hits); an.add(obj); if (obj.type() == PdfObject.INDIRECT) { PdfObject nm = PdfReader.getPdfObject(annot.get(PdfName.NM)); if (nm != null && nm.type() == PdfObject.STRING) irt.put(nm.toString(), obj); PdfObject str = PdfReader.getPdfObject(((PdfDictionary) obj).get(PdfName.IRT)); PdfDictionary annot = (PdfDictionary) PdfReader.getPdfObject(obj); PdfNumber page = annot.getAsNumber(PdfName.PAGE); PdfDictionary dic = reader.getPageN(page.intValue() + 1); PdfArray annotsp = (PdfArray) PdfReader.getPdfObject(dic.get(PdfName.ANNOTS), dic);
void insertPage(int pageNumber, Rectangle mediabox) { Rectangle media = new Rectangle(mediabox); int rotation = media.getRotation() % 360; PdfDictionary page = new PdfDictionary(PdfName.PAGE); page.put(PdfName.RESOURCES, new PdfDictionary()); page.put(PdfName.ROTATE, new PdfNumber(rotation)); page.put(PdfName.MEDIABOX, new PdfRectangle(media, rotation)); PRIndirectReference pref = reader.addPdfObject(page); PdfDictionary parent; PRIndirectReference parentRef; if (pageNumber > reader.getNumberOfPages()) { PdfDictionary lastPage = reader.getPageNRelease(reader.getNumberOfPages()); parent = (PdfDictionary) PdfReader.getPdfObject(parentRef); PdfArray kids = (PdfArray) PdfReader.getPdfObject(parent.get(PdfName.KIDS), parent); kids.add(pref); markUsed(kids); reader.pageRefs.insertPage(pageNumber, pref); if (pageNumber < 1) pageNumber = 1; PdfDictionary firstPage = reader.getPageN(pageNumber); PRIndirectReference firstPageRef = reader.getPageOrigRef(pageNumber); reader.releasePage(pageNumber); parent = (PdfDictionary) PdfReader.getPdfObject(parentRef); PdfArray kids = (PdfArray) PdfReader.getPdfObject(parent.get(PdfName.KIDS), parent); int len = kids.size(); int num = firstPageRef.getNumber(); for (int k = 0; k < len; ++k) {
throw new IllegalArgumentException(MessageLocalization.getComposedMessage("document.1.has.already.been.added", reader.toString())); if (!reader.isOpenedWithFullPermissions()) throw new BadPasswordException(MessageLocalization.getComposedMessage("pdfreader.not.opened.with.owner.password")); if (mergeFields) { reader.consolidateNamedDestinations(); reader.shuffleSubsetNames(); for (int i = 1; i <= reader.getNumberOfPages(); i++) { PdfDictionary page = reader.getPageNRelease(i); if (page != null && page.contains(PdfName.ANNOTS)) { PdfArray annots = page.getAsArray(PdfName.ANNOTS); if (annots != null) { for (int j = 0; j < annots.size(); j++) { PdfDictionary annot = annots.getAsDict(j); if (annot != null) annot.put(annotId, new PdfNumber(++annotIdCnt)); AcroFields acro = reader.getAcroFields(); for (int i = 1; i <= reader.getNumberOfPages(); i++) { addPage(getImportedPage(reader, i, tagged));
private static void extractMetadata( PdfReader reader, Metadata metadata ) { try { HashMap<String, String> map = reader.getInfo(); metadata.set("pdf:version", "1."+reader.getPdfVersion()); metadata.set("pdf:numPages", ""+reader.getNumberOfPages()); metadata.set("pdf:cryptoMode", ""+getCryptoModeAsString(reader)); metadata.set("pdf:openedWithFullPermissions", ""+reader.isOpenedWithFullPermissions()); metadata.set("pdf:encrypted", ""+reader.isEncrypted()); metadata.set("pdf:metadataEncrypted", ""+reader.isMetadataEncrypted()); metadata.set("pdf:128key", ""+reader.is128Key()); metadata.set("pdf:tampered", ""+reader.isTampered()); byte[] xmpmd = reader.getMetadata(); if( xmpmd != null ) { PdfDictionary extensions = reader.getCatalog().getAsDict(PdfName.EXTENSIONS); if( extensions != null ) { PdfDictionary adobeExt = extensions.getAsDict(PdfName.ADBE); if( adobeExt != null ) { PdfName baseVersion = adobeExt.getAsName(PdfName.BASEVERSION); int el = adobeExt.getAsNumber(PdfName.EXTENSIONLEVEL).intValue(); metadata.set("pdf:version", baseVersion.toString().substring(1)+" Adobe Extension Level "+el );
PdfObject pdfobj = PdfReader.getPdfObject(pageN.get(PdfName.ANNOTS), pageN); PdfArray annots = null; if (pdfobj == null || !pdfobj.isArray()) { annots = new PdfArray(); pageN.put(PdfName.ANNOTS, annots); annots.add(annot.getIndirectReference()); if (!annot.isUsed()) { PdfRectangle rect = (PdfRectangle)annot.get(PdfName.RECT); if (rect != null && (rect.left() != 0 || rect.right() != 0 || rect.top() != 0 || rect.bottom() != 0)) { int rotation = reader.getPageRotation(pageN); Rectangle pageSize = reader.getPageSizeWithRotation(pageN); switch (rotation) { case 90:
final DataSetChanged dataSetChanged) { try { PdfReader reader = new PdfReader(sourceFilePath); int n = reader.getNumberOfPages(); PdfDictionary page; PdfNumber rotate; for (int p = 1; p <= n; p++) { page = reader.getPageN(p); rotate = page.getAsNumber(PdfName.ROTATE); if (rotate == null) page.put(PdfName.ROTATE, new PdfNumber(angle)); else page.put(PdfName.ROTATE, new PdfNumber((rotate.intValue() + angle) % 360)); reader.close(); showSnackbar(mContext, R.string.snackbar_pdfCreated); dataSetChanged.updateDataset();
private static void cropMultipliedFile(File source, CropJob cropJob) throws FileNotFoundException, DocumentException, IOException { PdfReader reader = new PdfReader(source.getAbsolutePath()); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream( cropJob.getDestinationFile())); pageDict = reader.getPageN(newPageNumber); boxes.add(reader.getBoxSize(newPageNumber, "media")); boxes.add(reader.getBoxSize(newPageNumber, "crop")); int rotation = reader.getPageRotation(newPageNumber); PdfArray scaleBoxArray = new PdfArray(); scaleBoxArray.add(new PdfNumber(scaledBox.getLeft())); scaleBoxArray.add(new PdfNumber(scaledBox.getBottom())); scaleBoxArray.add(new PdfNumber(scaledBox.getRight())); scaleBoxArray.add(new PdfNumber(scaledBox.getTop())); pageDict.put(PdfName.CROPBOX, scaleBoxArray); pageDict.put(PdfName.MEDIABOX, scaleBoxArray); reader.close();
try { PdfReader reader = new PdfReader(inputPath); int n = reader.getXrefSize(); PdfObject object; PRStream stream; object = reader.getPdfObject(i); if (object == null || !object.isStream()) continue; stream = (PRStream) object; PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE); System.out.println(stream.type()); if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) { PdfImageObject image = new PdfImageObject(stream); byte[] imageBytes = image.getImageAsBytes(); reader.removeUnusedObjects(); reader.close(); success = true; } catch (IOException | DocumentException e) {
if (!reader.isOpenedWithFullPermissions()) throw new BadPasswordException(MessageLocalization.getComposedMessage("pdfreader.not.opened.with.owner.password")); if (reader.isTampered()) throw new DocumentException(MessageLocalization.getComposedMessage("the.original.document.was.reused.read.it.again.from.file")); reader.setTampered(true); this.reader = reader; file = reader.getSafeFile(); this.append = append; if (reader.isEncrypted() && (append || PdfReader.unethicalreading)) { crypto = new PdfEncryption(reader.getDecrypt()); if (reader.isRebuilt()) throw new DocumentException(MessageLocalization.getComposedMessage("append.mode.requires.a.document.without.errors.even.if.recovery.was.possible")); pdf_version.setAppendmode(true); if ( pdfVersion == 0 ) { pdf_version.setPdfVersion(reader.getPdfVersion()); } else { pdf_version.setPdfVersion(pdfVersion); while ((n = file.read(buf)) > 0) this.os.write(buf, 0, n); prevxref = reader.getLastXref(); reader.setAppendable(true); } else { if (pdfVersion == 0) super.setPdfVersion(reader.getPdfVersion()); else super.setPdfVersion(pdfVersion);
void addDocument(PdfReader reader, List<Integer> pagesToKeep) throws DocumentException, IOException { if (!readers2intrefs.containsKey(reader) && reader.isTampered()) throw new DocumentException(MessageLocalization.getComposedMessage("the.document.was.reused")); reader = new PdfReader(reader); reader.selectPages(pagesToKeep); if (reader.getNumberOfPages() == 0) return; reader.setTampered(false); addDocument(reader); }
return null; try { PdfName sub = v.getAsName(PdfName.SUBFILTER); PdfString contents = v.getAsString(PdfName.CONTENTS); PdfPKCS7 pk = null; if (sub.equals(PdfName.ADBE_X509_RSA_SHA1)) { PdfString cert = v.getAsString(PdfName.CERT); if (cert == null) cert = v.getAsArray(PdfName.CERT).getAsString(0); if(!reader.isEncrypted()) { pk = new PdfPKCS7(contents.getOriginalBytes(), cert.getBytes(), provider); }else{ if(!reader.isEncrypted()){ pk = new PdfPKCS7(contents.getOriginalBytes(), sub, provider); }else{ if (str != null) pk.setSignDate(PdfDate.decode(str.toString())); PdfObject obj = PdfReader.getPdfObject(v.get(PdfName.NAME)); if (obj != null) { if (obj.isString()) pk.setSignName(((PdfString)obj).toUnicodeString()); else if(obj.isName()) pk.setSignName(PdfName.decodeName(obj.toString())); str = v.getAsString(PdfName.REASON);
/** * Sets the open and close page additional action. * * @param actionType the action type. It can be <CODE>PdfWriter.PAGE_OPEN</CODE> * or <CODE>PdfWriter.PAGE_CLOSE</CODE> * @param action the action to perform * @param page the page where the action will be applied. The first page is 1 * @throws PdfException if the action type is invalid */ void setPageAction(PdfName actionType, PdfAction action, int page) throws PdfException { if (!actionType.equals(PAGE_OPEN) && !actionType.equals(PAGE_CLOSE)) throw new PdfException(MessageLocalization.getComposedMessage("invalid.page.additional.action.type.1", actionType.toString())); PdfDictionary pg = reader.getPageN(page); PdfDictionary aa = (PdfDictionary) PdfReader.getPdfObject(pg.get(PdfName.AA), pg); if (aa == null) { aa = new PdfDictionary(); pg.put(PdfName.AA, aa); markUsed(pg); } aa.put(actionType, action); markUsed(aa); }
public static HashMap<String, String> 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<String, PdfObject> names = fromNames ? reader.getNamedDestinationFromNames() : reader.getNamedDestinationFromStrings(); HashMap<String, String> n2 = new HashMap<String, String>(names.size()); for (Map.Entry<String, PdfObject> entry: names.entrySet()) { PdfArray arr = (PdfArray)entry.getValue(); StringBuffer s = new StringBuffer(); try { s.append(pages.get(arr.getAsIndirectObject(0).getNumber())); s.append(' ').append(arr.getPdfObject(1).toString().substring(1)); for (int k = 2; k < arr.size(); ++k) s.append(' ').append(arr.getPdfObject(k).toString()); n2.put(entry.getKey(), s.toString()); } catch (Exception e) { } } return n2; }