Example usage for org.apache.pdfbox.pdmodel PDDocument save

List of usage examples for org.apache.pdfbox.pdmodel PDDocument save

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdmodel PDDocument save.

Prototype

public void save(OutputStream output) throws IOException 

Source Link

Document

This will save the document to an output stream.

Usage

From source file:de.offis.health.icardea.cied.pdf.extractor.PDFApachePDFBoxExtractor.java

License:Apache License

@SuppressWarnings("unchecked")
public byte[] getPDFPages(int fromPageNumber, int toPageNumber) {
    ByteArrayOutputStream byteArrayOutputStream = null;
    boolean extractionSuccessful = false;

    if (pdfDocument != null) {
        int numberOfPages = getNumberOfPages();

        /*/* ww w . j a v  a  2 s.  c o m*/
         * Check if the given page numbers are in the allowed range.
         */
        if (fromPageNumber > 0 && fromPageNumber <= numberOfPages && toPageNumber > 0
                && toPageNumber <= numberOfPages) {
            /*
             * Now check if the given fromPageNumber is smaller
             * as the given toPageNumber. If not swap the numbers.
             */
            if (fromPageNumber > toPageNumber) {
                int tmpPageNumber = toPageNumber;
                toPageNumber = fromPageNumber;
                fromPageNumber = tmpPageNumber;
            }

            /*
             * Now extract the pages
             * 
             * NOTE
             * ====
             * Since Apache PDFBox v1.5.0 there exists the class
             * org.apache.pdfbox.util.PageExtractor
             */

            /*
            boolean isApachePageExtractorAvailable = false;
            Class<?> pageExtractorClass = null;
            try {
               pageExtractorClass = getClass().getClassLoader().loadClass("org.apache.pdfbox.util.PageExtractor");
               Constructor<?> pdfExtractConstructor = pageExtractorClass.getConstructor(PDDocument.class, int.class, int.class);
               Method pdfExtractMethod = pageExtractorClass.getMethod("extract");
               isApachePageExtractorAvailable = true;
            } catch (ClassNotFoundException ex) {
            } catch (SecurityException ex) {
            } catch (NoSuchMethodException ex) {
            }
            */

            try {
                PDDocument extractedDocumentPages = new PDDocument();
                extractedDocumentPages.setDocumentInformation(this.pdfDocument.getDocumentInformation());
                extractedDocumentPages.getDocumentCatalog()
                        .setViewerPreferences(this.pdfDocument.getDocumentCatalog().getViewerPreferences());

                List<PDPage> pages = (List<PDPage>) this.pdfDocument.getDocumentCatalog().getAllPages();
                int pageCounter = 1;
                for (PDPage page : pages) {
                    if (pageCounter >= fromPageNumber && pageCounter <= toPageNumber) {
                        PDPage importedPdfPage;
                        importedPdfPage = extractedDocumentPages.importPage(page);
                        importedPdfPage.setCropBox(page.findCropBox());
                        importedPdfPage.setMediaBox(page.findMediaBox());
                        importedPdfPage.setResources(page.findResources());
                        importedPdfPage.setRotation(page.findRotation());
                    }
                    pageCounter++;
                } // end for

                byteArrayOutputStream = new ByteArrayOutputStream();
                extractedDocumentPages.save(byteArrayOutputStream);
                extractedDocumentPages.close();
                extractionSuccessful = true;
            } catch (COSVisitorException ex) {
                // TODO: Create an own exception for PDF processing errors.
                logger.error("An exception occurred while extracting " + "pages from the input PDF file.", ex);
            } catch (IOException ex) {
                // TODO: Create an own exception for PDF processing errors.
                logger.error("An exception occurred while extracting " + "pages from the input PDF file.", ex);
            } finally {
                if (!extractionSuccessful) {
                    byteArrayOutputStream = null;
                }
            } // end try..catch..finally
        } // end if checking range of given pages
    } // end if (pdfDocument != null)

    if (byteArrayOutputStream != null) {
        return byteArrayOutputStream.toByteArray();
    }
    return null;
}

From source file:de.prozesskraft.pkraft.Createdoc.java

/**
 * merge the pdfs/*w ww  . j ava2  s.com*/
 */
private static void mergePdf(Map<String, String> pdfRankFiles, String output) {
    System.out.println("merging pdfs to a single file");

    Set<String> keySet = pdfRankFiles.keySet();
    ArrayList<String> listKey = new ArrayList(keySet);
    Collections.sort(listKey);

    try {
        PDDocument document = new PDDocument();
        //         if(document.getNumberOfPages() > 0)
        //         {
        //            System.out.println("deleting empty page");
        //            document.removePage(0);
        //         }
        for (String actualKey : listKey) {

            PDDocument part = PDDocument.load(pdfRankFiles.get(actualKey));
            System.out.println("merging " + pdfRankFiles.get(actualKey));
            ArrayList<PDPage> list = (ArrayList<PDPage>) part.getDocumentCatalog().getAllPages();
            for (PDPage page : list) {
                document.addPage(page);
            }

        }
        try {
            System.out.println("writing " + output);
            document.save(output);
        } catch (COSVisitorException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

From source file:de.rototor.pdfbox.graphics2d.PdfBoxGraphics2DTestBase.java

License:Apache License

@SuppressWarnings("SpellCheckingInspection")
void exportGraphic(String dir, String name, GraphicsExporter exporter) {
    try {/*from ww  w. ja  va  2s  .co m*/
        PDDocument document = new PDDocument();

        PDFont pdArial = PDFontFactory.createDefaultFont();

        File parentDir = new File("target/test/" + dir);
        // noinspection ResultOfMethodCallIgnored
        parentDir.mkdirs();

        BufferedImage image = new BufferedImage(400, 400, BufferedImage.TYPE_4BYTE_ABGR);
        Graphics2D imageGraphics = image.createGraphics();
        exporter.draw(imageGraphics);
        imageGraphics.dispose();
        ImageIO.write(image, "PNG", new File(parentDir, name + ".png"));

        for (Mode m : Mode.values()) {
            PDPage page = new PDPage(PDRectangle.A4);
            document.addPage(page);

            PDPageContentStream contentStream = new PDPageContentStream(document, page);
            PdfBoxGraphics2D pdfBoxGraphics2D = new PdfBoxGraphics2D(document, 400, 400);
            PdfBoxGraphics2DFontTextDrawer fontTextDrawer = null;
            contentStream.beginText();
            contentStream.setStrokingColor(0, 0, 0);
            contentStream.setNonStrokingColor(0, 0, 0);
            contentStream.setFont(PDType1Font.HELVETICA_BOLD, 15);
            contentStream.setTextMatrix(Matrix.getTranslateInstance(10, 800));
            contentStream.showText("Mode " + m);
            contentStream.endText();
            switch (m) {
            case FontTextIfPossible:
                fontTextDrawer = new PdfBoxGraphics2DFontTextDrawer();
                registerFots(fontTextDrawer);
                break;
            case DefaultFontText: {
                fontTextDrawer = new PdfBoxGraphics2DFontTextDrawerDefaultFonts();
                registerFots(fontTextDrawer);
                break;
            }
            case ForceFontText:
                fontTextDrawer = new PdfBoxGraphics2DFontTextForcedDrawer();
                registerFots(fontTextDrawer);
                fontTextDrawer.registerFont("Arial", pdArial);
                break;
            case DefaultVectorized:
            default:
                break;
            }

            if (fontTextDrawer != null) {
                pdfBoxGraphics2D.setFontTextDrawer(fontTextDrawer);
            }

            exporter.draw(pdfBoxGraphics2D);
            pdfBoxGraphics2D.dispose();

            PDFormXObject appearanceStream = pdfBoxGraphics2D.getXFormObject();
            Matrix matrix = new Matrix();
            matrix.translate(0, 20);
            contentStream.transform(matrix);
            contentStream.drawForm(appearanceStream);

            matrix.scale(1.5f, 1.5f);
            matrix.translate(0, 100);
            contentStream.transform(matrix);
            contentStream.drawForm(appearanceStream);
            contentStream.close();
        }

        document.save(new File(parentDir, name + ".pdf"));
        document.close();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

From source file:de.schneefisch.fruas.transactions.BillPDFCreator.java

public void createPDF() {

    String filename = "Rechnung-" + bill.getId() + ".pdf";

    try {/*from w w w  . j  a  v a  2s  .  c  om*/
        PDDocument doc = new PDDocument();
        PDPage page = new PDPage();
        doc.addPage(page);

        PDPageContentStream content = new PDPageContentStream(doc, page);

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 14);
        content.newLineAtOffset(70, 750);
        content.showText("Schneefisch GmbH");
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 13);
        content.newLineAtOffset(70, 725);
        content.showText("Nibelungenplatz 1");
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 14);
        content.newLineAtOffset(70, 700);
        content.showText("D-60318 Frankfurt am Main");
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 640);
        content.showText(fiCustomer.getName());
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 620);
        content.showText("Rechnungsprfung");
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 600);
        content.showText(location.getStreet() + " " + location.getHouseNumber());
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 580);
        content.showText(location.getPostalCode() + " " + location.getCity());
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 540);
        content.showText("Rechnung " + bill.getId() + " fuer KN " + fiCustomer.getId());
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 520);
        content.showText("Sehr geehrte Damen und Herren, ");
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 500);
        content.showText("hiermit erlauben wir uns fr unsere Lieferung Nr. " + deliveryNote.getId() + " vom "
                + deliveryNote.getDate());
        content.endText();
        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 485);
        content.showText("folgenden Betrag in Rechnung zu stellen:");
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(75, 470);
        content.showText("POS");
        content.endText();
        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(120, 470);
        content.showText("Bezeichnung");
        content.endText();
        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(440, 470);
        content.showText("Preis");
        content.endText();

        int count = 1;
        float yoffset = 460;
        for (DeliveryNotePosition dnp : deliveryNotePositions) {
            LicenseDAO licDAO = new LicenseDAO();
            License license = licDAO.selectLicenseById(dnp.getLicenseId());
            ProductDAO pDAO = new ProductDAO();
            Product product = pDAO.searchProductById(license.getProductId());

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(75, yoffset);
            content.showText(Integer.toString(count));
            content.endText();
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(120, yoffset);
            content.showText(product.getName());
            content.endText();
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(120, yoffset - 20);
            content.showText("Lizenz: " + license.getId() + " von " + license.getSoldDate() + " bis "
                    + license.getEndDate() + ".");
            content.endText();
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(440, yoffset - 20);
            content.showText("Eur " + product.getPrice() * ((100 - license.getDiscount()) / 100));
            content.endText();
            if (license.getMaintenanceId() == 0) {
                content.beginText();
                content.setFont(PDType1Font.HELVETICA, 12);
                content.newLineAtOffset(120, yoffset - 40);
                content.showText("Ohne Maintenance-Vertrag.");
                content.endText();
            } else {
                MaintenanceDAO mDAO = new MaintenanceDAO();
                Maintenance maintenance = mDAO.searchMaintenanceById(license.getMaintenanceId());
                content.beginText();
                content.setFont(PDType1Font.HELVETICA, 12);
                content.newLineAtOffset(120, yoffset - 40);
                content.showText("Mit " + maintenance.getInfo() + " als Maintenance-Vertrag.");
                content.endText();
                content.beginText();
                content.setFont(PDType1Font.HELVETICA, 12);
                content.newLineAtOffset(440, yoffset - 40);
                content.showText("Eur " + maintenance.getPrice());
                content.endText();
            }
            count++;
            yoffset -= 100;
        }

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, yoffset);
        content.showText("Summe ");
        content.endText();
        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(440, yoffset);
        content.showText(String.valueOf("EUR " + bill.getPrice()));
        content.endText();
        yoffset -= 20;

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, yoffset);
        content.showText("USt. 19%");
        content.endText();
        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(440, yoffset);
        double ust = (bill.getPrice() * 0.19);
        content.showText(String.valueOf("EUR " + ust));
        content.endText();
        yoffset -= 20;

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, yoffset);
        content.showText("Gesamtsumme");
        content.endText();
        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(440, yoffset);
        double priceTotal = bill.getPrice() + ust;
        content.showText(String.valueOf("EUR " + priceTotal));
        content.endText();
        yoffset -= 40;

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, yoffset);
        content.showText("Wir bitten Sie, den Gesamtbetrag von EUR " + priceTotal + " auf unser Konto 123456,");
        content.endText();
        yoffset -= 20;
        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, yoffset);
        content.showText("bei der Bank Unserort, BLZ4321, IBAN123 zu berweisen. Zahlungsziel: 30 Tage netto.");
        content.endText();
        yoffset -= 25;

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, yoffset);
        content.showText("Mit freundlichen Gruessen");
        content.endText();
        yoffset -= 20;

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, yoffset);
        content.showText("Schneefisch GmbH");
        content.endText();
        content.close();

        doc.save(filename);
        doc.close();
        System.out.println(filename + " erstellt in: " + System.getProperty("user.dir"));
    } catch (IOException e) {
        System.out.println(e.getMessage());
    } catch (SQLException e) {
        e.printStackTrace();
    }

}

From source file:de.schneefisch.fruas.transactions.DeliveryNotePDFCreator.java

public void createPDF() {

    String filename = "Lieferschein-" + deliveryNote.getId() + ".pdf";

    try {//w  ww.j  a  va  2  s  . c o  m
        PDDocument doc = new PDDocument();
        PDPage page = new PDPage();
        doc.addPage(page);

        PDPageContentStream content = new PDPageContentStream(doc, page);

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 14);
        content.newLineAtOffset(70, 750);
        content.showText("Schneefisch GmbH");
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 13);
        content.newLineAtOffset(70, 725);
        content.showText("Nibelungenplatz 1");
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 14);
        content.newLineAtOffset(70, 700);
        content.showText("D-60318 Frankfurt am Main");
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 640);
        content.showText(fiCustomer.getName());
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 620);
        content.showText("Wareneingang");
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 600);
        content.showText(location.getStreet() + " " + location.getHouseNumber());
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, 580);
        content.showText(location.getPostalCode() + " " + location.getCity());
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(300, 540);
        content.showText("Lieferschein " + deliveryNote.getId() + " fuer KN " + fiCustomer.getId());
        content.endText();

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(75, 500);
        content.showText("POS");
        content.endText();
        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(120, 500);
        content.showText("Bezeichnung");
        content.endText();

        int count = 1;
        float yoffset = 460;
        for (DeliveryNotePosition dnp : deliveryNotePositions) {
            LicenseDAO licDAO = new LicenseDAO();
            License license = licDAO.selectLicenseById(dnp.getLicenseId());
            ProductDAO pDAO = new ProductDAO();
            Product product = pDAO.searchProductById(license.getProductId());

            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(75, yoffset);
            content.showText(Integer.toString(count));
            content.endText();
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(120, yoffset);
            content.showText(product.getName());
            content.endText();
            content.beginText();
            content.setFont(PDType1Font.HELVETICA, 12);
            content.newLineAtOffset(120, yoffset - 20);
            content.showText("Lizenz: " + license.getId() + " von " + license.getSoldDate() + " bis "
                    + license.getEndDate() + ".");
            content.endText();
            if (license.getMaintenanceId() == 0) {
                content.beginText();
                content.setFont(PDType1Font.HELVETICA, 12);
                content.newLineAtOffset(120, yoffset - 40);
                content.showText("Ohne Maintenance-Vertrag.");
                content.endText();
            } else {
                MaintenanceDAO mDAO = new MaintenanceDAO();
                Maintenance maintenance = mDAO.searchMaintenanceById(license.getMaintenanceId());
                content.beginText();
                content.setFont(PDType1Font.HELVETICA, 12);
                content.newLineAtOffset(120, yoffset - 40);
                content.showText("Mit " + maintenance.getInfo() + " als Maintenance-Vertrag.");
                content.endText();
            }
            count++;
            yoffset -= 100;
        }

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, yoffset);
        content.showText("Rechnungslegung erfolgt separat.");
        content.endText();
        yoffset -= 20;

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, yoffset);
        content.showText("Das Produkt bleibt bis zur vollstndigen Bezahlung unser Eigentum.");
        content.endText();
        yoffset -= 20;

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, yoffset);
        content.showText("Mit freundlichen Gruessen");
        content.endText();
        yoffset -= 20;

        content.beginText();
        content.setFont(PDType1Font.HELVETICA, 12);
        content.newLineAtOffset(70, yoffset);
        content.showText("Schneefisch GmbH");
        content.endText();
        content.close();

        doc.save(filename);
        doc.close();
        System.out.println(filename + " erstellt in: " + System.getProperty("user.dir"));
    } catch (IOException e) {
        System.out.println(e.getMessage());
    } catch (SQLException e) {
        e.printStackTrace();
    }

}

From source file:de.thb.ue.backend.util.PDFGeneration.java

License:Apache License

public static void createQRCPDF(List<BufferedImage> tickets, String evaluationUID, String subject,
        SemesterType semesterType, int year, File workingDirectory) {
    PDDocument document = new PDDocument();
    PDPage page = new PDPage();
    //        PDRectangle rectangle = new PDRectangle(page.findCropBox().getWidth(), 500);
    //        page.setCropBox(rectangle);

    document.addPage(page);//from w w  w.  j  a v  a 2s.c  om
    PDXObjectImage pdImage;

    try {
        PDPageContentStream contentStream = new PDPageContentStream(document, page);

        int x = 0;
        // start from top of page instead of bottom
        // somehow the first row gets swallowed -> start with second row instead
        int y = (int) page.findCropBox().getHeight() - (new PDJpeg(document, tickets.get(0))).getHeight();

        int imageHeight;
        int imageWidth;
        String qrCodePurpose = "Evaluation QR-Codes fr das Fach " + subject + " im "
                + (semesterType == SemesterType.WINTER ? "Winter" : "Sommer") + "semester "
                + Integer.toString(year);
        PDFont font = PDType1Font.HELVETICA;
        int fontSize = 13;

        // center text horizontally
        float textWidth = font.getStringWidth(qrCodePurpose) / 1000 * fontSize;
        int textX = (int) ((page.findCropBox().getWidth() / 2) - (textWidth / 2));

        // add QR-Codes
        for (int i = 0; i < tickets.size(); i++) {

            pdImage = new PDJpeg(document, tickets.get(i));
            imageHeight = pdImage.getHeight();
            imageWidth = pdImage.getWidth();

            if ((imageWidth + x) > page.findCropBox().getWidth()) {
                x = 0;
                y -= imageHeight;
            }

            if (y <= 0) {
                writeText(contentStream, page, qrCodePurpose, imageHeight, textX,
                        (y + imageHeight) - (imageHeight / 4), fontSize, font);
                page = new PDPage();
                document.addPage(page);
                contentStream.close();
                contentStream = new PDPageContentStream(document, page);
                y = (int) page.findCropBox().getHeight() - pdImage.getHeight();
                x = 0;
            }

            contentStream.drawImage(pdImage, x, y);

            if (i + 1 >= tickets.size()) {
                writeText(contentStream, page, qrCodePurpose, imageHeight, textX, y - 20, fontSize, font);
            }
            x += imageWidth;
        }

        /*PDDocumentCatalog catalog = document.getDocumentCatalog();
        catalog.getAcroForm().setXFA(null);*/

        contentStream.close();
        if (!workingDirectory.exists()) {
            workingDirectory.mkdir();
        }
        File outputFile = new File(workingDirectory, "qrcodes.pdf");
        document.save(outputFile);

    } catch (IOException | COSVisitorException e) {
        e.printStackTrace();
    } finally {
        try {
            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

From source file:de.uzk.hki.da.convert.PdfService.java

License:Open Source License

/**
 * Generates a new PDF which only contains certainPages of the original document.
 * Users can choose if they wish to reduce to a number of pages (beginning from the first page)
 * or to a certain set of pages. Both options can be used at the same time. 
 * By setting one of the parameters to either "" or null any of the options the according 
 * option will not be used./*  w w w  .  j  a v a2 s. c o m*/
 *
 * @param numberOfPagesText null or empty if unused or "n" (e.g. "2" for two pages from the beginning of the document).
 * @param certainPagesText white space separated list of numbers that mark pages which should be part of the target document.
 * 
 * @throws IOException 
 * @author Jens Peters
 * @author Sebastian Cuy
 * @author Daniel M. de Oliveira
 */
public void reduceToCertainPages(String numberOfPagesText, String certainPagesText) throws IOException {

    PDDocument srcPdf = null;
    PDDocument targetPdf = null;
    if (srcPdfFile == null)
        throw new IllegalStateException("srcFile not set");

    srcPdf = PDDocument.load(srcPdfFile);
    targetPdf = new PDDocument();

    @SuppressWarnings("rawtypes")
    List srcPages = srcPdf.getDocumentCatalog().getAllPages();

    int numberOfPages = 0;

    if (numberOfPagesText != null && !numberOfPagesText.isEmpty()) {
        numberOfPages = Integer.parseInt(numberOfPagesText);
        for (int i = 0; i < Math.min(numberOfPages, srcPages.size()); i++)
            targetPdf.addPage((PDPage) srcPages.get(i));
    }

    if (StringUtilities.isNotSet(numberOfPagesText) && StringUtilities.isNotSet(certainPagesText)) {
        for (int i = 0; i < srcPages.size(); i++)
            targetPdf.addPage((PDPage) srcPages.get(i));
    }

    if (certainPagesText != null && !certainPagesText.isEmpty()) {
        String[] certainPagesTexts = certainPagesText.split(" ");
        int[] certainPages = new int[certainPagesTexts.length];
        for (int i = 0; i < certainPagesTexts.length; i++) {
            certainPages[i] = Integer.parseInt(certainPagesTexts[i]);
        }
        Arrays.sort(certainPages);
        for (int i = 0; i < certainPages.length; i++) {
            if (certainPages[i] > numberOfPages && srcPages.size() > certainPages[i] - 1)
                targetPdf.addPage((PDPage) srcPages.get(certainPages[i] - 1));
        }
    }

    try {
        targetPdf.save(targetPdfFile);
    } catch (Exception e) {
        throw new RuntimeException("Unable to create PDF!", e);
    } finally {
        targetPdf.close();
        srcPdf.close();
    }

}

From source file:de.uzk.hki.da.format.PdfService.java

License:Open Source License

/**
 * Generates a new PDF which only contains certainPages of the original document.
 * Users can choose if they wish to reduce to a number of pages (beginning from the first page)
 * or to a certain set of pages. Both options can be used at the same time. 
 * By setting one of the parameters to either "" or null any of the options the according 
 * option will not be used.// w ww . j  a v a 2  s.co m
 *
 * @param numberOfPagesText null or empty if unused or "n" (e.g. "2" for two pages from the beginning of the document).
 * @param certainPagesText white space separated list of numbers that mark pages which should be part of the target document.
 * 
 * @throws IOException 
 * @author Jens Peters
 * @author Sebastian Cuy
 * @author Daniel M. de Oliveira
 */
public void reduceToCertainPages(String numberOfPagesText, String certainPagesText) throws IOException {

    PDDocument srcPdf = null;
    PDDocument targetPdf = null;
    if (srcPdfFile == null)
        throw new IllegalStateException("srcFile not set");

    srcPdf = PDDocument.load(srcPdfFile);
    targetPdf = new PDDocument();

    @SuppressWarnings("rawtypes")
    List srcPages = srcPdf.getDocumentCatalog().getAllPages();

    int numberOfPages = 0;
    if (numberOfPagesText != null && !numberOfPagesText.isEmpty()) {
        numberOfPages = Integer.parseInt(numberOfPagesText);
        for (int i = 0; i < Math.min(numberOfPages, srcPages.size()); i++)
            targetPdf.addPage((PDPage) srcPages.get(i));
    }

    if (certainPagesText != null && !certainPagesText.isEmpty()) {
        String[] certainPagesTexts = certainPagesText.split(" ");
        int[] certainPages = new int[certainPagesTexts.length];
        for (int i = 0; i < certainPagesTexts.length; i++) {
            certainPages[i] = Integer.parseInt(certainPagesTexts[i]);
        }
        Arrays.sort(certainPages);
        for (int i = 0; i < certainPages.length; i++) {
            if (certainPages[i] > numberOfPages && srcPages.size() > certainPages[i] - 1)
                targetPdf.addPage((PDPage) srcPages.get(certainPages[i] - 1));
        }
    }

    try {
        targetPdf.save(targetPdfFile);
    } catch (Exception e) {
        throw new RuntimeException("Unable to create PDF!", e);
    } finally {
        targetPdf.close();
    }

}

From source file:diagramextractor.DiagramExtractor.java

/**
 * @param args the command line arguments
 *//* w ww. j  av a2  s.  c  om*/
public static void main(String[] args) throws IOException, COSVisitorException {

    if (args.length < 2) {
        showHelp();
        System.exit(-1);
    }

    List<Integer> diagramOptionsList = new LinkedList<>();
    diagramOptionsList = parseOptions(args);

    List<String> diagramNameList = new LinkedList<>();
    diagramNameList = getDiagramNames(diagramOptionsList);

    File inputDir = new File(args[0]);
    File[] reports = inputDir.listFiles();
    String diagramName = args[1];

    PDDocument outputDocument = new PDDocument();

    PDFMergerUtility merger = new PDFMergerUtility();
    merger.setDestinationFileName("output.pdf");

    for (File report : reports) {

        PDDocument doc = PDDocument.load(report);
        System.out.println("LOADED FILE: " + report.getName());

        int pageNumber = 0;

        System.out.println("NUMBER OF PAGES: " + doc.getNumberOfPages());

        for (int i = 0; i <= doc.getNumberOfPages(); i++) {
            PDFTextStripper stripper = new PDFTextStripper();
            stripper.setStartPage(i);
            stripper.setEndPage(i);

            String contents = stripper.getText(doc);

            boolean containsDiagram = false;

            for (String diagram : diagramNameList) {
                if (contents.contains(diagram)) {
                    containsDiagram = true;
                }
            }

            if (containsDiagram && !contents.contains("Table of Contents")
                    && !contents.contains("Table of Figures") && !contents.contains("Obsah")
                    && !contents.contains("Tabulka ?sel")) {
                pageNumber = i;
                System.out.println("Diagram found on page: " + pageNumber);

                PageExtractor extractor = new PageExtractor(doc, pageNumber, pageNumber);
                PDDocument extractedPage = extractor.extract();

                PDPage page = (PDPage) extractedPage.getDocumentCatalog().getAllPages().get(0);
                PDPageContentStream contentStream = new PDPageContentStream(extractedPage, page, true, true,
                        true);
                contentStream.beginText();
                contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
                contentStream.moveTextPositionByAmount(100, 50);
                contentStream.drawString(report.getName());
                contentStream.endText();
                contentStream.close();

                merger.appendDocument(outputDocument, extractedPage);

            }

        }

        if (pageNumber == 0) {
            System.out.println("The diagram " + diagramName + " was not found in file " + report.getName());
        }
        doc.close();
    }

    merger.mergeDocuments();

    System.out.println();
    System.out.println("Diagrams have been merged.");

    String outputFileName = generateFilename(inputDir.getCanonicalPath(), "output.pdf");
    outputDocument.save(outputFileName);
    outputDocument.close();

    System.out.println("Output file saved as: " + outputFileName);
}

From source file:domain.mediator.PDFGeneration.java

public static void printTodayPDF(List<Logbook> logbookList, Driver driver, Load load,
        GPSLocation currentLocation) throws IOException {

    Table logbookTable = LogbookList.drawLogbookTable(logbookList);

    File saveFile = new File("todayTable.pdf");
    PDDocument document = new PDDocument();
    PDPage page = new PDPage();
    document.addPage(page);//from   w  w  w  . j a  v  a 2 s .c o  m
    PDPageContentStream pageContentStream = new PDPageContentStream(document, page);

    float contentPositionX = 40;
    float contentPositionY = page.getMediaBox().getHeight() - 50;

    PDFGeneration.printHeaderAndDataTable(pageContentStream, contentPositionX, contentPositionY, driver, load,
            currentLocation, logbookTable);

    pageContentStream.close();

    document.save(saveFile);
    document.close();
    PDFGeneration.openFile(saveFile);
}