List of usage examples for com.itextpdf.text.pdf PdfReader PdfReader
public PdfReader(final PdfReader reader)
From source file:org.gmdev.pdftrick.utils.CustomExtraImgReader.java
License:Open Source License
/** * Read a png image with if all other method fails * @param ref/*from w ww . j a v a2 s.c om*/ * @param resultFile * @return The BufferedImage obj * @throws IOException * @throws ImageReadException */ public static BufferedImage readIndexedPNG(int ref, String resultFile) throws IOException, ImageReadException { PdfReader reader = new PdfReader(resultFile); PRStream stream = (PRStream) reader.getPdfObject(ref); PdfDictionary dic = stream; byte[] content = PdfReader.getStreamBytesRaw(stream); int width = dic.getAsNumber(PdfName.WIDTH).intValue(); int height = dic.getAsNumber(PdfName.HEIGHT).intValue(); int pngBitDepth = dic.getAsNumber(PdfName.BITSPERCOMPONENT).intValue(); PdfObject colorspace = dic.getDirectObject(PdfName.COLORSPACE); PdfArray decode = dic.getAsArray(PdfName.DECODE); PdfArray carray = (PdfArray) colorspace; PdfObject id2 = carray.getDirectObject(3); byte[] palette = null; if (id2 instanceof PdfString) { palette = ((PdfString) id2).getBytes(); } else if (id2 instanceof PRStream) { palette = PdfReader.getStreamBytes(((PRStream) id2)); } Map<PdfName, FilterHandlers.FilterHandler> handlers = new HashMap<PdfName, FilterHandlers.FilterHandler>( FilterHandlers.getDefaultFilterHandlers()); byte[] imageBytes = PdfReader.decodeBytes(content, dic, handlers); int stride = (width * pngBitDepth + 7) / 8; ByteArrayOutputStream ms = new ByteArrayOutputStream(); PngWriter png = new PngWriter(ms); if (decode != null) { if (pngBitDepth == 1) { // if the decode array is 1,0, then we need to invert the image if (decode.getAsNumber(0).intValue() == 1 && decode.getAsNumber(1).intValue() == 0) { int len = imageBytes.length; for (int t = 0; t < len; ++t) { imageBytes[t] ^= 0xff; } } else { // if the decode array is 0,1, do nothing. It's possible that the array could be 0,0 or 1,1 - but that would be silly, so we'll just ignore that case } } else { // todo: add decode transformation for other depths } } int pngColorType = 0; png.writeHeader(width, height, pngBitDepth, pngColorType); if (palette != null) { png.writePalette(palette); } png.writeData(imageBytes, stride); png.writeEnd(); imageBytes = ms.toByteArray(); InputStream in = new ByteArrayInputStream(imageBytes); ImageInputStream ima_stream = ImageIO.createImageInputStream(in); BufferedImage buffImg = null; BufferedImage buffPic = ImageIO.read(ima_stream); // check if image contains a mask image ... experimental for this type of image BufferedImage buffMask = null; PRStream maskStream = (PRStream) dic.getAsStream(PdfName.SMASK); if (maskStream != null) { PdfImageObject maskImage = new PdfImageObject(maskStream); buffMask = maskImage.getBufferedImage(); Image img = PdfTrickUtils.TransformGrayToTransparency(buffMask); buffImg = PdfTrickUtils.ApplyTransparency(buffPic, img); } else { buffImg = buffPic; } reader.close(); ms.close(); in.close(); return buffImg; }
From source file:org.h819.commons.file.MyPDFUtils.java
/** * pdf ? pdf// w w w. j a v a 2s . com * * @param srcPdf the original PDF * @param destPdf the resulting PDF * @param imageFactor The multiplication factor for the image (? imageFacto =0.5f) * @throws IOException * @throws DocumentException */ public static void compressPdf(File srcPdf, File destPdf, float imageFactor) throws IOException, DocumentException { PdfReader reader = new PdfReader(srcPdf.getAbsolutePath()); int n = reader.getXrefSize(); PdfObject object; PRStream stream; // Look for image and manipulate image stream for (int i = 0; i < n; i++) { object = reader.getPdfObject(i); if (object == null || !object.isStream()) continue; stream = (PRStream) object; if (!PdfName.IMAGE.equals(stream.getAsName(PdfName.SUBTYPE))) continue; if (!PdfName.DCTDECODE.equals(stream.getAsName(PdfName.FILTER))) continue; PdfImageObject image = new PdfImageObject(stream); BufferedImage bi = image.getBufferedImage(); if (bi == null) continue; int width = (int) (bi.getWidth() * imageFactor); int height = (int) (bi.getHeight() * imageFactor); if (width <= 0 || height <= 0) continue; BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); AffineTransform at = AffineTransform.getScaleInstance(imageFactor, imageFactor); Graphics2D g = img.createGraphics(); g.drawRenderedImage(bi, at); ByteArrayOutputStream imgBytes = new ByteArrayOutputStream(); ImageIO.write(img, "JPG", imgBytes); stream.clear(); stream.setData(imgBytes.toByteArray(), false, PRStream.NO_COMPRESSION); stream.put(PdfName.TYPE, PdfName.XOBJECT); stream.put(PdfName.SUBTYPE, PdfName.IMAGE); stream.put(PdfName.FILTER, PdfName.DCTDECODE); stream.put(PdfName.WIDTH, new PdfNumber(width)); stream.put(PdfName.HEIGHT, new PdfNumber(height)); stream.put(PdfName.BITSPERCOMPONENT, new PdfNumber(8)); stream.put(PdfName.COLORSPACE, PdfName.DEVICERGB); } reader.removeUnusedObjects(); // Save altered PDF PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destPdf.getAbsolutePath())); stamper.setFullCompression(); stamper.close(); reader.close(); }
From source file:org.jfree.chart.swt.ChartPdf.java
License:Open Source License
public static void saveChartAsPDF(File file, JFreeChart chart, int width, int height) throws DocumentException, FileNotFoundException, IOException { if (chart != null) { boolean success = false; String old = null;//from w w w.j a va2 s .c om File oldFile = null; boolean append = file.exists(); if (append) { old = file.getAbsolutePath() + ".old"; //$NON-NLS-1$ oldFile = new File(old); oldFile.delete(); file.renameTo(oldFile); } try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file))) { // convert chart to PDF with iText: Rectangle pagesize = new Rectangle(width, height); if (append) { PdfReader reader = new PdfReader(old); PdfStamper stamper = new PdfStamper(reader, out); try { int n = reader.getNumberOfPages() + 1; stamper.insertPage(n, pagesize); PdfContentByte overContent = stamper.getOverContent(n); writeChart(chart, width, height, overContent); ColumnText ct = new ColumnText(overContent); ct.setSimpleColumn(width - 50, 50, width - 12, height, 150, Element.ALIGN_RIGHT); Paragraph paragraph = new Paragraph(String.valueOf(n), new Font(FontFamily.HELVETICA, 9, Font.NORMAL, BaseColor.DARK_GRAY)); paragraph.setAlignment(Element.ALIGN_RIGHT); ct.addElement(paragraph); ct.go(); success = true; } finally { stamper.close(); reader.close(); oldFile.delete(); } } else { Document document = new Document(pagesize, 50, 50, 50, 50); document.addCreationDate(); document.addCreator(Constants.APPLICATION_NAME); document.addAuthor(System.getProperty("user.name")); //$NON-NLS-1$ try { PdfWriter writer = PdfWriter.getInstance(document, out); document.open(); writeChart(chart, width, height, writer.getDirectContent()); success = true; } finally { document.close(); } } } if (!success) { file.delete(); if (oldFile != null) oldFile.renameTo(file); } } }
From source file:org.jrimum.bopepo.excludes.PDFs.java
License:Apache License
public static Map<String, Collection<BufferedImage>> getImages(byte[] pdf) throws IOException { PdfReader reader = new PdfReader(pdf); PdfReaderContentParser parser = new PdfReaderContentParser(reader); ImageRenderListener listener = new ImageRenderListener(); for (int i = 1; i <= reader.getNumberOfPages(); i++) { parser.processContent(i, listener); }/*from ww w. jav a 2 s . c om*/ reader.close(); return listener.getImages(); }
From source file:org.karsha.document.PDFBookmark.java
License:Open Source License
public LinkedHashMap splitPDFByBookmarks(byte[] pdf) { try {//from www.ja v a 2 s . c o m PdfReader reader = new PdfReader(pdf); //List of bookmarks: each bookmark is a map with values for title, page, etc List<HashMap<String, Object>> bookmarks = SimpleBookmark.getBookmark(reader); for (int i = 0; i < bookmarks.size(); i++) { HashMap bm = bookmarks.get(i); HashMap nextBM = i == bookmarks.size() - 1 ? null : bookmarks.get(i + 1); HashMap previBM; if (i == 0) { previBM = bookmarks.get(i); } else { previBM = bookmarks.get(i - 1); } //String title = ((String) bm.get("Title")).split(" ")[1]; //get only the up to 2nd word if ((String) bm.get("Title") != null && (String) bm.get("Page") != null) { String title = ((String) bm.get("Title")); // log.debug("Titel: " + title); // System.out.println((String) bm.get("Page")); String startPage = ((String) bm.get("Page")).split(" ")[0]; //String startPage = ((String) bm.get("Page")); String startPageNextBM = nextBM == null ? "" + (reader.getNumberOfPages() + 1) : ((String) nextBM.get("Page")).split(" ")[0]; //log.debug("Page: " + startPage); // log.debug("------------------"); parsePdf(reader, title, ((String) previBM.get("Title")), Integer.valueOf(startPage), Integer.valueOf(startPageNextBM)); // extractBookmarkToPDF(reader, Integer.valueOf(startPage), Integer.valueOf(startPageNextBM), title + ".pdf", outputFolder); } } } catch (IOException e) { //log.error(e.getMessage()); } return docsSeperated; }
From source file:org.la3.pdfunlock.PdfUnlock.java
License:BSD License
private void launch(String[] args) throws Exception { parseOptions(args);/* www.j a v a2 s .c om*/ System.err.println("Unlocking " + lockedFile + " to " + unlockedFile); PdfReader reader; if (password == null) { reader = new PdfReader(lockedFile); } else { reader = new PdfReader(lockedFile, password.getBytes()); } PdfEncryptor.encrypt(reader, new FileOutputStream(unlockedFile), null, null, PdfWriter.ALLOW_ASSEMBLY | PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_DEGRADED_PRINTING | PdfWriter.ALLOW_FILL_IN | PdfWriter.ALLOW_MODIFY_ANNOTATIONS | PdfWriter.ALLOW_MODIFY_CONTENTS | PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_SCREENREADERS, false); System.err.println("PDF Unlocked successfully!"); System.exit(0); }
From source file:org.mortagne.budget.internal.transaction.io.lcl.pdf.LCLPDFTransactionReader.java
License:Open Source License
public void open() throws IOException { close();//from w w w . ja v a 2 s. co m List<DefaultTransaction> transactions = new ArrayList<DefaultTransaction>(); // Parse transactions PdfReader reader = new PdfReader(this.transationStream); int nb = reader.getNumberOfPages(); double currentTotal; try { LCLLocationTextExtractionStrategy strategy = parsePage(reader, 1, transactions, null); currentTotal = strategy.getPreviousTotal(); for (int i = 2; i <= nb; ++i) { strategy = parsePage(reader, i, transactions, strategy.getLastType()); } } finally { reader.close(); } // Order transactions Collections.sort(transactions, new Comparator<DefaultTransaction>() { public int compare(DefaultTransaction t1, DefaultTransaction t2) { return t1.getRealDate().compareTo(t2.getRealDate()); } }); // Set total Date currentDate = null; for (DefaultTransaction transaction : transactions) { // total currentTotal += transaction.getValue(); transaction.setTotal(currentTotal); // date if (!transaction.getRealDate().equals(currentDate)) { currentDate = transaction.getDate(); } } // Iterator this.it = transactions.iterator(); }
From source file:org.opencps.pki.PdfSigner.java
License:Open Source License
/** * Compute digest hash/*from ww w. j ava 2 s .com*/ */ protected byte[] computeDigest(float llx, float lly, float urx, float ury) throws SignatureException { byte digestHash[] = null; int contentEstimated = 8192; try { PdfReader reader = new PdfReader(getOriginFilePath()); FileOutputStream os = new FileOutputStream(getTempFilePath()); PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0'); PdfSignatureAppearance appearance = stamper.getSignatureAppearance(); signatureFieldName = appearance.getNewSigName(); TSAClient tsaClient = null; appearance.setCertificate(getCertificate()); String tsaUrl = CertificateUtil.getTSAURL(getCertificate()); if (tsaUrl != null) { tsaClient = new TSAClientBouncyCastle(tsaUrl); } if (tsaClient != null) { LtvTimestamp.timestamp(appearance, tsaClient, signatureFieldName); contentEstimated += 4096; } appearance.setSignDate(signDate); CertificateInfo certInfo = new CertificateInfo(getCertificate()); appearance.setLocation(certInfo.getOrganizationUnit()); appearance.setReason("Document is signed by " + certInfo.getCommonName()); appearance.setContact(certInfo.getCommonName()); if (!isVisible) { appearance.setVisibleSignature(new Rectangle(0, 0, 0, 0), 1, signatureFieldName); } else { if (signatureImage != null) { appearance.setSignatureGraphic(signatureImage.getImage()); appearance.setRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC); } else { appearance.setLayer2Text(certInfo.getCommonName()); } appearance.setVisibleSignature(new Rectangle(llx, lly, urx, ury), 1, signatureFieldName); } ExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED); MakeSignature.signExternalContainer(appearance, external, contentEstimated); digestHash = DigestAlgorithms.digest(appearance.getRangeStream(), digest.getMessageDigest(getHashAlgorithm().toString())); reader.close(); os.close(); } catch (Exception e) { throw new SignatureException(e.getMessage(), e); } return digestHash; }
From source file:org.opencps.pki.PdfSigner.java
License:Open Source License
/** * Sign document with external signature container *///from w w w .java 2 s. c o m protected Boolean signExternal(ExternalSignatureContainer container, String filePath) throws SignatureException { if (signatureFieldName == null || signatureFieldName.length() == 0) { throw new SignatureException("You must set signature field name before sign the document"); } Boolean signed = false; try { OutputStream os = new FileOutputStream(getSignedFilePath()); PdfReader reader = new PdfReader(filePath); if (!reader.isEncrypted()) { MakeSignature.signDeferred(reader, signatureFieldName, os, container); reader.close(); os.close(); signed = true; } } catch (Exception e) { throw new SignatureException(e.getMessage(), e); } return signed; }
From source file:org.opencps.pki.PdfVerifier.java
License:Open Source License
/** * (non-Javadoc)//w w w .j a v a 2 s . c o m * @see org.opencps.pki.Verifier#getSignatureInfo() */ public List<SignatureInfo> getSignatureInfo(InputStream inputStream) { List<SignatureInfo> list = new ArrayList<SignatureInfo>(); try { PdfReader reader = new PdfReader(inputStream); AcroFields fields = reader.getAcroFields(); ArrayList<String> names = fields.getSignatureNames(); for (String name : names) { PdfPKCS7 pkcs7 = fields.verifySignature(name); list.add(new PdfSignatureInfo(pkcs7)); } } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } return list; }