List of usage examples for com.lowagie.text.pdf PdfReader PdfReader
public PdfReader(PdfReader reader)
From source file:de.jdufner.sudoku.generator.service.PdfGeneratorService.java
License:Open Source License
public void packPdf(String filePathName, String packageFileBaseName, String frontpageFileBaseName, String questsFileBaseName, String resultsFileBaseName, String htmlFileName) throws FileNotFoundException, DocumentException, IOException { PdfStamper pdfStamper = new PdfStamper(new PdfReader(filePathName + frontpageFileBaseName), new FileOutputStream(filePathName + packageFileBaseName)); pdfStamper.addFileAttachment("Quests", null, filePathName + questsFileBaseName, questsFileBaseName); pdfStamper.addFileAttachment("Results", null, filePathName + resultsFileBaseName, resultsFileBaseName); pdfStamper.addFileAttachment("HTML", null, filePathName + htmlFileName, htmlFileName); pdfStamper.makePackage(PdfName.T);/*from ww w.j a va2s.c om*/ pdfStamper.close(); }
From source file:de.offis.health.icardea.cied.pdf.extractor.PDFiText2Extractor.java
License:LGPL
public boolean openDocument(String fullPDFFilePath) throws IOException, Exception { boolean returnCode = false; if (fullPDFFilePath == null) { throw new Exception("There is no full path to a file given."); } // end if/* www . j a v a2 s.co m*/ File pdfFile = new File(fullPDFFilePath); if (pdfFile.isFile() && pdfFile.canRead()) { this.fullPDFFilePath = pdfFile.getAbsolutePath(); this.fullPDFDirectoryPath = pdfFile.getPath(); logger.debug("FilePath.....: " + this.fullPDFFilePath); logger.debug("DirectoryPath: " + this.fullPDFDirectoryPath); // Open the PDF file pdfReader = new PdfReader(pdfFile.getAbsolutePath()); logger.debug("PDF contains pages: " + pdfReader.getNumberOfPages()); // Remove reference to the file object as it is no longer needed (cleanup) pdfFile = null; returnCode = true; } else { throw new Exception("The given PDF file is not a file or not readable (check permissions)."); } // end if..else return returnCode; }
From source file:de.thorstenberger.examServer.pdf.signature.SignPdf.java
License:Open Source License
/** * Add a signature and a cryptographic timestamp to a pdf document. See www.ietf.org/rfc/rfc3161.txt. Proves that this * pdf had the current content at the current point in time. * * @param originalPdf//from w w w .j ava 2 s . c om * @param targetPdf * @param pk * @param certChain * @param revoked * @param tsaAddress * address of a rfc 3161 compatible timestamp server * @param reason * reason for the signature * @param location * location of signing * @param contact * emailaddress of the person who is signing * @throws IOException * @throws DocumentException * @throws SignatureException */ public static void signAndTimestamp(final InputStream originalPdf, final OutputStream targetPdf, final PrivateKey pk, final X509Certificate[] certChain, final CRL[] revoked, final String tsaAddress, final String reason, final String location, final String contact) throws IOException, DocumentException, SignatureException { // only an estimate, depends on the certificates returned by the TSA final int timestampSize = 4400; Security.addProvider(new BouncyCastleProvider()); final PdfReader reader = new PdfReader(originalPdf); final PdfStamper stamper = PdfStamper.createSignature(reader, targetPdf, '\0'); final PdfSignatureAppearance sap = stamper.getSignatureAppearance(); // comment next lines to have an invisible signature sap.setVisibleSignature(new Rectangle(450, 650, 500, 700), 1, null); sap.setLayer2Text(""); final PdfSigGenericPKCS sig = new PdfSigGenericPKCS.PPKMS("BC"); final HashMap<PdfName, Integer> exclusionSizes = new HashMap<PdfName, Integer>(); // some informational fields sig.setReason(reason); sig.setLocation(location); sig.setContact(contact); sig.setName(PdfPKCS7.getSubjectFields(certChain[0]).getField("CN")); sig.setDate(new PdfDate(Calendar.getInstance())); // signing stuff final byte[] digest = new byte[256]; final byte[] rsaData = new byte[20]; sig.setExternalDigest(digest, rsaData, "RSA"); sig.setSignInfo(pk, certChain, revoked); final PdfString contents = (PdfString) sig.get(PdfName.CONTENTS); // *2 to get hex size, +2 for delimiters PdfLiteral contentsLit = new PdfLiteral((contents.toString().length() + timestampSize) * 2 + 2); exclusionSizes.put(PdfName.CONTENTS, new Integer(contentsLit.getPosLength())); sig.put(PdfName.CONTENTS, contentsLit); // certification; will display dialog or blue bar in Acrobat Reader sap.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED); // process all the information set above sap.setCryptoDictionary(sig); sap.preClose(exclusionSizes); // calculate digest (hash) try { final MessageDigest messageDigest = MessageDigest.getInstance("SHA1"); final byte[] buf = new byte[8192]; int n; final InputStream inp = sap.getRangeStream(); while ((n = inp.read(buf)) != -1) { messageDigest.update(buf, 0, n); } final byte[] hash = messageDigest.digest(); // make signature (SHA1 the hash, prepend algorithm ID, pad, and encrypt with RSA) final Signature sign = Signature.getInstance("SHA1withRSA"); sign.initSign(pk); sign.update(hash); final byte[] signature = sign.sign(); // prepare the location of the signature in the target PDF contentsLit = (PdfLiteral) sig.get(PdfName.CONTENTS); final byte[] outc = new byte[(contentsLit.getPosLength() - 2) / 2]; final PdfPKCS7 pkcs7 = sig.getSigner(); pkcs7.setExternalDigest(signature, hash, "RSA"); final PdfDictionary dic = new PdfDictionary(); byte[] ssig = pkcs7.getEncodedPKCS7(); try { // try to retrieve cryptographic timestamp from configured tsa server ssig = pkcs7.getEncodedPKCS7(null, null, new TSAClientBouncyCastle(tsaAddress), null); } catch (final RuntimeException e) { log.error("Could not retrieve timestamp from server.", e); } System.arraycopy(ssig, 0, outc, 0, ssig.length); // add the timestamped signature dic.put(PdfName.CONTENTS, new PdfString(outc).setHexWriting(true)); // finish up sap.close(dic); } catch (final InvalidKeyException e) { throw new RuntimeException("Internal implementation error! No such signature type.", e); } catch (final NoSuchAlgorithmException e) { throw new RuntimeException("Internal implementation error! No such algorithm type.", e); } }
From source file:de.unigoettingen.sub.commons.contentlib.pdflib.PDFCreator.java
License:Apache License
public void createPDF(OutputStream out, List<DocumentPart> metsparts, PDFConfiguration pdfconfig, MetadataExtractor inMetadataExtractor, StructureMetadataExtractor inBookmarkExtractor, Watermark myWatermark) throws ImageManagerException, FileNotFoundException, IOException, PDFManagerException, ImageInterpreterException, URISyntaxException, MetsException { PDFManager pdfmanager = null;/* w w w . j a v a2 s . co m*/ String creator = ""; String title = ""; String keywords = ""; int documentpartcounter = 0; LinkedList<METSParser> allMetsParser = new LinkedList<METSParser>(); HashMap<Integer, UrlImage> allPages = new HashMap<Integer, UrlImage>(); HashMap<Integer, String> allPageNames = new HashMap<Integer, String>(); HashMap<Integer, PDFTitlePage> allTitlePages = new HashMap<Integer, PDFTitlePage>(); List<PDFBookmark> allRootBookmarks = new LinkedList<PDFBookmark>(); // iterate over all DocumentParts for (DocumentPart dp : metsparts) { documentpartcounter++; String pdfdivid = null; Map<Integer, UrlImage> documentpartPages = null; if (dp.getType() == DocumentPartType.METS) { // read the METS file and handle all the images // TODO: Do not invoke the METS Parser direct, use the interface instead METSParser metsparser = new METSParser(dp.getUrl(), true); // set METSParser configuration metsparser.setMetadataextractor(inMetadataExtractor); metsparser.setStructureMetadataExtractor(inBookmarkExtractor); if (dp.getMetsFileGroup() != null) { metsparser.setFilegroupsuseattributevalue(dp.getMetsFileGroup()); } if (dp.getDivid() == null) { pdfdivid = metsparser.getUppermostDivIDForPDF(); } else { pdfdivid = dp.getDivid(); } // calculate metadata inMetadataExtractor.calculatePDFMetadata(pdfdivid, metsparser); String title1 = inMetadataExtractor.getPdftitle(); String creator1 = inMetadataExtractor.getPdfcreator(); String keywords1 = inMetadataExtractor.getPdfkeywords(); if (title1 != null) { if (title.equals("")) { title = title1; } else { title = title + "; " + title1; } } if (creator1 != null) { if (creator.equals("")) { creator = creator1; } else { creator = creator + "; " + creator1; } } if (keywords1 != null) { if (keywords.equals("")) { keywords = keywords1; } else { keywords = keywords + "; " + keywords1; } } LOGGER.debug("Title1: " + title1); LOGGER.debug("Creator1: " + creator1); LOGGER.debug("Keywords1: " + keywords1); metsparser.getAllFilesForRelatedDivs(pdfdivid); // get page // names Map<Integer, String> myPageNames = metsparser.getPageNames(); // get list of files and pagenames documentpartPages = metsparser.getImageMap(); if (documentpartPages.isEmpty()) { // nothing in here; probably METS file has no pages // don't add METS file to list LOGGER.error("No page files / page urls available!"); } else { // change page names to make them unique // within the PDF, different METSparsers // will have same pageName for (Integer i : documentpartPages.keySet()) { UrlImage page = documentpartPages.get(i); String pagename = myPageNames.get(i); // calculate new integer int dpc = (documentpartcounter * 1000) + i; LOGGER.debug("adding page " + dpc + " to list"); // add to new HashMaps allPages.put(dpc, page); allPageNames.put(dpc, pagename); } // handle all bookmarks // need to change page number as well List<PDFBookmark> bookmarks; bookmarks = PDFBookmark.convertList(metsparser.getStructureList()); for (PDFBookmark b : bookmarks) { // change page numbers changeBookmarksPagenumber(b, documentpartcounter); allRootBookmarks.add(b); } // add METSParser to list allMetsParser.add(metsparser); } } else if (dp.getType() == DocumentPartType.PDF) { // handle the PDF part PdfReader pdfreader = new PdfReader(dp.getUrl()); int numberofpages = pdfreader.getNumberOfPages(); for (Integer i = 1; i < numberofpages + 1; i++) { PDFPage pdfpage = new PDFPage(); pdfpage.setPdfreader(pdfreader); pdfpage.setPageNumber(i); int dpc = (documentpartcounter * 1000) + (i); LOGGER.debug("adding page " + dpc + " to list"); // add page to allPages allPages.put(dpc, pdfpage); // adding page labales String labels[] = PdfPageLabels.getPageLabels(pdfreader); if ((labels != null) && (i < labels.length)) { LOGGER.debug("adding Page label (" + i + "):" + labels[i - 1]); allPageNames.put(dpc, labels[i - 1].substring(0, labels[i - 1].length() - 1)); } } // add Bookmarks allRootBookmarks = extractBookmarksFromPDF(pdfreader, allRootBookmarks, documentpartcounter); } // handle the title page of this DocumentPart if (dp.getTitlepage() != null) { // title page is available // set the layout of the content file // set structType if (inMetadataExtractor.getStructType() != null) { dp.getTitlepage().setStructuretype(inMetadataExtractor.getStructType()); } dp.getTitlepage().deleteTitleLines(); // set Lines if (inMetadataExtractor.getPdfTitlepageLine1() != null) { PDFTitlePageLine ptl = new PDFTitlePageLine(inMetadataExtractor.getPdfTitlepageLine1()); ptl.setContent(inMetadataExtractor.getPdfTitlepageLine1()); ptl.setLinetype(2); ptl.setFontsize(14); dp.getTitlepage().addPDFTitlePageLine(ptl); } if (inMetadataExtractor.getPdfTitlepageLine2() != null) { PDFTitlePageLine ptl = new PDFTitlePageLine(inMetadataExtractor.getPdfTitlepageLine2()); ptl.setLinetype(2); ptl.setFontsize(10); dp.getTitlepage().addPDFTitlePageLine(ptl); } if (inMetadataExtractor.getPdfTitlepageLine3() != null) { PDFTitlePageLine ptl = new PDFTitlePageLine(inMetadataExtractor.getPdfTitlepageLine3()); ptl.setLinetype(2); ptl.setFontsize(10); dp.getTitlepage().addPDFTitlePageLine(ptl); } if (inMetadataExtractor.getPdfTitlepageLine4() != null) { PDFTitlePageLine ptl = new PDFTitlePageLine(inMetadataExtractor.getPdfTitlepageLine4()); ptl.setLinetype(2); ptl.setFontsize(10); dp.getTitlepage().addPDFTitlePageLine(ptl); } // get name of the first page if (documentpartPages != null) { Map<Integer, UrlImage> sortedMap = new TreeMap<Integer, UrlImage>(documentpartPages); Iterator<Integer> it2 = sortedMap.keySet().iterator(); Integer firstpagename = 0; // TODO: GDZ: Should this just get the first element? - yes // I tried to find a more elegant way but my google didn't work #googleneverlikedme while (it2.hasNext()) { firstpagename = it2.next(); firstpagename = (documentpartcounter * 1000) + firstpagename; LOGGER.debug("Adding PDFTitlePage at page " + firstpagename); break; } allTitlePages.put(firstpagename, dp.getTitlepage()); } } } // end of while over all document parts // setting for PDFManager pdfmanager = new PDFManager(allPages); pdfmanager.setAlwaysUseRenderedImage(pdfconfig.isPdfDefaultAlwaysUseRenderedImage()); pdfmanager.setAlwaysCompressToJPEG(pdfconfig.isPdfDefaultAlwaysCompressToJPEG()); pdfmanager.setPdfa(pdfconfig.isWriteAsPdfA()); // set pages LOGGER.debug(allPages.size() + " pages for PDFManager set"); pdfmanager.setImageURLs(allPages); pdfmanager.setImageNames(allPageNames); pdfmanager.setStructureList(allRootBookmarks); pdfmanager.setPdftitlepages(allTitlePages); // set metadata if (!title.equals("")) { pdfmanager.setTitle(title); } if (!creator.equals("")) { pdfmanager.setCreator(creator); pdfmanager.setAuthor(creator); } if (!keywords.equals("")) { pdfmanager.setKeyword(keywords); } // set an ICC profile if (pdfconfig.getIccinputfilename() != null) { ICC_Profile iccprofile = ICC_Profile.getInstance(pdfconfig.getIccinputfilename()); pdfmanager.setIccprofile(iccprofile); } pdfmanager.createPDF(out, pdfconfig.getPagesize(), myWatermark); }
From source file:de.unigoettingen.sub.commons.contentlib.pdflib.PDFManager.java
License:Apache License
/****************************************************************************************************** * Adds the all pages./*from w w w .j a v a 2s. c om*/ * * @param pagesizemode {@link PdfPageSize} * @param writer {@link PdfWriter} * @param pdfdoc {@link Document} * @return {@link PdfPageLabels} * * * @throws ImageInterpreterException the image interpreter exception * @throws IOException Signals that an I/O exception has occurred. * @throws MalformedURLException the malformed url exception * @throws PDFManagerException the PDF manager exception * @throws ImageManagerException *******************************************************************************************************/ private PdfPageLabels addAllPages(PdfPageSize pagesizemode, PdfWriter writer, Document pdfdoc, Watermark myWatermark) throws ImageInterpreterException, IOException, MalformedURLException, PDFManagerException, ImageManagerException { PdfPageLabels pagelabels = new PdfPageLabels(); int pageadded = 0; // sort the HashMap by the KeySet (pagenumber) Map<Integer, UrlImage> sortedMap = new TreeMap<Integer, UrlImage>(imageURLs); float scalefactor = 1; // scaling factor of the image int page_w = PaperSize.A4.width; int page_h = PaperSize.A4.height; LOGGER.debug("iterate over " + imageURLs.size() + " pages."); for (Integer imageKey : sortedMap.keySet()) { Watermark watermark = myWatermark; Image pdfImage = null; // PDF-Image LOGGER.debug("Writing page " + imageKey); boolean errorPage = false; // true if the image does not exists URL errorUrl = null; // url of the image that does not exists // ------------------------------------------------------------------------------------------------ // Title page available. Render it in pdftitlepage // ------------------------------------------------------------------------------------------------ if ((pdftitlepages != null) && (pdftitlepages.get(imageKey) != null)) { // title page PDFTitlePage pdftitlepage = pdftitlepages.get(imageKey); // create new PDF page try { pdfdoc.setPageSize(PageSize.A4); pdfdoc.setMargins(pdftitlepage.getLeftMargin(), pdftitlepage.getRightMargin(), pdftitlepage.getTopMargin(), pdftitlepage.getBottomMargin()); pageadded++; pdfdoc.newPage(); // create new page // set page name pagelabels.addPageLabel(pageadded, PdfPageLabels.EMPTY, "-"); } catch (Exception e1) { throw new PDFManagerException("PDFManagerException occured while creating new page in PDF", e1); } // render title page pdftitlepage.render(pdfdoc); } // ------------------------------------------------------------------------------------------------ // Process image with imageKey // ------------------------------------------------------------------------------------------------ UrlImage pdfpage = imageURLs.get(imageKey); if (pdfpage.getURL() != null) { boolean added = false; boolean scaled = false; URL url = pdfpage.getURL(); // pdf hack if (ContentServerConfiguration.getInstance().getUsePdf()) { LOGGER.debug("trying to find original pdf"); PdfContentByte pdfcb = null; PdfReader pdfreader = null; PdfImportedPage importpage = null; try { String pdfpath = ContentServerConfiguration.getInstance().getRepositoryPathPdf() .replace("file:///", ""); LOGGER.debug("looking in " + pdfpath + " for pdf file"); String tiffPath = ContentServerConfiguration.getInstance().getRepositoryPathImages() .replace("file:///", ""); // String urlString = url.toString(); int pageNumber = pdfpage.getPageNumber(); // UrlImage copy = new PDFPage(pdfpage); URL pdfurl = new URL(url.toString().replace(tiffPath, pdfpath) .replace(url.toString().substring(url.toString().lastIndexOf(".")), ".pdf")); LOGGER.debug("pdfurl = " + pdfurl); if (new File(pdfurl.toURI()).exists()) { LOGGER.debug("found pdf " + pdfurl.toURI()); // copy.setURL(pdfurl); pdfcb = writer.getDirectContent(); pdfreader = new PdfReader(pdfurl); importpage = writer.getImportedPage(pdfreader, pageNumber); LOGGER.debug("creating orig pdf page"); Rectangle rect = pdfreader.getPageSize(pageNumber); try { pdfdoc.setPageSize(rect); pdfdoc.newPage(); // create new page } catch (Exception e1) { throw new PDFManagerException("Exception occured while creating new page in PDF", e1); } pageadded++; pdfcb.addTemplate(importpage, 0, 0); added = true; LOGGER.debug("page:" + imageKey + " url: " + pdfurl.toString()); } } catch (URISyntaxException e) { LOGGER.debug(e); added = false; } finally { if (writer != null) { writer.freeReader(pdfreader); writer.flush(); } if (pdfreader != null) { pdfreader.close(); } } } if (!added) { // image file LOGGER.debug("using image to create pdf page"); // try to get ImageInterpreter from url ImageInterpreter myInterpreter = ImageFileFormat.getInterpreter(url, httpproxyhost, httpproxyport, httpproxyuser, httpproxypassword); try { // check preferred compression type depending on color depth Embedd preferredEmbeddingType = Embedd.ORIGBYTESTREAM; if (myInterpreter.getColordepth() == 1) { // bitonal image preferredEmbeddingType = embeddBitonalImage; } else if ((myInterpreter.getColordepth() > 1) && (myInterpreter.getSamplesperpixel() == 1)) { // greyscale image preferredEmbeddingType = embeddGreyscaleImage; } else { // color image preferredEmbeddingType = embeddColorImage; } // ------------------------------------------------------------------------------------- // Try to generate image // ------------------------------------------------------------------------------------- pdfImage = generatePdfImageFromInterpreter(myInterpreter, preferredEmbeddingType, errorPage, watermark, errorUrl); // ------------------------------------------------------------------------------------- // image couldn't be embedded yet (emergencyCase) // ------------------------------------------------------------------------------------- if (pdfImage == null) { LOGGER.warn( "Couldn't use preferred method for embedding the image. Instead had to use JPEG or RenderedImage"); // Get Interpreter and rendered Image // --------------------------------------------------------------------------------------------------------------------------------- RenderedImage ri = null; if (preferredEmbeddingType == embeddBitonalImage) { ImageManager sourcemanager = new ImageManager(url); boolean watermarkscale = ContentServerConfiguration.getInstance() .getScaleWatermark(); // should we scale // the watermark ? ri = sourcemanager.scaleImageByPixel(3000, 0, ImageManager.SCALE_BY_WIDTH, 0, null, null, watermark, watermarkscale, ImageManager.BOTTOM); myInterpreter = sourcemanager.getMyInterpreter(); } else { ri = myInterpreter.getRenderedImage(); if (watermark != null) { ri = addwatermark(ri, watermark, 2); myInterpreter.setHeight( myInterpreter.getHeight() + watermark.getRenderedImage().getHeight()); } } // scale rendered image // --------------------------------------------------------------------------------------------------------------------------------- // float scalefactorX = 1; // float scalefactorY = 1; // switch (pagesizemode) { // case ORIGINAL: // scalefactorX = 72f / myInterpreter.getXResolution(); // scalefactorY = 72f / myInterpreter.getYResolution(); // break; // default: // /* // * check, if the image needs to be scaled, because // * it's bigger than A4 calculate the new scalefactor // */ // float page_w_pixel = (float) (page_w * // myInterpreter.getXResolution() / 25.4); // float page_h_pixel = (float) (page_h * // myInterpreter.getYResolution() / 25.4); // // float res_x = myInterpreter.getXResolution(); // float res_y = myInterpreter.getYResolution(); // // long w = myInterpreter.getWidth(); // get height and // // width // long h = myInterpreter.getHeight(); // // if ((w > page_w_pixel) || (h > page_h_pixel)) { // LOGGER.debug("scale image to fit the page"); // float scalefactor_w = page_w_pixel / w; // float scalefactor_h = page_h_pixel / h; // if (scalefactor_h < scalefactor_w) { // scalefactor = scalefactor_h; // } else { // scalefactor = scalefactor_w; // } // w = (long) (w * scalefactor); // h = (long) (h * scalefactor); // } // scalefactorX = (72f / res_x) * scalefactor; // scalefactorY = (72f / res_y) * scalefactor; // break; // } // //scalefactorX = 0.2f; // //scalefactorY = 0.2f; // if (preferredEmbeddingType == embeddBitonalImage) { // ImageManager sourcemanager = new ImageManager(url); // ri = sourcemanager.scaleImageByPixel((int) // (scalefactorX*100), (int) (scalefactorY*100), // ImageManager.SCALE_BY_PERCENT, 0, null, null, // watermark, true, ImageManager.BOTTOM); // }else{ // ri = ImageManipulator.scaleInterpolationBilinear(ri, // scalefactorX, scalefactorY); // } // myInterpreter.setHeight(ri.getHeight()); // myInterpreter.setWidth(ri.getWidth()); // scaled = true; // add Watermark // --------------------------------------------------------------------------------------------------------------------------------- // ri = addwatermark(ri, watermark, // ImageManager.BOTTOM); // myInterpreter.setHeight(myInterpreter.getHeight() + // watermark.getRenderedImage().getHeight()); // Try to write into pdfImage // --------------------------------------------------------------------------------------------------------------------------------- if (myInterpreter.getColordepth() > 1) { // compress image if greyscale or color ByteArrayOutputStream bytesoutputstream = new ByteArrayOutputStream(); // JpegInterpreter jpint = new JpegInterpreter(ri); // jpint.setXResolution(myInterpreter.getXResolution()); // jpint.setYResolution(myInterpreter.getYResolution()); // jpint.writeToStream(null, bytesoutputstream); LOGGER.error("WritingJPEGImage"); writeJpegFromRenderedImageToStream(bytesoutputstream, ri, null, myInterpreter); byte[] returnbyteArray = bytesoutputstream.toByteArray(); if (bytesoutputstream != null) { bytesoutputstream.flush(); bytesoutputstream.close(); } pdfImage = Image.getInstance(returnbyteArray); returnbyteArray = null; } else { // its bitonal, but can't be embedded directly, // need to go via RenderedImage BufferedImage buffImage = ImageManipulator.fromRenderedToBuffered(ri); pdfImage = Image.getInstance(buffImage, null, false); if (myWatermark != null) { // create Image for Watermark JpegInterpreter jpint = new JpegInterpreter(myWatermark.getRenderedImage()); ByteArrayOutputStream bytesoutputstream = new ByteArrayOutputStream(); jpint.setXResolution(myInterpreter.getXResolution()); jpint.setYResolution(myInterpreter.getYResolution()); jpint.writeToStream(null, bytesoutputstream); byte[] returnbyteArray = bytesoutputstream.toByteArray(); jpint.clear(); if (bytesoutputstream != null) { bytesoutputstream.flush(); bytesoutputstream.close(); } Image blaImage = Image.getInstance(returnbyteArray); returnbyteArray = null; // set Watermark as Footer at fixed position // (200,200) Chunk c = new Chunk(blaImage, 200, 200); Phrase p = new Phrase(c); HeaderFooter hf = new HeaderFooter(p, false); pdfdoc.setFooter(hf); } // pdfdoc.setPageSize(arg0) // TODO das scheint nicht zu funktionieren... sollte // dieser Code entfernt werden? } } // end of : if (pdfImage == null) { } catch (BadElementException e) { throw new PDFManagerException("Can't create a PDFImage from a Buffered Image.", e); } catch (ImageManipulatorException e) { LOGGER.warn(e); } // --------------------------------------------------------------------------------------------------------- // place the image on the page // --------------------------------------------------------------------------------------------------------- if (pagesizemode == PdfPageSize.ORIGINAL) { // calculate the image width and height in points, create // the rectangle in points Rectangle rect = null; if (!scaled) { float image_w_points = (myInterpreter.getWidth() / myInterpreter.getXResolution()) * 72; float image_h_points = ((myInterpreter.getHeight()) / myInterpreter.getYResolution()) * 72; rect = new Rectangle(image_w_points, image_h_points); } else { rect = new Rectangle(myInterpreter.getWidth(), myInterpreter.getHeight()); } // create the pdf page according to this rectangle LOGGER.debug("creating original page sized PDF page:" + rect.getWidth() + " x " + rect.getHeight()); pdfdoc.setPageSize(rect); // create new page to put the content try { pageadded++; pdfdoc.newPage(); } catch (Exception e1) { throw new PDFManagerException( "DocumentException occured while creating page " + pageadded + " in PDF", e1); } // scale image and place it on page; scaling the image does // not scale the images bytestream if (!scaled) { pdfImage.scalePercent((72f / myInterpreter.getXResolution() * 100), (72f / myInterpreter.getYResolution() * 100)); } pdfImage.setAbsolutePosition(0, 0); // set image to lower // left corner boolean result; try { result = pdfdoc.add(pdfImage); // add it to PDF if (!result) { throw new PDFManagerException("Image \"" + url.toString() + "\" can's be added to PDF! Error during placing image on page"); } } catch (DocumentException e) { throw new PDFManagerException("DocumentException occured while adding the image to PDF", e); } } else { /* * it is not the original page size PDF will contain only A4 pages */ LOGGER.debug("creating A4 pdf page"); // create new page to put the content try { pageadded++; pdfdoc.setPageSize(PageSize.A4); pdfdoc.newPage(); // create new page } catch (Exception e1) { throw new PDFManagerException("Exception occured while creating new page in PDF", e1); } float page_w_pixel = (float) (page_w * myInterpreter.getXResolution() / 25.4); float page_h_pixel = (float) (page_h * myInterpreter.getYResolution() / 25.4); float res_x = myInterpreter.getXResolution(); float res_y = myInterpreter.getYResolution(); long w = myInterpreter.getWidth(); // get height and width long h = myInterpreter.getHeight(); /* * if the page is landscape, we have to rotate the page; this is only done in PDF, the orig image bytestream is NOT rotated */ if (w > h) { LOGGER.debug("rotate image"); // must be rotated pdfImage.setRotationDegrees(90); // change width and height long dummy = w; w = h; h = dummy; // change the resolutions x and y float dummy2 = res_x; res_x = res_y; res_y = dummy2; } /* * check, if the image needs to be scaled, because it's bigger than A4 calculate the new scalefactor */ if ((w > page_w_pixel) || (h > page_h_pixel)) { LOGGER.debug("scale image to fit the page"); float scalefactor_w = page_w_pixel / w; float scalefactor_h = page_h_pixel / h; if (scalefactor_h < scalefactor_w) { scalefactor = scalefactor_h; } else { scalefactor = scalefactor_w; } w = (long) (w * scalefactor); h = (long) (h * scalefactor); } if (!scaled) { pdfImage.scalePercent((72f / res_x * 100) * scalefactor, (72f / res_y * 100) * scalefactor); } // center the image on the page // --------------------------------------------------------------- float y_offset = 0; // y - offset // get image size in cm; height float h_cm = (float) (h / (res_x / 2.54)); // float w_cm = (float) (w / (res_y / 2.54)); // and width if ((h_cm + 2) < (page_h / 10)) { y_offset = 2 * 72f / 2.54f; } float freespace_x = ((page_w_pixel - w) / res_x * 72f); float freespace_y = ((page_h_pixel - h) / res_y * 72f) - (y_offset); // set position add image pdfImage.setAbsolutePosition(freespace_x / 2, freespace_y); boolean result; try { result = pdfdoc.add(pdfImage); } catch (DocumentException e) { LOGGER.error(e); throw new PDFManagerException("DocumentException occured while adding the image to PDF", e); } if (!result) { // placing the image in the PDF was not successful throw new PDFManagerException("Image \"" + url.toString() + "\" can's be added to PDF! Error during placing image on page"); } // draw box around the image page // ------------------------------------------------------------------------------------------------ if (pagesizemode == PdfPageSize.A4BOX) { LOGGER.debug("draw box around the image page"); // draw a black frame around the image PdfContentByte pcb = writer.getDirectContent(); // calculate upper left corner of the box (measurment is // in points) float left_x = (freespace_x / 2); float left_y = freespace_y; // calculate the lower right corner of the box // (measurement is in points) float image_w_points = (w / res_x) * 72; float image_h_points = (h / res_y) * 72; pcb.setLineWidth(1f); pcb.stroke(); pcb.rectangle(left_x, left_y, image_w_points, image_h_points); pcb.stroke(); } } // end of: if (pagesizemode == PdfPageSize.ORIGINAL) { pdfImage = null; myInterpreter.clear(); // writer.freeReader(new PdfReader(pdfpage.getURL())); } // end of : if (pdfpage.getURL() != null) { // ------------------------------------------------------------------------------------------------ // it is a page from a PDF file which should be inserted // ------------------------------------------------------------------------------------------------ else if (pdfpage.getClass() == PDFPage.class && ((PDFPage) pdfpage).getPdfreader() != null) { PdfContentByte pdfcb = writer.getDirectContent(); PdfReader pdfreader = ((PDFPage) pdfpage).getPdfreader(); PdfImportedPage importpage = writer.getImportedPage(pdfreader, pdfpage.getPageNumber()); if (pagesizemode == PdfPageSize.ORIGINAL) { LOGGER.debug("creating orig pdf page"); Rectangle rect = pdfreader.getPageSize(pdfpage.getPageNumber()); try { pdfdoc.setPageSize(rect); pdfdoc.newPage(); // create new page } catch (Exception e1) { throw new PDFManagerException("Exception occured while creating new page in PDF", e1); } // add content pageadded++; pdfcb.addTemplate(importpage, 0, 0); } else { LOGGER.debug("creating A4 pdf page"); try { pdfdoc.setPageSize(PageSize.A4); pdfdoc.newPage(); // create new page } catch (Exception e1) { throw new PDFManagerException("Exception occured while creating new page in PDF", e1); } // add content pageadded++; pdfcb.addTemplate(importpage, 0, 0); // draw box // if (pagesizemode == PdfPageSize.A4BOX) { // FIXME: nichts implementiert ? // } } } // handle pagename if (imageNames != null) { String pagename = imageNames.get(imageKey); if (pagename != null) { pagelabels.addPageLabel(pageadded, PdfPageLabels.EMPTY, pagename); } else { pagelabels.addPageLabel(pageadded, PdfPageLabels.EMPTY, "unnumbered"); } } // handle bookmarks and set destinator for bookmarks LOGGER.debug("handle bookmark(s) for page"); PdfDestination destinator = new PdfDestination(PdfDestination.FIT); setBookmarksForPage(writer, destinator, imageKey); // the key in the writer.flush(); // mashMap is the pagenumber } // end of while iterator over all pages } return pagelabels; }
From source file:dev.ztgnrw.htmlconverter.HtmlConverter.java
/** * Attachment to PDF File/*from ww w .j a v a 2 s. c o m*/ * * @param src * @param output * @param attachment_uri * @throws IOException * @throws DocumentException */ public static void addFileToPDF(String src, String output, String attachment_uri) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); addFile(reader, output, attachment_uri); }
From source file:dev.ztgnrw.htmlconverter.HtmlConverter.java
/** * Attachment to PDFByteArray/*from w w w . j a va2 s. c om*/ * @param fos * @param output * @param attachment_uri * @throws IOException * @throws DocumentException */ public static void addFileToByteArray(ByteArrayOutputStream fos, String output, String attachment_uri) throws IOException, DocumentException { PdfReader reader = new PdfReader(fos.toByteArray()); addFile(reader, output, attachment_uri); }
From source file:docx4j.TextSubstitution.java
License:Apache License
private int getPageCount() throws IOException { int result;/*from w w w.j a v a 2s .com*/ // get the number of pages in the file PdfReader reader = new PdfReader(this.filePath); result = reader.getNumberOfPages(); reader.close(); return result; }
From source file:docx4j.TextSubstitution.java
License:Apache License
private String addWaterMark() throws IOException, DocumentException { String result = null;//from w ww . ja v a 2 s. c om String newFileName = this.getFolderPath() + "wm" + this.fileName; try { // try to delete the file if it already exists so that we refresh the watermark // if it fails then at least we have the existing version which can be deleted manually File target = new File(newFileName); if (target.exists()) { if (!target.delete()) { return "existing"; } } // add the watermark PdfReader reader = new PdfReader(this.filePath); PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(newFileName)); Image watermark_image = Image.getInstance(this.getFolderPath() + "doc-watermark.png"); watermark_image.setAbsolutePosition(5, 5); int i = 0; PdfContentByte add_watermark; // loop the pages adding the watermark while (i < reader.getNumberOfPages()) { i++; add_watermark = stamp.getUnderContent(i); add_watermark.addImage(watermark_image); } stamp.close(); reader.close(); } catch (Exception e) { result = e.getMessage(); } return result; }
From source file:dynamicform.Stamper.java
License:Apache License
public Stamper(InputStream inputPath, OutputStream outputPath) throws IOException, DocumentException { PdfReader reader = new PdfReader(inputPath); stamper = new PdfStamper(reader, outputPath); reader.close();/*from w w w. jav a 2s .c o m*/ fields = stamper.getAcroFields(); }