Example usage for com.itextpdf.text.pdf PdfCopy PdfCopy

List of usage examples for com.itextpdf.text.pdf PdfCopy PdfCopy

Introduction

In this page you can find the example usage for com.itextpdf.text.pdf PdfCopy PdfCopy.

Prototype

public PdfCopy(Document document, OutputStream os) throws DocumentException 

Source Link

Document

Constructor

Usage

From source file:com.wabacus.system.assistant.PdfAssistant.java

License:Open Source License

public ByteArrayOutputStream showReportDataOnPdfWithTpl(ReportRequest rrequest, IComponentConfigBean ccbean) {
    boolean ispdfprint = rrequest.isPdfPrintAction();
    PDFExportBean pdfbean = null;/*  w w  w  .ja v  a2  s  . c  om*/
    if (ispdfprint) {
        pdfbean = ccbean.getPdfPrintBean();
    } else if (ccbean.getDataExportsBean() != null) {//PDF?PDF<dataexport/>
        pdfbean = (PDFExportBean) ccbean.getDataExportsBean().getDataExportBean(Consts.DATAEXPORT_PDF);
    }
    if (pdfbean == null || pdfbean.getPdftemplate() == null || pdfbean.getPdftemplate().trim().equals(""))
        return null;
    if (pdfbean.getLstIncludeApplicationids() == null || pdfbean.getLstIncludeApplicationids().size() == 0)
        return null;
    Map<String, AbsReportType> mReportTypeObjs = new HashMap<String, AbsReportType>();
    IComponentType cctypeObj;
    AbsReportType reportTypeObjTmp;
    int maxrowcount = 0;
    for (String appidTmp : pdfbean.getLstIncludeApplicationids()) {//?PDF
        if (mReportTypeObjs.containsKey(appidTmp))
            continue;
        cctypeObj = rrequest.getComponentTypeObj(appidTmp, null, false);
        if (cctypeObj == null || !(cctypeObj instanceof AbsReportType))
            continue;
        reportTypeObjTmp = (AbsReportType) cctypeObj;
        mReportTypeObjs.put(appidTmp, reportTypeObjTmp);
        if (reportTypeObjTmp.getLstReportData() != null
                && reportTypeObjTmp.getLstReportData().size() > maxrowcount) {
            maxrowcount = reportTypeObjTmp.getLstReportData().size();
        }
    }
    if (mReportTypeObjs.size() == 0 || maxrowcount == 0)
        return null;
    try {
        Document document = new Document();
        ByteArrayOutputStream baosResult = new ByteArrayOutputStream();
        PdfCopy pdfCopy = new PdfCopy(document, baosResult);
        document.open();
        for (int i = 0; i < maxrowcount; i++) {
            addPdfPageToDocument(pdfCopy,
                    showReportOneRowDataOnPdf(rrequest, mReportTypeObjs, ccbean, pdfbean, i));
        }
        document.close();
        return baosResult;
    } catch (Exception e) {
        throw new WabacusRuntimeException("" + ccbean.getPath() + "?pdf", e);
    }
}

From source file:com.wabacus.WabacusFacade.java

License:Open Source License

private static void exportReportDataOnPDF(String pageid, ReportRequest rrequest, WabacusResponse wresponse) {
    boolean success = true;
    try {//from   w w  w .j a  v a2 s .  c om
        rrequest.setWResponse(wresponse);
        wresponse.setRRequest(rrequest);
        rrequest.init(pageid);
        if (rrequest.getLstAllReportBeans() == null || rrequest.getLstAllReportBeans().size() == 0) {
            throw new WabacusRuntimeException("?" + pageid
                    + "?plainexcel???");
        }
        Document document = new Document();
        ByteArrayOutputStream baosResult = new ByteArrayOutputStream();
        PdfCopy pdfCopy = new PdfCopy(document, baosResult);
        document.open();
        boolean ispdfprint = rrequest.isPdfPrintAction();
        for (IComponentConfigBean ccbeanTmp : rrequest.getLstComponentBeans()) {//??PDF?
            PDFExportBean pdfbeanTmp = null;
            if (ispdfprint) {
                pdfbeanTmp = ccbeanTmp.getPdfPrintBean();
            } else if (ccbeanTmp.getDataExportsBean() != null) {
                pdfbeanTmp = (PDFExportBean) ccbeanTmp.getDataExportsBean()
                        .getDataExportBean(Consts.DATAEXPORT_PDF);
            }
            if (pdfbeanTmp != null && pdfbeanTmp.getPdftemplate() != null
                    && !pdfbeanTmp.getPdftemplate().trim().equals("")) {
                PdfAssistant.getInstance().addPdfPageToDocument(pdfCopy,
                        PdfAssistant.getInstance().showReportDataOnPdfWithTpl(rrequest, ccbeanTmp));
            }
        }
        AbsReportType reportTypeObjTmp;
        for (ReportBean rbTmp : rrequest.getLstAllReportBeans()) {
            reportTypeObjTmp = (AbsReportType) rrequest.getComponentTypeObj(rbTmp, null, false);
            if (rrequest.isReportInPdfTemplate(rbTmp.getId()))
                continue;//??PDF???
            PdfAssistant.getInstance().addPdfPageToDocument(pdfCopy, reportTypeObjTmp.displayOnPdf());
        }
        document.close();
        BufferedOutputStream bos = null;
        if (rrequest.isExportToLocalFile()) {
            bos = new BufferedOutputStream(new FileOutputStream(new File(rrequest.getDataExportFilepath())));
        } else {
            if (!ispdfprint) {
                String title = WabacusAssistant.getInstance().encodeAttachFilename(rrequest.getRequest(),
                        rrequest.getDataExportFilename());
                wresponse.getResponse().setHeader("Content-disposition",
                        "attachment;filename=" + title + ".pdf");
            }
            wresponse.getResponse().setContentLength(baosResult.size());
            bos = new BufferedOutputStream(wresponse.getResponse().getOutputStream());
        }
        baosResult.writeTo(bos);
        bos.close();
        baosResult.close();
        if (rrequest.isExportToLocalFile() && rrequest.isDataexport_localstroagezip()) {
            tarDataFile(rrequest);
        }
    } catch (WabacusRuntimeTerminateException wrwe) {
        if (wresponse.getStatecode() == Consts.STATECODE_FAILED) {
            success = false;
        }
    } catch (Exception wre) {
        wresponse.setStatecode(Consts.STATECODE_FAILED);
        log.error("?" + rrequest.getPagebean().getId() + "", wre);
        success = false;
    } finally {
        rrequest.destroy(success);
    }
    doPostDataExport(rrequest, wresponse);
}

From source file:com.whty.transform.common.utils.TransformUtils.java

public static boolean pdfTopdf(String docpath) {
    File pdfPath = new File(SysConf.getString("path.output") + docpath + "/pdf/");
    if (!pdfPath.exists()) {
        pdfPath.mkdirs();/*w  w w. j a va2 s .  c o m*/
    }
    // pdf?
    try {
        PdfReader reader = new PdfReader(SysConf.getString("path.input") + docpath);
        com.itextpdf.text.Document document = new com.itextpdf.text.Document(reader.getPageSize(1));
        PdfCopy copy = new PdfCopy(document,
                new FileOutputStream(pdfPath.getAbsoluteFile() + "/" + transFileName + ".pdf"));
        document.open();
        for (int i = 1; i <= reader.getNumberOfPages(); i++) {
            document.newPage();
            PdfImportedPage page = copy.getImportedPage(reader, i);
            copy.addPage(page);
        }
        document.close();
        return true;
    } catch (IOException e) {
        LOGGER.error(e.getMessage(), e);
    } catch (DocumentException e) {
        LOGGER.error(e.getMessage(), e);
    }
    return false;
}

From source file:de.mat.utils.pdftools.PdfExtractEmptyPages.java

License:Mozilla Public License

/**
 * <h4>FeatureDomain:</h4>/*from w w  w .  j  a v a2 s  .  c om*/
 *     PublishingTools
 * <h4>FeatureDescription:</h4>
 *     reads pdfSourceFile and adds pages to pdfRemovedFile if empty, or to 
 *     pdfDestinationFile if not empty
 * <h4>FeatureResult:</h4>
 *   <ul>
 *     <li>updates pdfDestinationFile - add all pages which are not empty
 *     <li>updates pdfRemovedFile - add all empty pages
 *   </ul> 
 * <h4>FeatureKeywords:</h4>
 *     PDF Publishing
 * @param pdfSourceFile - source pdf-file
 * @param pdfDestinationFile - pdf with all not empty pages
 * @param pdfRemovedFile - pdf with all empty pages
 * @throws Exception
 */
public static void removeBlankPdfPages(String pdfSourceFile, String pdfDestinationFile, String pdfRemovedFile)
        throws Exception {
    // create readerOrig
    PdfReader readerOrig = new PdfReader(pdfSourceFile);

    // create writerTrimmed which bases on readerOrig
    Document documentTrimmed = new Document(readerOrig.getPageSizeWithRotation(1));
    PdfCopy writerTrimmed = new PdfCopy(documentTrimmed, new FileOutputStream(pdfDestinationFile));
    documentTrimmed.open();

    // create writerRemoved which bases on readerOrig
    Document documentRemoved = new Document(readerOrig.getPageSizeWithRotation(1));
    PdfCopy writerRemoved = new PdfCopy(documentRemoved, new FileOutputStream(pdfRemovedFile));
    documentRemoved.open();

    // extract and copy empty pages
    addTrimmedPages(pdfSourceFile, readerOrig, writerTrimmed, writerRemoved, true);

    // close everything
    documentTrimmed.close();
    writerTrimmed.close();
    documentRemoved.close();
    writerRemoved.close();
    readerOrig.close();
}

From source file:de.mat.utils.pdftools.PdfMerge.java

License:Mozilla Public License

/**
 * <h4>FeatureDomain:</h4>/*  w  ww  .  j  a v  a 2  s .  c  o  m*/
 *     PublishingTools
 * <h4>FeatureDescription:</h4>
 *     merge pdfs from lstBookMarks to fileNew and trim empty pages if flgTrim 
 *     is set
 * <h4>FeatureResult:</h4>
 *   <ul>
 *     <li>create PDF - fileNew
 *     <li>updates lstBookMarks - updates PAGE (firstPageNum) and 
 *                                PAGES (countPage= per Bookmark
 *   </ul> 
 * <h4>FeatureKeywords:</h4>
 *     PDF Publishing
 * @param lstBookMarks - list of Bookmark (files to merge)
 * @param fileNew - destination PDF filename
 * @param flgTrim - trim empty pages
 * @throws Exception
 */
public static void mergePdfs(List<Bookmark> lstBookMarks, String fileNew, boolean flgTrim) throws Exception {
    // FirstFile
    Map curBookMark = (Map) lstBookMarks.get(0);
    String curFileName = (String) curBookMark.get("SRC");

    // Neues Dokument anlegen aus 1. Quelldokument anlegen
    PdfReader reader = new PdfReader(curFileName);
    Document documentNew = new Document(reader.getPageSizeWithRotation(1));
    reader.close();
    PdfCopy writerNew = new PdfCopy(documentNew, new FileOutputStream(fileNew));
    documentNew.open();

    int siteNr = 1;
    for (Iterator iter = lstBookMarks.iterator(); iter.hasNext();) {
        curBookMark = (Map) iter.next();
        curFileName = (String) curBookMark.get("SRC");

        if (LOGGER.isInfoEnabled())
            LOGGER.info("add File:" + curFileName);

        // copy Page
        reader = new PdfReader(curFileName);
        int newPages = PdfExtractEmptyPages.addTrimmedPages(curFileName, reader, writerNew, (PdfCopy) null,
                flgTrim);
        reader.close();

        // update BookMark
        curBookMark.put("PAGE", new Integer(siteNr));
        curBookMark.put("PAGES", new Integer(newPages));
        siteNr += newPages;
    }
    documentNew.close();
    writerNew.close();
}

From source file:de.mat.utils.pdftools.PdfSort4Print.java

License:Mozilla Public License

public static void sortPdfPages(String pdfSourceFile, String pdfDestinationFile, int perPage) throws Exception {
    PdfImportedPage page = null;/*from w ww . j  a  v  a  2s  . c  o  m*/

    if (perPage != 2 && perPage != 4) {
        throw new IllegalArgumentException(
                "Sorry, perPage must only be " + "2 or 4. All other is not implemented yet :-(");
    }

    // #######
    // # fill to odd pagecount
    // #######

    // create reader
    PdfReader readerOrig = new PdfReader(pdfSourceFile);

    // calc data
    int countPage = readerOrig.getNumberOfPages();
    int blaetter = new Double(Math.ceil((countPage + 0.0) / perPage / 2)).intValue();
    int zielPages = (blaetter * perPage * 2) - countPage;

    if (LOGGER.isInfoEnabled())
        LOGGER.info("CurPages: " + countPage + " Blaetter:" + blaetter + " AddPage:" + zielPages);

    // add sites
    String oddFile = pdfDestinationFile + ".filled.pdf";
    PdfStamper stamper = new PdfStamper(readerOrig, new FileOutputStream(oddFile));
    // add empty pages
    for (int i = 1; i <= zielPages; i++) {
        if (LOGGER.isDebugEnabled())
            LOGGER.debug("addEmptyPage: " + i);
        stamper.insertPage(readerOrig.getNumberOfPages() + 1, readerOrig.getPageSizeWithRotation(1));
    }
    stamper.close();
    readerOrig.close();

    // ########
    // # read new odd document and sort pages
    // ########
    // step 1: create new reader
    PdfReader readerOdd = new PdfReader(oddFile);

    // create writerSorted
    String sortedFile = pdfDestinationFile;
    Document documentSorted = new Document(readerOrig.getPageSizeWithRotation(1));
    PdfCopy writerSorted = new PdfCopy(documentSorted, new FileOutputStream(sortedFile));
    documentSorted.open();

    // add pages in calced order
    List<Integer> lstPageNr = new ArrayList<Integer>();
    int pageCount = readerOdd.getNumberOfPages();
    int startseite = 1;
    for (int i = 1; i <= blaetter; i++) {
        if (perPage == 2) {
            startseite = ((i - 1) * perPage) + 1;

            if (LOGGER.isDebugEnabled())
                LOGGER.debug("Blatt:" + i + " Startseite: " + startseite);
            // front top
            lstPageNr.add(new Integer(pageCount - startseite + 1));
            // front bottom
            lstPageNr.add(new Integer(startseite));

            // back top
            lstPageNr.add(new Integer(startseite + 1));
            // back bottom
            lstPageNr.add(new Integer(pageCount - startseite + 1 - 1));
        } else if (perPage == 4) {
            startseite = ((i - 1) * perPage) + 1;

            if (LOGGER.isDebugEnabled())
                LOGGER.debug("Blatt:" + i + " Startseite: " + startseite);

            // front top left
            lstPageNr.add(new Integer(pageCount - startseite + 1));
            // front top right
            lstPageNr.add(new Integer(startseite));
            // front bottom lefts
            lstPageNr.add(new Integer(pageCount - startseite + 1 - 2));
            // front bottom right
            lstPageNr.add(new Integer(startseite + 2));

            // back top left
            lstPageNr.add(new Integer(startseite + 1));
            // back top right
            lstPageNr.add(new Integer(pageCount - startseite + 1 - 1));
            // back bottom left
            lstPageNr.add(new Integer(startseite + 1 + 2));
            // back bottom right
            lstPageNr.add(new Integer(pageCount - startseite + 1 - 1 - 2));
        } else {
            throw new IllegalArgumentException(
                    "Sorry, perPage must " + "only be 2 or 4. All other is not implemented yet :-(");
        }
    }
    if (LOGGER.isInfoEnabled())
        LOGGER.info("Seiten:" + lstPageNr.size());

    // copy pages
    for (Iterator iter = lstPageNr.iterator(); iter.hasNext();) {
        int pageNum = ((Integer) iter.next()).intValue();
        if (LOGGER.isDebugEnabled())
            LOGGER.debug("addSortPage: " + pageNum);
        page = writerSorted.getImportedPage(readerOdd, pageNum);
        writerSorted.addPage(page);
    }

    // close everything
    documentSorted.close();
    writerSorted.close();
    readerOdd.close();

    // delete Tmp-File
    File file = new File(oddFile);
    file.delete();
}

From source file:edu.clemson.lph.civet.CVIFileController.java

License:Open Source License

/**
 * From the current pdfDecoder, extract the page(s) in aPagesInCurrent to a new pdfData buffer as output stream.
 * @param aPages int[]//from w ww  .j  a  v  a2s.c  om
 * @return byte[]
 */
public byte[] extractPagesToNewPDF() {
    ByteArrayOutputStream baOut = new ByteArrayOutputStream();
    try {
        byte[] pdfDataIn = rawPdfBytes;
        PdfReader reader = new PdfReader(pdfDataIn);
        com.itextpdf.text.Document document = new com.itextpdf.text.Document();
        PdfCopy writer = new PdfCopy(document, baOut);
        document.open();
        for (Integer iPage : aPagesInCurrent) {
            PdfImportedPage pip = writer.getImportedPage(reader, iPage.intValue());
            writer.addPage(pip);
        }
        document.close();
    } catch (IOException ioe) {
        logger.info("IO error extracting pages to byte array", ioe);
        return rawPdfBytes;
    } catch (DocumentException de) {
        logger.info(de.getMessage() + "\nDocument error extracting pages to byte array");
        return rawPdfBytes;
    }
    return baOut.toByteArray();
}

From source file:edu.clemson.lph.pdfgen.MergePDF.java

License:Open Source License

public static void concatPDFs(List<InputStream> pdfInputStreams, OutputStream outputStream, boolean paginate) {
    Document document = new Document();
    try {/*  www  .j  av  a 2 s. c  o m*/
        PdfCopy cp = new PdfCopy(document, outputStream);
        document.open();
        Iterator<InputStream> iteratorPDFReader = pdfInputStreams.iterator();

        // Loop through the PDF streams and add to the output.
        while (iteratorPDFReader.hasNext()) {
            InputStream is = iteratorPDFReader.next();
            PdfReader pdfReader = new PdfReader(is);
            int n = pdfReader.getNumberOfPages();
            for (int pageNo = 0; pageNo < n;) {
                pdfReader.getPageN(pageNo);
                cp.addPage(cp.getImportedPage(pdfReader, ++pageNo));
            }
        }
        document.close();
        outputStream.flush();
        outputStream.close();
    } catch (Exception e) {
        logger.error(e);
    }
}

From source file:edu.clemson.lph.pdfgen.PDFUtils.java

License:Open Source License

/**
 * Given an array of bytes from a PDF determine whether at least the first page can be extracted
 * by iText;//from  w  ww  .  j  av  a2 s.c om
 * @param byte[] data to test parse
 * @return byte[]
 */
public static boolean canExtractPages(byte[] pdfDataIn) {
    boolean bRet = false;
    ByteArrayOutputStream baOut = new ByteArrayOutputStream();
    try {
        PdfReader reader = new PdfReader(pdfDataIn);
        com.itextpdf.text.Document document = new com.itextpdf.text.Document();
        PdfCopy writer = new PdfCopy(document, baOut);
        document.open();
        PdfImportedPage pip = writer.getImportedPage(reader, 1);
        writer.addPage(pip);
        document.close();
        byte[] pdfDataOut = baOut.toByteArray();
        int iLen = pdfDataOut.length;
        if (iLen > 0)
            bRet = true;
    } catch (IOException ioe) {
        logger.error(ioe.getMessage() + "\nIO error extracting pages to byte array\n");
        bRet = false;
    } catch (DocumentException de) {
        logger.error(de.getMessage() + "\nDocument error extracting pages to byte array");
        bRet = false;
    }
    return bRet;
}

From source file:eu.mrbussy.pdfsplitter.Application.java

License:Open Source License

/**
 * Split the given PDF file into multiple files using pages.
 * //www.j  av  a  2 s  .  co  m
 * @param filename
 *            - Name of the PDF to split
 * @param useSubFolder
 *            - Use a separate folder to place the files in.
 */
public static void SplitFile(File file, boolean useSubFolder) {
    PdfReader reader = null;
    String format = null;

    if (useSubFolder)
        format = "%1$s%2$s%4$s%2$s_%%03d.%3$s";
    else
        format = "%1$s%2$s_%%03d.%3$s";

    String splitFile = String.format(format, FilenameUtils.getFullPath(file.getAbsolutePath()),
            FilenameUtils.getBaseName(file.getAbsolutePath()),
            FilenameUtils.getExtension(file.getAbsolutePath()), IOUtils.DIR_SEPARATOR);

    try {
        reader = new PdfReader(new FileInputStream(file));

        if (reader.getNumberOfPages() > 0) {
            for (int pageNum = 1; pageNum <= reader.getNumberOfPages(); pageNum++) {
                System.out.println(String.format(splitFile, pageNum));
                String filename = String.format(splitFile, pageNum);
                Document document = new Document(reader.getPageSizeWithRotation(1));
                PdfCopy writer = new PdfCopy(document, new FileOutputStream(filename));
                document.open();
                // Copy the page from the original
                PdfImportedPage page = writer.getImportedPage(reader, pageNum);
                writer.addPage(page);
                document.close();
                writer.close();
            }
        }
    } catch (Exception ex) {
        // TODO Implement exception handling
        ex.printStackTrace(System.err);
    } finally {
        if (reader != null)
            // Always close the stream
            reader.close();
    }
}