List of usage examples for com.itextpdf.text.pdf PdfReader close
public void close()
From source file:org.gmdev.pdftrick.engine.CheckFiles.java
License:Open Source License
/** * method that check is single pdf has a User password protected, set userProtection = true if BadPasswordException; * @param File//w w w .j a va 2s . c o m */ private void hasProtection(File file) { PdfReader reader = null; try { reader = new PdfReader(file.getPath()); if (reader != null) { if (reader.isEncrypted()) { ownerProtection = true; } reader.close(); } } catch (BadPasswordException e) { userProtection = true; } catch (IOException e) { logger.error("Exception", e); PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG); } }
From source file:org.gmdev.pdftrick.engine.ImagesExtractor.java
License:Open Source License
/** * // ww w . j a va 2s.c o m * @param timeDirResult * @param resultFilePath * @param imageSelected * @param inlineImgSelected * @return TRUE if the extraction went good */ private boolean extractImgSel(String timeDirResult, String resultFilePath, HashMap<String, RenderedImageAttributes> imageSelected, HashMap<String, RenderedImageAttributes> inlineImgSelected) { final Properties messages = factory.getMessages(); String result = timeDirResult + "/" + "Img_%s.%s"; PdfReader reader = null; boolean retExtract = true; try { reader = new PdfReader(resultFilePath); Set<String> keys = imageSelected.keySet(); Iterator<String> i = keys.iterator(); int z = 1; while (i.hasNext()) { BufferedImage buff = null; String key = i.next(); RenderedImageAttributes imgAttr = imageSelected.get(key); String flip = imgAttr.getFlip(); String rotate = imgAttr.getRotate(); int ref = imgAttr.getReference(); PdfObject o = reader.getPdfObject(ref); PdfStream stream = (PdfStream) o; PdfImageObject io = null; try { io = new PdfImageObject((PRStream) stream); } catch (UnsupportedPdfException updfe) { try { buff = CustomExtraImgReader.readIndexedPNG(ref, resultFilePath); buff = PdfTrickUtils.adjustImage(buff, flip, rotate); String type = "png"; String filename = String.format(result, z, type); File outputfile = new File(filename); ImageIO.write(buff, type, outputfile); } catch (Exception e) { logger.error("Exception", e); PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG); } } if (io != null) { String type = io.getFileType(); String filename = String.format(result, z, type); BufferedImage buffPic = null; try { if (type.equalsIgnoreCase("JBIG2")) { buffPic = CustomExtraImgReader.readJBIG2(io); } else { buffPic = io.getBufferedImage(); } } catch (IIOException e) { byte[] imageByteArray = io.getImageAsBytes(); try { buffPic = CustomExtraImgReader.readCMYK_JPG(imageByteArray); } catch (Exception ex) { logger.error("Exception", e); PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG); } } // check if image contains a mask image BufferedImage buffMask = null; PdfDictionary imageDictionary = io.getDictionary(); PRStream maskStream = (PRStream) imageDictionary.getAsStream(PdfName.SMASK); if (maskStream != null) { // i have an smask object i check that is not a jpeg format, because this may cause some problem on offscreen rendering // usually all imges with mask are png ... and there aren't problem, if image is jpg i discard the mask :) if (!type.equalsIgnoreCase("jpg")) { PdfImageObject maskImage = new PdfImageObject(maskStream); buffMask = maskImage.getBufferedImage(); Image img = PdfTrickUtils.TransformGrayToTransparency(buffMask); buff = PdfTrickUtils.ApplyTransparency(buffPic, img); } else { buff = buffPic; } } else { buff = buffPic; } if (buff != null) { buff = PdfTrickUtils.adjustImage(buff, flip, rotate); //particular cases of encoding String encode = ""; if (type.equalsIgnoreCase("jp2")) { encode = "jpeg 2000"; } else if (type.equalsIgnoreCase("jbig2")) { encode = "jpeg"; filename = String.format(result, z, "jpg"); } else { encode = type; } File outputfile = new File(filename); ImageIO.write(buff, encode, outputfile); } } z++; } reader.close(); if (inlineImgSelected.size() > 0) { extractInlineImgSel(timeDirResult, inlineImgSelected, z); } PdfTrickMessages.append("INFO", messages.getProperty("tmsg_19")); } catch (Exception e) { logger.error("Exception", e); PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG); retExtract = false; } return retExtract; }
From source file:org.gmdev.pdftrick.render.PdfRenderLeft.java
License:Open Source License
/** * Render pdf resultfile thumbs in a left_panel, using threads pool *///ww w . j a v a2 s. co m public void pdfRender() { String imgPath = PdfTrickUtils.createImgFolder(); int totPages = 0; // get the page number of the new generated pdf try { PdfReader reader = new PdfReader(factory.getResultFile()); totPages = reader.getNumberOfPages(); factory.setNumPages(totPages); reader.close(); } catch (Exception e) { logger.error("Exception", e); PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG); } // system of thread that call native function and renderizing pdf cover in png images boolean runPool = true; int division = totPages / 3; if (totPages < 3) { runPool = false; division = totPages; } DivisionThumb divisionThumbs = new DivisionThumb(division, imgPath); factory.gettContainer().setDivisionThumbs(divisionThumbs); Thread divisionThumbsThread = new Thread(divisionThumbs, "divisionThumbsThread"); factory.gettContainer().setDivisionThumbsThread(divisionThumbsThread); divisionThumbsThread.start(); if (runPool) { ExecPool execPool = new ExecPool(totPages, division, imgPath); factory.gettContainer().setExecPool(execPool); Thread execPoolThread = new Thread(execPool, "execPoolThread"); factory.gettContainer().setExecPoolThread(execPoolThread); execPoolThread.start(); } // thread that search and showing thumbnails ShowThumbs showThumbs = new ShowThumbs(); factory.gettContainer().setShowThumbs(showThumbs); Thread showThumbsThread = new Thread(showThumbs, "showThumbsThread"); factory.gettContainer().setShowThumbsThread(showThumbsThread); showThumbsThread.start(); }
From source file:org.gmdev.pdftrick.thread.ImgThumb.java
License:Open Source License
/** * Render img thumbs contained in a page *//*from w w w. j ava 2s .co m*/ public void execute() { final Properties messages = factory.getMessages(); final JPanel centerPanel = factory.getUserInterface().getCenter().getCenterPanel(); SwingUtilities.invokeLater(new ManagePanelWait("thumb", "thumb_show")); try { PdfReader reader = null; ImageListenerShowThumb listener = null; reader = new PdfReader(factory.getResultFile()); PdfReaderContentParser parser = new PdfReaderContentParser(reader); listener = new ImageListenerShowThumb(numberPage); parser.processContent(numberPage, listener); reader.close(); String infoUnsupported = ""; String infoAvailable = ""; if (listener.getUnsupportedImage() > 0) { infoUnsupported = MessageFormat.format(messages.getProperty("dmsg_02"), numberPage); } if (listener.getNumImg() == 0) { final String noImgTitle = messages.getProperty("jmsg_08"); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JLabel noImageLabel = new JLabel(noImgTitle); noImageLabel.setHorizontalAlignment(JLabel.CENTER); noImageLabel.setVerticalAlignment(JLabel.CENTER); noImageLabel.setFont(new Font("Verdana", 1, 20)); noImageLabel.setName("NoPicsImg"); centerPanel.setLayout(new GridBagLayout()); centerPanel.add(noImageLabel); centerPanel.revalidate(); centerPanel.repaint(); } }); infoAvailable = MessageFormat.format(messages.getProperty("dmsg_03"), numberPage); } else { String t = listener.getNumImg() > 1 ? messages.getProperty("tmsg_15") : messages.getProperty("tmsg_16"); infoAvailable = listener.getNumImg() + " " + t; } PdfTrickMessages.append("INFO", infoUnsupported + infoAvailable); } catch (Exception e) { logger.error("Exception", e); PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG); } SwingUtilities.invokeLater(new ManagePanelWait("thumb", "thumb_hide")); finished = true; }
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/*ww w .j a v a 2 s . c o m*/ * @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
/** * ??/*ww w .ja va 2 s . c o m*/ * * @param srcPdf ? * @param destPdf * @param waterMarkText ? * @param waterMarkImage ? */ public static void addWaterMarkFile(File srcPdf, File destPdf, String waterMarkText, File waterMarkImage) throws IOException, DocumentException { if (waterMarkText == null && waterMarkImage == null) throw new FileNotFoundException(waterMarkText + " " + waterMarkImage + " all null."); if (srcPdf == null || !srcPdf.exists() || !srcPdf.isFile()) throw new FileNotFoundException("pdf file : '" + srcPdf + "' does not exsit."); if (!FilenameUtils.getExtension(srcPdf.getAbsolutePath()).toLowerCase().equals("pdf")) return; if (waterMarkImage != null) { if (!waterMarkImage.exists() || !waterMarkImage.isFile()) throw new FileNotFoundException("img file : '" + srcPdf + "' does not exsit."); if (!FilenameUtils.getExtension(waterMarkImage.getAbsolutePath()).toLowerCase().equals("png")) throw new FileNotFoundException("image file '" + srcPdf + "' not png.(???? pdf )"); } PdfReader reader = getPdfReader(srcPdf); int n = reader.getNumberOfPages(); PdfStamper stamper = getPdfStamper(srcPdf, destPdf); // // HashMap<String, String> moreInfo = new HashMap<String, String>(); // moreInfo.put("Author", "H819 create"); // moreInfo.put("Producer", "H819 Producer"); // Key = CreationDate, Value = D:20070425182920 // Key = Producer, Value = TH-OCR 2000 (C++/Win32) // Key = Author, Value = TH-OCR 2000 // Key = Creator, Value = TH-OCR PDF Writer // stamp.setMoreInfo(moreInfo); // text Phrase text = null; if (waterMarkText != null) { // Font bfont = getPdfFont(); bfont.setSize(35); bfont.setColor(new BaseColor(192, 192, 192)); text = new Phrase(waterMarkText, bfont); } // image watermark Image img = null; float w = 0; float h = 0; if (waterMarkImage != null) { img = Image.getInstance(waterMarkImage.getAbsolutePath()); w = img.getScaledWidth(); h = img.getScaledHeight(); // img. img.setRotationDegrees(45); } // transparency PdfGState gs1 = new PdfGState(); gs1.setFillOpacity(0.5f); // properties PdfContentByte over; Rectangle pageSize; float x, y; // loop over every page for (int i = 1; i <= n; i++) { pageSize = reader.getPageSizeWithRotation(i); x = (pageSize.getLeft() + pageSize.getRight()) / 2; y = (pageSize.getTop() + pageSize.getBottom()) / 2; // pdf pdf ??? over = stamper.getOverContent(i); // ? // over = stamp.getUnderContent(i); // ?? over.beginText(); over.endText(); ? // ,?,:???? over.saveState(); //?? over.setGState(gs1); if (waterMarkText != null && waterMarkImage != null) { // if (i % 2 == 1) { ColumnText.showTextAligned(over, Element.ALIGN_CENTER, text, x, y, 45); } else over.addImage(img, w, 0, 0, h, x - (w / 2), y - (h / 2)); } else if (waterMarkText != null) { //? ColumnText.showTextAligned(over, Element.ALIGN_CENTER, text, x, y, 45); //?? ,?, :????? // ... } else { //? over.addImage(img, w, 0, 0, h, x - (w / 2), y - (h / 2)); } over.restoreState();//??? } stamper.close(); reader.close(); }
From source file:org.h819.commons.file.MyPDFUtils.java
/** * ? pdf ??/*from w w w . ja va 2 s. c om*/ * * @param srcPdfFile the original PDF * @param descPdfFile the resulting PDF * @throws java.io.IOException * @throws DocumentException */ public static void compressPdf(File srcPdfFile, File descPdfFile) throws IOException, DocumentException { if (srcPdfFile == null || !srcPdfFile.exists()) throw new IOException("src pdf file '" + srcPdfFile + "' does not exsit."); PdfReader reader = getPdfReader(srcPdfFile); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(descPdfFile.getAbsoluteFile()), PdfWriter.VERSION_1_7); stamper.getWriter().setCompressionLevel(9); int total = reader.getNumberOfPages() + 1; for (int i = 1; i < total; i++) { reader.setPageContent(i, reader.getPageContent(i)); } stamper.setFullCompression(); stamper.close(); reader.close(); }
From source file:org.h819.commons.file.MyPDFUtils.java
/** * pdf ? pdf/*from w w w. ja v a2 s.co m*/ * * @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.h819.commons.file.MyPDFUtils.java
/** * ?pdf//from www . j ava 2s . co m * * @param srcPdfFile the original PDF * @param descPdfFile the resulting PDF * @throws java.io.IOException * @throws DocumentException */ public static void decompressPdf(File srcPdfFile, File descPdfFile) throws IOException, DocumentException { if (srcPdfFile == null || !srcPdfFile.exists()) throw new IOException("src pdf file '" + srcPdfFile + "' does not exsit."); PdfReader reader = getPdfReader(srcPdfFile); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(descPdfFile.getAbsoluteFile())); stamper.getWriter().setCompressionLevel(PdfStream.NO_COMPRESSION); int total = reader.getNumberOfPages() + 1; for (int i = 1; i < total; i++) { reader.setPageContent(i, reader.getPageContent(i)); } stamper.close(); reader.close(); }
From source file:org.h819.commons.file.MyPDFUtils.java
/** * ??? pdf //www . j av a 2 s. c o m * windows * "PDF Password Remover v4.0" ?? * * @param srcPdf pdf * @param descPdf ? pdf * @param ownerPassword ?????? * @param badDirectory ?? pdf * @throws java.io.IOException */ public static void decryptFile(File srcPdf, File descPdf, String ownerPassword, File badDirectory) throws IOException { String extension = FilenameUtils.getExtension(srcPdf.getAbsolutePath()); if (!extension.equalsIgnoreCase("pdf")) return; // ??? 0 ? if (FileUtils.sizeOf(srcPdf) == 0) { logger.info("{} size =0 ,copy to {}", srcPdf.getAbsoluteFile(), badDirectory.getAbsoluteFile()); FileUtils.copyDirectory(srcPdf, badDirectory, true); return; } try { PdfReader reader; if (ownerPassword != null) reader = getPdfReader(srcPdf, ownerPassword); else reader = getPdfReader(srcPdf); if (!reader.isEncrypted()) {// ? FileUtils.copyFile(srcPdf, descPdf); logger.info("not encrypted,copy {} to {} ", srcPdf.getAbsolutePath(), descPdf.getAbsoluteFile()); return; } List<ExecParameter> list = new ArrayList(2); list.add(new ExecParameter("-i", srcPdf.getAbsolutePath())); // ? key value list.add(new ExecParameter("-o", descPdf.getAbsolutePath())); // list.add(new ExecParameter("-u", "")); // list.add(new ExecParameter("-w", "")); MyExecUtils.exec(Paths.get(getPdfPdfdecryptExec()), list, 1); logger.info("decrypted {} to {}", srcPdf.getAbsolutePath(), descPdf.getAbsolutePath()); // ?? reader.close(); } catch (BadPasswordException e) { // ??? logger.info("{} has user password ,copy to {}", srcPdf.getAbsoluteFile(), badDirectory.getAbsoluteFile()); FileUtils.copyFileToDirectory(srcPdf, badDirectory, true); e.printStackTrace(); return; } catch (IOException e) { e.printStackTrace(); } }