Example usage for com.lowagie.text.pdf PdfReader PdfReader

List of usage examples for com.lowagie.text.pdf PdfReader PdfReader

Introduction

In this page you can find the example usage for com.lowagie.text.pdf PdfReader PdfReader.

Prototype

public PdfReader(PdfReader reader) 

Source Link

Document

Creates an independent duplicate.

Usage

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();
}