List of usage examples for com.itextpdf.text.pdf PdfReader PdfReader
public PdfReader(final PdfReader reader)
From source file:cz.muni.pdfjbim.PdfImageExtractor.java
License:Apache License
/** * Extracts JBIG2Images from Input stream even if they are stored together with global dictionary in separate PDF object * doesn't work yet, its in development stage * @param is//w ww .j a v a 2 s . c om * @throws PdfRecompressionException * @deprecated */ public void extractJbig2Images(InputStream is) throws PdfRecompressionException { if (is == null) { throw new IllegalArgumentException("InputStream not given"); } PdfReader pdfReader = null; try { pdfReader = new PdfReader(is); for (int i = 0; i <= pdfReader.getNumberOfPages(); i++) { PdfDictionary d = pdfReader.getPageN(i); PdfIndirectReference ir = d.getAsIndirectObject(PdfName.CONTENTS); PdfObject o = pdfReader.getPdfObject(ir.getNumber()); PdfStream stream = (PdfStream) o; PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE); if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) { byte[] img = PdfReader.getStreamBytesRaw((PRStream) stream); OutputStream out = new FileOutputStream( new File("pdfRecompressor", String.format("%1$05d", i) + ".jpg")); out.write(img); out.flush(); out.close(); } } } catch (IOException ex) { log.error("IOException caught while trying to extract jbig2 images from PDF", ex); throw new PdfRecompressionException("IOException caught while trying to extract jbig2 images from PDF", ex); } finally { if (pdfReader != null) { pdfReader.close(); } } }
From source file:cz.muni.pdfjbim.PdfImageProcessor.java
License:Apache License
/** * replace images by they recompressed version according to JBIG2 standard * positions and image data given in imagesData * @param pdfName represents name of original PDF file * @param os represents output stream for writing changed PDF file * @param imagesData contains compressed images according to JBIG2 standard and informations about them * @throws PdfRecompressionException if version of PDF is lower than 1.4 or was catch DocumentException or IOException */// ww w .jav a 2 s .c om public void replaceImageUsingIText(String pdfName, OutputStream os, Jbig2ForPdf imagesData) throws PdfRecompressionException { if (pdfName == null) { throw new NullPointerException("pdfName"); } if (os == null) { throw new NullPointerException("os"); } if (imagesData == null) { throw new NullPointerException("imagesData is null => nothing to recompress"); } Map<PdfObjId, PdfImage> jbig2Images = imagesData.getMapOfJbig2Images(); PdfReader pdf; PdfStamper stp = null; try { pdf = new PdfReader(pdfName); stp = new PdfStamper(pdf, os); PdfWriter writer = stp.getWriter(); int version; if ((version = Integer.parseInt(String.valueOf(pdf.getPdfVersion()))) < 4) { writer.setPdfVersion(PdfWriter.PDF_VERSION_1_4); } Iterator itImages = jbig2Images.values().iterator(); String key; if (itImages.hasNext()) { PdfImage myImg = (PdfImage) itImages.next(); key = myImg.getPdfImageInformation().getKey(); } else { key = "im0"; } for (int pageNum = 1; pageNum <= pdf.getNumberOfPages(); pageNum++) { PdfDictionary pg = pdf.getPageN(pageNum); PdfDictionary resPg = (PdfDictionary) PdfReader.getPdfObject(pg.get(PdfName.RESOURCES)); PdfDictionary xobjResPg = (PdfDictionary) PdfReader.getPdfObject(resPg.get(PdfName.XOBJECT)); PdfObject obj = null; if (xobjResPg != null) { for (Iterator it = xobjResPg.getKeys().iterator(); it.hasNext();) { PdfObject pdfObjIndirect = xobjResPg.get((PdfName) it.next()); if (pdfObjIndirect.isIndirect()) { PdfDictionary pdfObj2 = (PdfDictionary) PdfReader.getPdfObject(pdfObjIndirect); PdfDictionary xobj2Res = (PdfDictionary) PdfReader .getPdfObject(pdfObj2.get(PdfName.RESOURCES)); if (xobj2Res != null) { for (Iterator it2 = xobj2Res.getKeys().iterator(); it2.hasNext();) { PdfObject resObj = xobj2Res.get((PdfName) it2.next()); } PdfDictionary xobj = (PdfDictionary) PdfReader .getPdfObject(xobj2Res.get(PdfName.XOBJECT)); if (xobj == null) { continue; } obj = xobj.get(new PdfName(key)); } else { obj = xobjResPg.get(new PdfName(key)); if (obj == null) { obj = pdfObjIndirect; } } } } } if ((obj != null) && (obj.isIndirect())) { PdfDictionary tg = (PdfDictionary) PdfReader.getPdfObject(obj); if (tg == null) { continue; } PdfName type = (PdfName) PdfReader.getPdfObject(tg.get(PdfName.SUBTYPE)); if (PdfName.IMAGE.equals(type)) { PRIndirectReference ref = (PRIndirectReference) obj; PdfObjId imId = new PdfObjId(ref.getNumber(), ref.getGeneration()); PdfImage jbImage = jbig2Images.get(imId); if (jbImage == null) { continue; } PdfImageInformation jbImageInfo = jbImage.getPdfImageInformation(); Image img = Image.getInstance(jbImageInfo.getWidth(), jbImageInfo.getHeight(), jbImage.getImageData(), imagesData.getGlobalData()); PdfReader.killIndirect(obj); Image maskImage = img.getImageMask(); if (maskImage != null) { writer.addDirectImageSimple(maskImage); } writer.addDirectImageSimple(img, (PRIndirectReference) obj); } } } stp.close(); } catch (IOException ioEx) { throw new PdfRecompressionException(ioEx); } catch (DocumentException dEx) { throw new PdfRecompressionException(dEx); } finally { Tools.deleteFilesFromList(imagesData.getJbFiles().toArray(new File[0])); } }
From source file:cz.muni.pdfjbim.PdfImageReplacer.java
License:Apache License
/** * replace images by they recompressed version according to JBIG2 standard positions and image * data given in imagesData//from w ww .j a v a2s . c om * * @param originalPdf represents name of original PDF file * @param os represents output stream for writing changed PDF file * @param imagesData contains compressed images according to JBIG2 standard and informations * about them * @throws PdfRecompressionException if version of PDF is lower than 1.4 or was catch * DocumentException or IOException */ public void replaceImageUsingIText(InputStream originalPdf, OutputStream os, List<Jbig2ForPdf> imagesDataList) throws PdfRecompressionException { if (originalPdf == null) { throw new NullPointerException("pdfName"); } if (os == null) { throw new NullPointerException("os"); } if (imagesDataList == null) { throw new NullPointerException("imagesData is null => nothing to recompress"); } log.info("Replacing old images in PDF with their equivalent encoded according to standard JBIG2"); PdfReader pdf; PdfStamper stp = null; try { pdf = new PdfReader(originalPdf); stp = new PdfStamper(pdf, os); PdfWriter writer = stp.getWriter(); int version; if ((version = Integer.parseInt(String.valueOf(pdf.getPdfVersion()))) < 4) { log.debug("PDF version of original PDF was {} => changing to PDF version 1.4", pdf.getPdfVersion()); writer.setPdfVersion(PdfWriter.PDF_VERSION_1_4); } for (Jbig2ForPdf imagesData : imagesDataList) { Map<PdfObjId, PdfImage> jbig2Images = imagesData.getMapOfJbig2Images(); Iterator itImages = jbig2Images.values().iterator(); String key; if (itImages.hasNext()) { PdfImage myImg = (PdfImage) itImages.next(); key = myImg.getPdfImageInformation().getKey(); } else { key = "im0"; } for (int pageNum = 1; pageNum <= pdf.getNumberOfPages(); pageNum++) { PdfDictionary pg = pdf.getPageN(pageNum); PdfDictionary resPg = (PdfDictionary) PdfReader.getPdfObject(pg.get(PdfName.RESOURCES)); PdfDictionary xobjResPg = (PdfDictionary) PdfReader.getPdfObject(resPg.get(PdfName.XOBJECT)); PdfObject obj = null; if (xobjResPg != null) { for (Iterator it = xobjResPg.getKeys().iterator(); it.hasNext();) { PdfObject pdfObjIndirect = xobjResPg.get((PdfName) it.next()); if (pdfObjIndirect.isIndirect()) { PdfDictionary pdfObj2 = (PdfDictionary) PdfReader.getPdfObject(pdfObjIndirect); PdfDictionary xobj2Res = (PdfDictionary) PdfReader .getPdfObject(pdfObj2.get(PdfName.RESOURCES)); if (xobj2Res != null) { for (Iterator it2 = xobj2Res.getKeys().iterator(); it2.hasNext();) { PdfObject resObj = xobj2Res.get((PdfName) it2.next()); } PdfDictionary xobj = (PdfDictionary) PdfReader .getPdfObject(xobj2Res.get(PdfName.XOBJECT)); if (xobj == null) { continue; } obj = xobj.get(new PdfName(key)); } else { obj = xobjResPg.get(new PdfName(key)); if (obj == null) { obj = pdfObjIndirect; } } } } } if ((obj != null) && (obj.isIndirect())) { PdfDictionary tg = (PdfDictionary) PdfReader.getPdfObject(obj); if (tg == null) { continue; } PdfName type = (PdfName) PdfReader.getPdfObject(tg.get(PdfName.SUBTYPE)); if (PdfName.IMAGE.equals(type)) { PRIndirectReference ref = (PRIndirectReference) obj; PdfObjId imId = new PdfObjId(ref.getNumber(), ref.getGeneration()); PdfImage jbImage = jbig2Images.get(imId); if (jbImage == null) { continue; } log.debug("Replacing image {}", jbImage); PdfImageInformation jbImageInfo = jbImage.getPdfImageInformation(); Image img = Image.getInstance(jbImageInfo.getWidth(), jbImageInfo.getHeight(), jbImage.getImageData(), imagesData.getGlobalData()); PdfReader.killIndirect(obj); Image maskImage = img.getImageMask(); if (maskImage != null) { writer.addDirectImageSimple(maskImage); } writer.addDirectImageSimple(img, (PRIndirectReference) obj); } } } } } catch (IOException ioEx) { throw new PdfRecompressionException(ioEx); } catch (DocumentException dEx) { throw new PdfRecompressionException(dEx); } finally { log.debug("Deleting temporary files created during process of PDF recompression"); for (Jbig2ForPdf imagesData : imagesDataList) { Tools.deleteFilesFromList(imagesData.getJbFiles().toArray(new File[0])); } try { if (stp != null) { stp.close(); } } catch (DocumentException ex) { log.error("Exception thrown while closing stream", ex); } catch (IOException ex) { log.error("Exception thrown while closing stream", ex); } } }
From source file:de.aidger.utils.pdf.ActivityReportConverter.java
License:Open Source License
/** * Creates a new document.//from ww w . j a va 2s . com * * @param file * The file to create. */ private void makeNewDocument(File file) { try { File template = new File( Runtime.getInstance().getConfigPath() + "/templates/ActivityReportTemplate.pdf"); URL templateURL = null; if (template.exists()) { templateURL = template.toURI().toURL(); } else { templateURL = getClass().getResource("/de/aidger/res/pdf/ActivityReportTemplate.pdf"); } if (templateURL == null) { throw new FileNotFoundException(_("The report template could not be loaded.") + " " + _("Please make sure that a fitting template exists in the template folder.")); } reader = new PdfReader(templateURL); stamper = new PdfStamper(reader, new FileOutputStream(file)); fileCreated = true; contentByte = stamper.getOverContent(1); } catch (FileNotFoundException e1) { if (e1.getMessage() != null) { UI.displayError(e1.getMessage()); } else { UI.displayError(_("File could not be created.") + " " + _("Please close all processes that are using the file.")); } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
From source file:de.aidger.utils.pdf.BalanceReportConverter.java
License:Open Source License
/** * Places the created document onto the template for this report. * // www . ja v a 2 s . co m * @param file * The file to which this report will be saved. * @param preTemplateFile * The report to be used. */ private boolean applyTemplate(File file, File preTemplateFile) { FileOutputStream outStream = null; FileInputStream inStream = null; PdfContentByte contentByte = null; PdfReader reader = null, templateReader = null; try { /* * Use the template located in the configuration path first, if it * exists. */ File template = new File( Runtime.getInstance().getConfigPath() + "/templates/BalanceReportTemplate.pdf"); URL templateURL = null; if (template.exists()) { templateURL = template.toURI().toURL(); } else { templateURL = getClass().getResource("/de/aidger/res/pdf/BalanceReportTemplate.pdf"); } if (templateURL == null) { throw new FileNotFoundException(_("The report template could not be loaded.") + " " + _("Please make sure that a fitting template exists in the template folder.")); } Document document = new Document(PageSize.A4.rotate()); outStream = new FileOutputStream(file.getPath()); inStream = new FileInputStream(preTemplateFile); writer = PdfWriter.getInstance(document, outStream); document.open(); contentByte = writer.getDirectContent(); reader = new PdfReader(inStream); templateReader = new PdfReader(templateURL); /* * Add the template pdf to the document and place the finished * report on top of it. */ for (int i = 1; i <= reader.getNumberOfPages(); i++) { document.newPage(); PdfImportedPage page = writer.getImportedPage(templateReader, 1); int rotation = templateReader.getPageRotation(1); if (rotation == 90 || rotation == 270) { //landscape mode contentByte.addTemplate(page, 0, -1f, 1f, 0, 0, reader.getPageSizeWithRotation(1).getHeight()); } else { //portrait mode contentByte.addTemplate(page, 1f, 0, 0, 1f, 0, 0); } page = writer.getImportedPage(reader, i); rotation = reader.getPageRotation(i); if (rotation == 90 || rotation == 270) { //landscape mode contentByte.addTemplate(page, 0, -1f, 1f, 0, 0, reader.getPageSizeWithRotation(1).getHeight()); } else { //portrait mode contentByte.addTemplate(page, 1f, 0, 0, 1f, 0, 0); } } document.close(); return true; } catch (FileNotFoundException e) { if (e.getMessage() != null) { UI.displayError(e.getMessage()); } } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; }
From source file:de.aidger.utils.pdf.BudgetReportConverter.java
License:Open Source License
/** * Places the created document onto the template for this report. * //from w w w. j ava2s . c om * @param file * The file to which this report will be saved. * @param preTemplateFile * The report to be used. */ private boolean applyTemplate(File file, File preTemplateFile) { FileOutputStream outStream = null; FileInputStream inStream = null; PdfContentByte contentByte = null; PdfReader reader = null, templateReader = null; try { /* * Use the template located in the configuration path first, if it * exists. */ File template = new File(Runtime.getInstance().getConfigPath() + "/templates/BudgetReportTemplate.pdf"); URL templateURL = null; if (template.exists()) { templateURL = template.toURI().toURL(); } else { templateURL = getClass().getResource("/de/aidger/res/pdf/BudgetReportTemplate.pdf"); } if (templateURL == null) { throw new FileNotFoundException(_("The report template could not be loaded.") + " " + _("Please make sure that a fitting template exists in the template folder.")); } Document document = new Document(PageSize.A4); outStream = new FileOutputStream(file.getPath()); inStream = new FileInputStream(preTemplateFile); writer = PdfWriter.getInstance(document, outStream); document.open(); contentByte = writer.getDirectContent(); reader = new PdfReader(inStream); templateReader = new PdfReader(templateURL); /* * Add the template pdf to the document and place the finished * report on top of it. */ for (int i = 1; i <= reader.getNumberOfPages(); i++) { document.newPage(); PdfImportedPage page = writer.getImportedPage(templateReader, 1); int rotation = templateReader.getPageRotation(1); if (rotation == 90 || rotation == 270) { //landscape mode contentByte.addTemplate(page, 0, -1f, 1f, 0, 0, reader.getPageSizeWithRotation(1).getHeight()); } else { //portrait mode contentByte.addTemplate(page, 1f, 0, 0, 1f, 0, 0); } page = writer.getImportedPage(reader, i); rotation = reader.getPageRotation(i); if (rotation == 90 || rotation == 270) { //landscape mode contentByte.addTemplate(page, 0, -1f, 1f, 0, 0, reader.getPageSizeWithRotation(1).getHeight()); } else { //portrait mode contentByte.addTemplate(page, 1f, 0, 0, 1f, 0, 0); } } document.close(); return true; } catch (FileNotFoundException e) { if (e.getMessage() != null) { UI.displayError(e.getMessage()); } } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; }
From source file:de.aidger.utils.pdf.ControllingConverter.java
License:Open Source License
/** * Places the created document onto the template for this report. * /*from w ww. j a v a 2 s .c o m*/ * @param file * The file to which this report will be saved. * @param preTemplateFile * The report to be used. */ private boolean applyTemplate(File file, File preTemplateFile) { FileOutputStream outStream = null; FileInputStream inStream = null; PdfContentByte contentByte = null; PdfReader reader = null, templateReader = null; try { /* * Use the template located in the configuration path first, if it * exists. */ File template = new File(Runtime.getInstance().getConfigPath() + "/templates/ControllingTemplate.pdf"); URL templateURL = null; if (template.exists()) { templateURL = template.toURI().toURL(); } else { templateURL = getClass().getResource("/de/aidger/res/pdf/ControllingTemplate.pdf"); } if (templateURL == null) { throw new FileNotFoundException(_("The report template could not be loaded.") + " " + _("Please make sure that a fitting template exists in the template folder.")); } Document document = new Document(PageSize.A4); outStream = new FileOutputStream(file.getPath()); inStream = new FileInputStream(preTemplateFile); writer = PdfWriter.getInstance(document, outStream); document.open(); contentByte = writer.getDirectContent(); reader = new PdfReader(inStream); templateReader = new PdfReader(templateURL); /* * Add the template pdf to the document and place the finished * report on top of it. */ for (int i = 1; i <= reader.getNumberOfPages(); i++) { document.newPage(); PdfImportedPage page = writer.getImportedPage(templateReader, 1); int rotation = templateReader.getPageRotation(1); if (rotation == 90 || rotation == 270) { //landscape mode contentByte.addTemplate(page, 0, -1f, 1f, 0, 0, reader.getPageSizeWithRotation(1).getHeight()); } else { //portrait mode contentByte.addTemplate(page, 1f, 0, 0, 1f, 0, 0); } page = writer.getImportedPage(reader, i); rotation = reader.getPageRotation(i); if (rotation == 90 || rotation == 270) { //landscape mode contentByte.addTemplate(page, 0, -1f, 1f, 0, 0, reader.getPageSizeWithRotation(1).getHeight()); } else { //portrait mode contentByte.addTemplate(page, 1f, 0, 0, 1f, 0, 0); } } document.close(); return true; } catch (FileNotFoundException e) { if (e.getMessage() != null) { UI.displayError(e.getMessage()); } } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; }
From source file:de.aidger.utils.pdf.ProtocolConverter.java
License:Open Source License
/** * Places the created document onto the template for this report. * //www .j a v a 2 s . co m * @param file * The file to which this report will be saved. * @param preTemplateFile * The report to be used. */ private boolean applyTemplate(File file, File preTemplateFile) { FileOutputStream outStream = null; FileInputStream inStream = null; PdfContentByte contentByte = null; PdfReader reader = null, templateReader = null; try { /* * Use the template located in the configuration path first, if it * exists. */ File template = new File(Runtime.getInstance().getConfigPath() + "/templates/ProtocolTemplate.pdf"); URL templateURL = null; if (template.exists()) { templateURL = template.toURI().toURL(); } else { templateURL = getClass().getResource("/de/aidger/res/pdf/ProtocolTemplate.pdf"); } if (templateURL == null) { throw new FileNotFoundException(_("The report template could not be loaded.") + " " + _("Please make sure that a fitting template exists in the template folder.")); } Document document = new Document(PageSize.A4.rotate()); outStream = new FileOutputStream(file.getPath()); inStream = new FileInputStream(preTemplateFile); writer = PdfWriter.getInstance(document, outStream); document.open(); contentByte = writer.getDirectContent(); reader = new PdfReader(inStream); templateReader = new PdfReader(templateURL); /* * Add the template pdf to the document and place the finished * report on top of it. */ for (int i = 1; i <= reader.getNumberOfPages(); i++) { document.newPage(); PdfImportedPage page = writer.getImportedPage(templateReader, 1); int rotation = templateReader.getPageRotation(1); if (rotation == 90 || rotation == 270) { //landscape mode contentByte.addTemplate(page, 0, -1f, 1f, 0, 0, reader.getPageSizeWithRotation(1).getHeight()); } else { //portrait mode contentByte.addTemplate(page, 1f, 0, 0, 1f, 0, 0); } page = writer.getImportedPage(reader, i); rotation = reader.getPageRotation(i); if (rotation == 90 || rotation == 270) { //landscape mode contentByte.addTemplate(page, 0, -1f, 1f, 0, 0, reader.getPageSizeWithRotation(1).getHeight()); } else { //portrait mode contentByte.addTemplate(page, 1f, 0, 0, 1f, 0, 0); } } document.close(); return true; } catch (FileNotFoundException e) { if (e.getMessage() != null) { UI.displayError(e.getMessage()); } } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; }
From source file:de.codecentric.robot.pdf.PDFKeywords.java
License:Apache License
@RobotKeyword public void parsePdf(String filename) throws IOException { reader = new PdfReader(filename); System.out.println("Reading file " + filename); pdfData = new HashMap<Integer, String>(); int numberOfPages = reader.getNumberOfPages(); for (int page = 1; page <= numberOfPages; page++) { System.out.println("Reading page " + page); String textFromPage = PdfTextExtractor.getTextFromPage(reader, page); pdfData.put(page, textFromPage); }//from w ww .jav a 2 s. c o m }
From source file:de.drippinger.cytricHelper.CytricHelper.java
License:Open Source License
public void manipulatePdf(String sourceFile, String expenseID) throws IOException, DocumentException { PdfReader reader = new PdfReader(sourceFile); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(getOutputName(sourceFile))); PdfContentByte over = stamper.getOverContent(1); Phrase p = new Phrase(String.format("Cytric ID: %s", expenseID)); ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 500, reader.getPageSize(1).getHeight() - 30, 0); over.saveState();/*w w w .j a va 2 s . c o m*/ stamper.close(); reader.close(); }