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

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

Introduction

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

Prototype

public PdfReader(final PdfReader reader) 

Source Link

Document

Creates an independent duplicate.

Usage

From source file:org.smap.sdal.managers.MiscPDFManager.java

License:Open Source License

public void createUsagePdf(Connection sd, OutputStream outputStream, String basePath,
        HttpServletResponse response, int o_id, int month, int year, String period, String org_name) {

    PreparedStatement pstmt = null;

    if (org_name == null) {
        org_name = "None";
    }//from ww  w  .  j ava  2 s  . co m

    try {

        String filename;

        // Get fonts and embed them
        String os = System.getProperty("os.name");
        log.info("Operating System:" + os);

        if (os.startsWith("Mac")) {
            FontFactory.register("/Library/Fonts/fontawesome-webfont.ttf", "Symbols");
            FontFactory.register("/Library/Fonts/Arial Unicode.ttf", "default");
            FontFactory.register("/Library/Fonts/NotoNaskhArabic-Regular.ttf", "arabic");
            FontFactory.register("/Library/Fonts/NotoSans-Regular.ttf", "notosans");
        } else if (os.indexOf("nix") >= 0 || os.indexOf("nux") >= 0 || os.indexOf("aix") > 0) {
            // Linux / Unix
            FontFactory.register("/usr/share/fonts/truetype/fontawesome-webfont.ttf", "Symbols");
            FontFactory.register("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf", "default");
            FontFactory.register("/usr/share/fonts/truetype/NotoNaskhArabic-Regular.ttf", "arabic");
            FontFactory.register("/usr/share/fonts/truetype/NotoSans-Regular.ttf", "notosans");
        }

        Symbols = FontFactory.getFont("Symbols", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12);
        defaultFont = FontFactory.getFont("default", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 10);

        filename = org_name + "_" + year + "_" + month + ".pdf";

        /*
         * Get the usage results
         */
        String sql = "SELECT users.id as id," + "users.ident as ident, " + "users.name as name, "
                + "(select count (*) from upload_event ue, subscriber_event se " + "where ue.ue_id = se.ue_id "
                + "and se.status = 'success' " + "and se.subscriber = 'results_db' "
                + "and extract(month from upload_time) = ? " // current month
                + "and extract(year from upload_time) = ? " // current year
                + "and ue.user_name = users.ident) as month, "
                + "(select count (*) from upload_event ue, subscriber_event se " + "where ue.ue_id = se.ue_id "
                + "and se.status = 'success' " + "and se.subscriber = 'results_db' "
                + "and ue.user_name = users.ident) as all_time " + "from users " + "where users.o_id = ? "
                + "and not users.temporary " + "order by users.ident;";

        pstmt = sd.prepareStatement(sql);
        pstmt.setInt(1, month);
        pstmt.setInt(2, year);
        pstmt.setInt(3, o_id);
        log.info("Get Usage Data: " + pstmt.toString());

        // If the PDF is to be returned in an http response then set the file name now
        if (response != null) {
            log.info("Setting filename to: " + filename);
            setFilenameInResponse(filename, response);
        }

        /*
         * Get a template for the PDF report if it exists
         * The template name will be the same as the XLS form name but with an extension of pdf
         */
        String stationaryName = basePath + File.separator + "misc" + File.separator + "UsageReportTemplate.pdf";
        File stationaryFile = new File(stationaryName);

        ByteArrayOutputStream baos = null;
        ByteArrayOutputStream baos_s = null;
        PdfWriter writer = null;

        /*
         * Create document in two passes, the second pass adds the letter head
         */

        // Create the underlying document as a byte array
        Document document = new Document(PageSize.A4);
        document.setMargins(marginLeft, marginRight, marginTop_1, marginBottom_1);

        if (stationaryFile.exists()) {
            baos = new ByteArrayOutputStream();
            baos_s = new ByteArrayOutputStream();
            writer = PdfWriter.getInstance(document, baos);
        } else {
            writer = PdfWriter.getInstance(document, outputStream);
        }

        writer.setInitialLeading(12);
        writer.setPageEvent(new PageSizer());
        document.open();

        // Write the usage data
        ResultSet resultSet = pstmt.executeQuery();

        PdfPTable table = new PdfPTable(4);

        // Add the header row
        table.getDefaultCell().setBorderColor(BaseColor.LIGHT_GRAY);
        table.getDefaultCell().setBackgroundColor(VLG);

        table.addCell("User Id");
        table.addCell("User Name");
        table.addCell("Usage in Period");
        table.addCell("All Time Usage");

        table.setHeaderRows(1);

        // Add the user data
        int total = 0;
        int totalAllTime = 0;

        table.getDefaultCell().setBackgroundColor(null);
        while (resultSet.next()) {
            String ident = resultSet.getString("ident");
            String name = resultSet.getString("name");
            String monthUsage = resultSet.getString("month");
            int monthUsageInt = resultSet.getInt("month");
            String allTime = resultSet.getString("all_time");
            int allTimeInt = resultSet.getInt("all_time");

            table.addCell(ident);
            table.addCell(name);
            table.addCell(monthUsage);
            table.addCell(allTime);

            total += monthUsageInt;
            totalAllTime += allTimeInt;

        }

        // Add the totals
        table.getDefaultCell().setBackgroundColor(VLG);

        table.addCell("Totals: ");
        table.addCell(" ");
        table.addCell(String.valueOf(total));
        table.addCell(String.valueOf(totalAllTime));

        document.add(table);
        document.close();

        if (stationaryFile.exists()) {

            // Step 2 - Populate the fields in the stationary
            PdfReader s_reader = new PdfReader(stationaryName);
            PdfStamper s_stamper = new PdfStamper(s_reader, baos_s);
            AcroFields pdfForm = s_stamper.getAcroFields();
            Set<String> fields = pdfForm.getFields().keySet();
            for (String key : fields) {
                log.info("Field: " + key);
            }

            pdfForm.setField("billing_period", period);
            pdfForm.setField("organisation", org_name);

            s_stamper.setFormFlattening(true);
            s_stamper.close();

            // Step 3 - Apply the stationary to the underlying document
            PdfReader reader = new PdfReader(baos.toByteArray()); // Underlying document
            PdfReader f_reader = new PdfReader(baos_s.toByteArray()); // Filled in stationary
            PdfStamper stamper = new PdfStamper(reader, outputStream);
            PdfImportedPage letter1 = stamper.getImportedPage(f_reader, 1);
            int n = reader.getNumberOfPages();
            PdfContentByte background;
            for (int i = 0; i < n; i++) {
                background = stamper.getUnderContent(i + 1);
                if (i == 0) {
                    background.addTemplate(letter1, 0, 0);
                }
            }

            stamper.close();
            reader.close();

        }

    } catch (SQLException e) {
        log.log(Level.SEVERE, "SQL Error", e);

    } catch (Exception e) {
        log.log(Level.SEVERE, "Exception", e);

    } finally {
        try {
            if (pstmt != null) {
                pstmt.close();
            }
        } catch (SQLException e) {
        }
    }

}

From source file:org.smap.sdal.managers.PDFSurveyManager.java

License:Open Source License

public String createPdf(OutputStream outputStream, String basePath, String serverRoot, String remoteUser,
        String language, boolean generateBlank, String filename, boolean landscape, // Set true if landscape
        HttpServletResponse response) throws Exception {

    if (language != null) {
        language = language.replace("'", "''"); // Escape apostrophes
    } else {//w  ww .  ja v a  2 s .  co m
        language = "none";
    }

    mExcludeEmpty = survey.exclude_empty;

    User user = null;

    ServerManager serverManager = new ServerManager();
    ServerData serverData = serverManager.getServer(sd, localisation);

    UserManager um = new UserManager(localisation);
    int[] repIndexes = new int[20]; // Assume repeats don't go deeper than 20 levels

    Document document = null;
    PdfWriter writer = null;
    PdfReader reader = null;
    PdfStamper stamper = null;

    try {

        // Get fonts and embed them
        String os = System.getProperty("os.name");
        log.info("Operating System:" + os);

        if (os.startsWith("Mac")) {
            FontFactory.register("/Library/Fonts/fontawesome-webfont.ttf", "Symbols");
            //FontFactory.register("/Library/Fonts/Arial Unicode.ttf", "default");
            FontFactory.register("/Library/Fonts/NotoNaskhArabic-Regular.ttf", "arabic");
            FontFactory.register("/Library/Fonts/NotoSans-Regular.ttf", "notosans");
            FontFactory.register("/Library/Fonts/NotoSans-Bold.ttf", "notosansbold");
            FontFactory.register("/Library/Fonts/NotoSansBengali-Regular.ttf", "bengali");
            FontFactory.register("/Library/Fonts/NotoSansBengali-Bold.ttf", "bengalibold");
        } else if (os.indexOf("nix") >= 0 || os.indexOf("nux") >= 0 || os.indexOf("aix") > 0) {
            // Linux / Unix
            FontFactory.register("/usr/share/fonts/truetype/fontawesome-webfont.ttf", "Symbols");
            FontFactory.register("/usr/share/fonts/truetype/NotoNaskhArabic-Regular.ttf", "arabic");
            FontFactory.register("/usr/share/fonts/truetype/NotoSans-Regular.ttf", "notosans");
            FontFactory.register("/usr/share/fonts/truetype/NotoSans-Bold.ttf", "notosansbold");
            FontFactory.register("/usr/share/fonts/truetype/NotoSansBengali-Regular.ttf", "bengali");
            FontFactory.register("/usr/share/fonts/truetype/NotoSansBengali-Bold.ttf", "bengalibold");
        }

        Symbols = FontFactory.getFont("Symbols", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12);
        defaultFontLink = FontFactory.getFont("Symbols", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12);
        defaultFont = FontFactory.getFont("notosans", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 10);
        defaultFontBold = FontFactory.getFont("notosansbold", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 10);
        arabicFont = FontFactory.getFont("arabic", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 10);
        bengaliFont = FontFactory.getFont("bengali", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 10);
        bengaliFontBold = FontFactory.getFont("bengalibold", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 10);

        defaultFontLink.setColor(BaseColor.BLUE);

        /*
         * Get the results and details of the user that submitted the survey
         */

        log.info("User Ident who submitted the survey: " + survey.instance.user);
        String userName = survey.instance.user;
        if (userName == null) {
            userName = remoteUser;
        }
        if (userName != null) {
            user = um.getByIdent(sd, userName);
        }

        // If a filename was not specified then get one from the survey data
        // This filename is returned to the calling program so that it can be used as a permanent name for the temporary file created here
        // If the PDF is to be returned in an http response then the header is set now before writing to the output stream
        log.info("Filename passed to createPDF is: " + filename);
        if (filename == null) {
            filename = survey.getInstanceName() + ".pdf";
        } else {
            if (!filename.endsWith(".pdf")) {
                filename += ".pdf";
            }
        }

        // If the PDF is to be returned in an http response then set the file name now
        if (response != null) {
            log.info("Setting filename to: " + filename);
            GeneralUtilityMethods.setFilenameInResponse(filename, response);
        }

        /*
         * Get a template for the PDF report if it exists
         * The template name will be the same as the XLS form name but with an extension of pdf
         */
        File templateFile = GeneralUtilityMethods.getPdfTemplate(basePath, survey.displayName, survey.p_id);

        /*
         * Get dependencies between Display Items, for example if a question result should be added to another
         *  question's results
         */
        GlobalVariables gv = new GlobalVariables();
        if (!generateBlank) {
            for (int i = 0; i < survey.instance.results.size(); i++) {
                getDependencies(gv, survey.instance.results.get(i), survey, i);
            }
        }
        gv.mapbox_key = serverData.mapbox_default;
        int oId = GeneralUtilityMethods.getOrganisationId(sd, remoteUser);

        languageIdx = GeneralUtilityMethods.getLanguageIdx(survey, language);
        if (templateFile.exists()) {

            log.info("PDF Template Exists");
            String templateName = templateFile.getAbsolutePath();

            reader = new PdfReader(templateName);
            stamper = new PdfStamper(reader, outputStream);

            for (int i = 0; i < survey.instance.results.size(); i++) {
                fillTemplate(gv, stamper.getAcroFields(), survey.instance.results.get(i), basePath, null, i,
                        serverRoot, stamper, oId);
            }
            if (user != null) {
                fillTemplateUserDetails(stamper.getAcroFields(), user, basePath);
            }
            stamper.setFormFlattening(true);

        } else {
            log.info("++++No template exists creating a pdf file programmatically");

            /*
             * Create a PDF without the stationary
             * If we need to add a letter head then create document in two passes, the second pass adds the letter head
             * Else just create the document directly in a single pass
             */
            Parser parser = getXMLParser();

            // Step 1 - Create the underlying document as a byte array
            if (landscape) {
                document = new Document(PageSize.A4.rotate());
            } else {
                document = new Document(PageSize.A4);
            }
            document.setMargins(marginLeft, marginRight, marginTop_1, marginBottom_1);
            writer = PdfWriter.getInstance(document, outputStream);

            writer.setInitialLeading(12);

            writer.setPageEvent(new PdfPageSizer(survey.displayName, survey.projectName, user, basePath, null,
                    marginLeft, marginRight, marginTop_2, marginBottom_2));
            document.open();

            // If this form has data maintain a list of parent records to lookup ${values}
            ArrayList<ArrayList<Result>> parentRecords = null;
            if (!generateBlank) {
                parentRecords = new ArrayList<ArrayList<Result>>();
            }

            for (int i = 0; i < survey.instance.results.size(); i++) {
                processForm(parser, document, survey.instance.results.get(i), basePath, serverRoot,
                        generateBlank, 0, i, repIndexes, gv, false, parentRecords, remoteUser, oId);
            }

            fillNonTemplateUserDetails(document, user, basePath);

            // Add appendix
            if (gv.hasAppendix) {
                document.newPage();
                document.add(new Paragraph("Appendix", defaultFontBold));

                for (int i = 0; i < survey.instance.results.size(); i++) {
                    processForm(parser, document, survey.instance.results.get(i), basePath, serverRoot,
                            generateBlank, 0, i, repIndexes, gv, true, parentRecords, remoteUser, oId);
                }
            }

        }

    } finally {
        if (document != null)
            try {
                document.close();
            } catch (Exception e) {
            }
        ;
        if (writer != null)
            try {
                writer.close();
            } catch (Exception e) {
            }
        ;
        if (stamper != null)
            try {
                stamper.close();
            } catch (Exception e) {
            }
        ;
        if (reader != null)
            try {
                reader.close();
            } catch (Exception e) {
            }
        ;
    }

    return filename;

}

From source file:org.zaproxy.zap.extension.alertReport.AlertReportExportPDF.java

License:Apache License

public boolean exportAlert(java.util.List<java.util.List<Alert>> alerts, String fileName,
        ExtensionAlertReportExport extensionExport) {
    Document document = new Document(PageSize.A4);
    try {/*from ww w.  j a v  a2 s .co  m*/
        // Document documentAdd = null;
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(fileName));
        document.open();
        boolean attach = false;
        // add attach document is exist
        if (!extensionExport.getParams().getDocumentAttach().isEmpty()) {
            PdfReader reader = new PdfReader(extensionExport.getParams().getDocumentAttach());
            int n = reader.getNumberOfPages();
            PdfImportedPage page;
            // Go through all pages
            for (int i = 1; i <= n; i++) {
                page = writer.getImportedPage(reader, i);
                Image instance = Image.getInstance(page);
                instance.scalePercent(95f);
                document.add(instance);
            }
            attach = true;
        }
        if (!attach) {
            addMetaData(document, extensionExport);
            addTitlePage(document, extensionExport);
        }
        for (int i = 0; i < alerts.size(); i++) {
            java.util.List<Alert> alertAux = alerts.get(i);
            addContent(document, alertAux, extensionExport);
        }

        document.close();
        return true;
    } catch (Exception e) {
        logger.error(e.getMessage(), e);
        document.close();
        return false;
    }

}

From source file:oscar.dms.IncomingDocUtil.java

License:Open Source License

public static int getNumOfPages(String queueId, String pdfDir, String pdfName) {
    String filePath = getIncomingDocumentFilePathName(queueId, pdfDir, pdfName);
    int numOfPages = 0;
    PdfReader reader = null;/*  w w w . jav a 2s . c o  m*/
    try {
        reader = new PdfReader(filePath);
        numOfPages = reader.getNumberOfPages();
    } catch (Exception e) {
        MiscUtils.getLogger().error("Error", e);
    } finally {
        if (reader != null) {
            reader.close();
        }
    }
    return numOfPages;
}

From source file:oscar.dms.IncomingDocUtil.java

License:Open Source License

public static void rotatePage(String queueId, String myPdfDir, String myPdfName, String MyPdfPageNumber,
        int degrees) throws Exception {
    long lastModified;
    String filePathName, tempFilePathName;
    int rot;/*from   w  w w .j a  v  a 2s.co  m*/
    int rotatedegrees;

    tempFilePathName = getIncomingDocumentFilePath(queueId, myPdfDir) + File.separator + "T" + myPdfName;
    filePathName = getIncomingDocumentFilePathName(queueId, myPdfDir, myPdfName);

    File f = new File(filePathName);
    lastModified = f.lastModified();

    PdfReader reader = null;
    PdfStamper stp = null;

    try {
        reader = new PdfReader(filePathName);
        rot = reader.getPageRotation(Integer.parseInt(MyPdfPageNumber));
        rotatedegrees = rot + degrees;
        rotatedegrees = rotatedegrees % 360;

        reader.getPageN(Integer.parseInt(MyPdfPageNumber)).put(PdfName.ROTATE, new PdfNumber(rotatedegrees));
        stp = new PdfStamper(reader, new FileOutputStream(tempFilePathName));

    } catch (Exception e) {
        throw (e);
    } finally {
        try {
            if (stp != null) {
                stp.close();
            }

            if (reader != null) {
                reader.close();
            }
        } catch (Exception e) {
            throw (e);
        }
    }

    boolean success = f.delete();

    if (success) {
        File f1 = new File(tempFilePathName);
        f1.setLastModified(lastModified);
        success = f1.renameTo(new File(filePathName));
        if (!success) {
            throw new Exception("Error in renaming file from:" + tempFilePathName + " to " + filePathName);
        }
    } else {
        throw new Exception("Error in deleting file:" + filePathName);
    }
}

From source file:oscar.dms.IncomingDocUtil.java

License:Open Source License

public static void rotateAlPages(String queueId, String myPdfDir, String myPdfName, int degrees)
        throws Exception {
    long lastModified;
    String filePathName, tempFilePathName;
    int rot;/*from   ww  w . jav  a  2  s .c o  m*/
    int rotatedegrees;

    tempFilePathName = getIncomingDocumentFilePath(queueId, myPdfDir) + File.separator + "T" + myPdfName;
    filePathName = getIncomingDocumentFilePathName(queueId, myPdfDir, myPdfName);

    File f = new File(filePathName);
    lastModified = f.lastModified();

    PdfReader reader = null;
    PdfStamper stp = null;

    try {
        reader = new PdfReader(filePathName);

        for (int p = 1; p <= reader.getNumberOfPages(); ++p) {
            rot = reader.getPageRotation(p);
            rotatedegrees = rot + degrees;
            rotatedegrees = rotatedegrees % 360;

            reader.getPageN(p).put(PdfName.ROTATE, new PdfNumber(rotatedegrees));
        }
        stp = new PdfStamper(reader, new FileOutputStream(tempFilePathName));

    } catch (Exception e) {
        throw (e);
    } finally {
        try {
            if (stp != null) {
                stp.close();
            }

            if (reader != null) {
                reader.close();
            }
        } catch (Exception e) {
            throw (e);
        }
    }

    boolean success = f.delete();

    if (success) {
        File f1 = new File(tempFilePathName);
        f1.setLastModified(lastModified);
        success = f1.renameTo(new File(filePathName));
        if (!success) {
            throw new Exception("Error in renaming file from:" + tempFilePathName + "to " + filePathName);
        }
    } else {
        throw new Exception("Error in deleting file:" + filePathName);
    }
}

From source file:oscar.dms.IncomingDocUtil.java

License:Open Source License

public static void deletePage(String queueId, String myPdfDir, String myPdfName, String PageNumberToDelete)
        throws Exception {
    long lastModified;
    String filePathName, tempFilePathName;

    tempFilePathName = getIncomingDocumentFilePath(queueId, myPdfDir) + File.separator + "T" + myPdfName;
    filePathName = getIncomingDocumentFilePathName(queueId, myPdfDir, myPdfName);

    File f = new File(filePathName);
    lastModified = f.lastModified();/*from   ww w. j  a  va 2 s . c om*/
    f.setReadOnly();

    String deletePath = getIncomingDocumentDeletedFilePath(queueId, myPdfDir) + File.separator;
    String deletePathFileName = "";
    int index = myPdfName.indexOf(".pdf");

    String myPdfNameF = myPdfName.substring(0, index);
    String myPdfNameExt = myPdfName.substring(index, myPdfName.length());

    PdfReader reader = null;
    Document document = null;
    PdfCopy copy = null;
    PdfCopy deleteCopy = null;

    try {
        reader = new PdfReader(filePathName);
        deletePathFileName = deletePath + myPdfNameF + "d" + PageNumberToDelete + "of"
                + Integer.toString(reader.getNumberOfPages()) + myPdfNameExt;

        document = new Document(reader.getPageSizeWithRotation(1));
        copy = new PdfCopy(document, new FileOutputStream(tempFilePathName));
        deleteCopy = new PdfCopy(document, new FileOutputStream(deletePathFileName));
        document.open();

        for (int pageNumber = 1; pageNumber <= reader.getNumberOfPages(); pageNumber++) {
            if (!(pageNumber == (Integer.parseInt(PageNumberToDelete)))) {
                copy.addPage(copy.getImportedPage(reader, pageNumber));
            } else {
                deleteCopy.addPage(copy.getImportedPage(reader, pageNumber));
            }
        }
    } catch (Exception e) {
        throw (e);
    } finally {
        try {
            if (copy != null) {
                copy.close();
            }
            if (deleteCopy != null) {
                deleteCopy.close();
            }

            if (document != null) {
                document.close();
            }

            if (reader != null) {
                reader.close();
            }

        } catch (Exception e) {
            throw (e);
        }
    }

    boolean success;
    if (!oscar.OscarProperties.getInstance().getBooleanProperty("INCOMINGDOCUMENT_RECYCLEBIN", "true")) {
        File f1 = new File(deletePathFileName);
        success = f1.delete();
        if (!success) {
            throw new Exception("Error in deleting file:" + deletePathFileName);
        }
    }

    success = f.delete();
    if (success) {
        File f1 = new File(tempFilePathName);
        f1.setLastModified(lastModified);
        success = f1.renameTo(new File(filePathName));
        if (!success) {
            throw new Exception("Error in renaming file from:" + tempFilePathName + "to " + filePathName);
        }
    } else {
        throw new Exception("Error in deleting file:" + filePathName);
    }
}

From source file:oscar.dms.IncomingDocUtil.java

License:Open Source License

public static void extractPage(String queueId, String myPdfDir, String myPdfName, String pageNumbersToExtract)
        throws Exception {
    long lastModified;
    String filePathName, tempFilePathName;

    tempFilePathName = getIncomingDocumentFilePath(queueId, myPdfDir) + File.separator + "T" + myPdfName;
    filePathName = getIncomingDocumentFilePathName(queueId, myPdfDir, myPdfName);

    File f = new File(filePathName);
    lastModified = f.lastModified();//  w ww  . j  av  a 2s  . c o  m
    f.setReadOnly();

    String extractPath = getIncomingDocumentFilePath(queueId, myPdfDir) + File.separator;
    int index = myPdfName.toLowerCase().indexOf(".pdf");
    String myPdfNameF = myPdfName.substring(0, index);
    String myPdfNameExt = myPdfName.substring(index, myPdfName.length());

    ArrayList<String> extractList = new ArrayList<String>();
    int startPage, endPage;
    boolean cancelExtract = false;

    PdfReader reader = null;
    Document document = null;
    PdfCopy copy = null;
    PdfCopy extractCopy = null;

    try {
        reader = new PdfReader(filePathName);
        extractPath = extractPath + myPdfNameF + "E" + Integer.toString(reader.getNumberOfPages())
                + myPdfNameExt;

        for (int pgIndex = 0; pgIndex <= reader.getNumberOfPages(); pgIndex++) {
            extractList.add(pgIndex, "0");
        }

        String tmpPageNumbersToExtract = pageNumbersToExtract;
        String[] pageList = tmpPageNumbersToExtract.split(",");
        for (int i = 0; i < pageList.length; i++) {
            if (!pageList[i].isEmpty()) {
                String[] rangeList = pageList[i].split("-");
                if (rangeList.length > 2) {
                    cancelExtract = true;
                }
                for (int j = 0; j < rangeList.length; j++) {
                    if (!rangeList[j].matches("^[0-9]+$")) {
                        cancelExtract = true;
                    }
                }
                if (!cancelExtract) {
                    if (rangeList.length == 1) {
                        startPage = Integer.parseInt(rangeList[0], 10);
                        if (startPage > extractList.size() || startPage == 0) {
                            cancelExtract = true;
                        } else {
                            extractList.set(startPage, "1");
                        }
                    } else if (rangeList.length == 2) {
                        startPage = Integer.parseInt(rangeList[0], 10);
                        endPage = Integer.parseInt(rangeList[1], 10);

                        for (int k = startPage; k <= endPage; k++) {

                            if (k > extractList.size() || k == 0) {
                                cancelExtract = true;
                            } else {
                                extractList.set(k, "1");
                            }
                        }
                    }
                }
            }
        }
        if (!cancelExtract) {
            cancelExtract = true;
            for (int pageNumber = 1; pageNumber <= reader.getNumberOfPages(); pageNumber++) {
                if (!(extractList.get(pageNumber).equals("1"))) {
                    cancelExtract = false;
                }
            }
        }
        if (cancelExtract == true) {
            reader.close();
            throw new Exception(myPdfName + " : Invalid Pages to Extract " + pageNumbersToExtract);
        }

        document = new Document(reader.getPageSizeWithRotation(1));
        copy = new PdfCopy(document, new FileOutputStream(tempFilePathName));
        extractCopy = new PdfCopy(document, new FileOutputStream(extractPath));
        document.open();
        for (int pageNumber = 1; pageNumber <= reader.getNumberOfPages(); pageNumber++) {
            if (!(extractList.get(pageNumber).equals("1"))) {
                copy.addPage(copy.getImportedPage(reader, pageNumber));
            } else {
                extractCopy.addPage(copy.getImportedPage(reader, pageNumber));
            }
        }

    } catch (Exception e) {
        throw (e);
    } finally {
        try {
            if (copy != null) {
                copy.close();
            }
            if (extractCopy != null) {
                extractCopy.close();
            }

            if (document != null) {
                document.close();
            }

            if (reader != null) {
                reader.close();
            }

        } catch (Exception e) {
            throw (e);
        }
    }

    boolean success = f.delete();

    if (success) {
        File f1 = new File(tempFilePathName);
        f1.setLastModified(lastModified);
        success = f1.renameTo(new File(filePathName));
        if (!success) {
            throw new Exception("Error in renaming file from:" + tempFilePathName + "to " + filePathName);
        }

        File f2 = new File(extractPath);
        f2.setLastModified(lastModified);
    } else {
        throw new Exception("Error in deleting file:" + filePathName);
    }
}

From source file:Package1.MAIN.java

public void pdf_reader() {
    int value = 0;
    try {//from w  w  w  . j  a va2  s . co  m

        PdfReader reader = new PdfReader(dir);
        int p = reader.getNumberOfPages();
        String page = "";
        if (p <= 250) {
            for (int i = 1; i <= p; i++) {
                if (i == 1)
                    page = page + "\t\n---------------\t\tPage: " + i + "\t\t---------------\n\n\n";
                else
                    page = page + "\t\n\n\n---------------\t\tPage: " + i + "\t\t---------------\n\n\n";
                page = page + PdfTextExtractor.getTextFromPage(reader, i);
                value = (i * 100) / p;

                progressive_status(value);
            }
            //            jProgressBar1.setValue(value);
        } else {
            for (int i = 1; i <= 200; i++) {
                if (i == 1)
                    page = page + "\t\n---------------\t\tPage: " + i + "\t\t---------------\n\n\n";
                else
                    page = page + "\t\n\n\n---------------\t\tPage: " + i + "\t\t---------------\n\n\n";
                page = page + PdfTextExtractor.getTextFromPage(reader, i);
                value = (i * 100) / p;

                progressive_status(value);
            }

            JOptionPane.showMessageDialog(null,
                    "Only 200 Page converted. \n Download pro version for full access. ", "Warning!!",
                    JOptionPane.PLAIN_MESSAGE);
        }

        jTextPane1.setText(page);
        jLabel1.setText("Total Pages: " + p);

    } catch (IOException ex) {
        Logger.getLogger(MAIN.class.getName()).log(Level.SEVERE, null, ex);
    }
}

From source file:pdf.alterLetter.java

public static void main(String args[]) {
    try {/*from w ww. ja  v a 2  s .  co m*/
        PdfReader pdfReader;
        pdfReader = new PdfReader("C:\\Users\\asus\\Desktop\\web\\Appointment letter.pdf");
        //pdfReader = new PdfReader("C:\\Users\\asus\\Desktop\\TFMsystem\\Appointment letter.pdf");   

        //Create PdfStamper instance.
        PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(
                "C:\\Users\\asus\\Desktop\\TFMsystem\\web\\Modified appointment letter.pdf"));

        //new FileOutputStream("C:\\Users\\asus\\Desktop\\TFMsystem\\Modified appointment letter.pdf"));

        //Create BaseFont instance.
        BaseFont baseFont = BaseFont.createFont(BaseFont.TIMES_ROMAN, BaseFont.CP1257, BaseFont.NOT_EMBEDDED);

        //Get the number of pages in pdf.
        int pages = pdfReader.getNumberOfPages();

        //Iterate the pdf through pages.
        for (int i = 1; i <= pages; i++) {
            //Contain the pdf data.
            PdfContentByte pageContentByte = pdfStamper.getOverContent(i);

            pageContentByte.beginText();
            //Set text font and size.
            pageContentByte.setFontAndSize(baseFont, 12);

            //Write text
            pageContentByte.setTextMatrix(120, 706);
            pageContentByte.showText("[no rujukan(enter by admin/opai)]");

            pageContentByte.setTextMatrix(500, 706);
            pageContentByte.showText("[current date]");
            //address
            pageContentByte.setTextMatrix(46, 641);
            pageContentByte.showText("[name]");
            pageContentByte.setTextMatrix(46, 629);
            pageContentByte.showText("[position]");
            pageContentByte.setTextMatrix(46, 617);
            pageContentByte.showText("[department]");

            pageContentByte.setTextMatrix(155, 493);
            pageContentByte.showText("[status(penyelaras/ahli),taskforce name]");

            pageContentByte.setTextMatrix(178, 433);
            pageContentByte.showText("[start date]");

            pageContentByte.setTextMatrix(290, 433);
            pageContentByte.showText("[end date] .");

            pageContentByte.setTextMatrix(46, 248);
            pageContentByte.showText("[name]");
            pageContentByte.setTextMatrix(46, 236);
            pageContentByte.showText("[post]");
            pageContentByte.setTextMatrix(46, 224);
            pageContentByte.showText("[faculty]");
            pageContentByte.setTextMatrix(46, 212);
            pageContentByte.showText("[email]");

            pageContentByte.endText();
        }

        //Close the pdfStamper.
        pdfStamper.close();

        System.out.println("PDF modified successfully.");
    } catch (Exception e) {
        e.printStackTrace();
    }
}