Example usage for org.apache.pdfbox.pdmodel.common PDRectangle getHeight

List of usage examples for org.apache.pdfbox.pdmodel.common PDRectangle getHeight

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdmodel.common PDRectangle getHeight.

Prototype

public float getHeight() 

Source Link

Document

This will get the height of this rectangle as calculated by upperRightY - lowerLeftY.

Usage

From source file:org.xwiki.test.misc.PDFTest.java

License:Open Source License

/**
 * Code adapted from http://www.docjar.com/html/api/org/apache/pdfbox/examples/pdmodel/PrintURLs.java.html
 *///from  www  . j  a  v  a  2s .  c om
private Map<String, PDAction> extractLinks(PDPage page) throws Exception {
    Map<String, PDAction> links = new HashMap<String, PDAction>();
    PDFTextStripperByArea stripper = new PDFTextStripperByArea();
    List<PDAnnotation> annotations = page.getAnnotations();
    // First setup the text extraction regions.
    for (int j = 0; j < annotations.size(); j++) {
        PDAnnotation annotation = annotations.get(j);
        if (annotation instanceof PDAnnotationLink) {
            PDAnnotationLink link = (PDAnnotationLink) annotation;
            PDRectangle rect = link.getRectangle();
            // Need to reposition link rectangle to match text space.
            float x = rect.getLowerLeftX();
            float y = rect.getUpperRightY();
            float width = rect.getWidth();
            float height = rect.getHeight();
            int rotation = page.getRotation();
            if (rotation == 0) {
                PDRectangle pageSize = page.getMediaBox();
                y = pageSize.getHeight() - y;
            } else if (rotation == 90) {
                // Do nothing.
            }

            Rectangle2D.Float awtRect = new Rectangle2D.Float(x, y, width, height);
            stripper.addRegion(String.valueOf(j), awtRect);
        }
    }

    stripper.extractRegions(page);

    for (int j = 0; j < annotations.size(); j++) {
        PDAnnotation annotation = annotations.get(j);
        if (annotation instanceof PDAnnotationLink) {
            PDAnnotationLink link = (PDAnnotationLink) annotation;
            String label = stripper.getTextForRegion(String.valueOf(j)).trim();
            links.put(label, link.getAction());
        }
    }

    return links;
}

From source file:org.xwiki.test.misc.PDFTest.java

License:Open Source License

private Rectangle2D getRectangleBelowDestination(PDPageXYZDestination destination) {
    PDPage page = destination.getPage();
    PDRectangle pageSize = page.getMediaBox();
    float x = destination.getLeft();
    float y = pageSize.getHeight() - destination.getTop();
    float width = pageSize.getWidth();
    float height = destination.getTop();
    return new Rectangle2D.Float(x, y, width, height);
}

From source file:paper2ebook.Transformer.java

License:Apache License

/**
 * Heuristic search of the list of interesting areas in page, returned by
 * natural read order.//  w w  w.j av a2  s  .  co  m
 */
public List<PDRectangle> getFragments(PDPage page) {
    List<PDRectangle> fragments = new ArrayList<PDRectangle>();

    // TODO: naive 2 columns hack: rewrite me to introspect the document
    // structure instead

    PDRectangle origBox = page.findCropBox();
    float width = origBox.getWidth();
    float height = origBox.getHeight();

    // top left
    PDRectangle box = new PDRectangle();
    box.setLowerLeftX(origBox.getLowerLeftX());
    box.setLowerLeftY(origBox.getLowerLeftY() + height / 2);
    box.setUpperRightX(origBox.getUpperRightX() / 2);
    box.setUpperRightY(origBox.getUpperRightY());
    fragments.add(box);

    // bottom left
    box = new PDRectangle();
    box.setLowerLeftX(origBox.getLowerLeftX());
    box.setLowerLeftY(origBox.getLowerLeftY());
    box.setUpperRightX(origBox.getUpperRightX() / 2);
    box.setUpperRightY(origBox.getUpperRightY() / 2);
    fragments.add(box);

    // top right
    box = new PDRectangle();
    box.setLowerLeftX(origBox.getLowerLeftX() + width / 2);
    box.setLowerLeftY(origBox.getLowerLeftY() + height / 2);
    box.setUpperRightX(origBox.getUpperRightX());
    box.setUpperRightY(origBox.getUpperRightY());
    fragments.add(box);

    // bottom right
    box = new PDRectangle();
    box.setLowerLeftX(origBox.getLowerLeftX() + width / 2);
    box.setLowerLeftY(origBox.getLowerLeftY());
    box.setUpperRightX(origBox.getUpperRightX());
    box.setUpperRightY(origBox.getUpperRightY() / 2);
    fragments.add(box);

    return fragments;
}

From source file:paper2ebook.TransformerTest.java

License:Apache License

@Test
@SuppressWarnings("unchecked")
public void testFragmentSizes() throws Exception {

    List<PDPage> pages = sourcePdf.getDocumentCatalog().getAllPages();
    for (PDPage page : pages) {
        List<PDRectangle> fragments = transformer.getFragments(page);
        Assert.assertNotNull(fragments);

        // naive 2 columns splitter will output the 4 quadrants of the page
        Assert.assertEquals(4, fragments.size());
        for (PDRectangle fragment : fragments) {
            Assert.assertEquals(306.1415f, fragment.getWidth());
            Assert.assertEquals(395.433f, fragment.getHeight());
        }//from   w  ww  .  j a va  2s  .c  om
    }
}

From source file:pl.umk.mat.faramir.beamer.MainFrame.java

License:Open Source License

private void loadPdfFile() {
    if (presentationFile == null) {
        return;//  w  ww  . j a v  a 2  s  .  co  m
    }
    if (loadPdfThread != null) {
        loadPdfThread.interrupt();
        loadPdfThread = null;
    }
    loadPdfThread = new Thread(() -> {
        try (PDDocument pdfDocument = PDDocument.load(presentationFile)) {
            PdfRenderer renderer = new PdfRenderer(pdfDocument);
            ScreenDevice screenDevice = (ScreenDevice) presentationScreenComboBox.getSelectedItem();
            GraphicsDevice selectedDevice = screenDevice.getDevice();

            pagesCount = pdfDocument.getNumberOfPages();
            presentationLoadingProgressBar.setMaximum(pagesCount);
            presentationLoadingProgressBar.setValue(0);
            //                presentationLoadingProgressBar.setStringPainted(false);
            presentationMap.clear();
            currentPage = 0;

            for (int processedPage = 0; processedPage < pagesCount; ++processedPage) {
                presentationLoadingProgressBar.setString(String.format("%d/%d", processedPage, pagesCount));
                PDRectangle rect = pdfDocument.getPage(processedPage).getCropBox();

                float width = selectedDevice.getDisplayMode().getWidth();
                float height = selectedDevice.getDisplayMode().getHeight();

                float screenProportion = width / height;
                float scale;
                if (screenProportion <= rect.getWidth() / rect.getHeight()) {
                    scale = width / rect.getWidth();
                } else {
                    scale = height / rect.getHeight();
                }

                BufferedImage bi = renderer.renderImage(processedPage, scale * 2.0f, ImageType.RGB);
                if (Thread.interrupted()) {
                    return;
                }

                presentationMap.put(processedPage, bi);

                presentationLoadingProgressBar.setValue(processedPage + 1);
                checkStartPresentationButtonEnabled();
                refreshFullscreenPage();
            }
            presentationLoadingProgressBar.setString(String.format("%d/%d", pagesCount, pagesCount));
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(this,
                    String.format("Wystpi wyjtek:\n%s", ex.getLocalizedMessage()), "Bd",
                    JOptionPane.ERROR_MESSAGE);
        }
    });
    loadPdfThread.start();
}

From source file:richtercloud.document.scanner.gui.DefaultMainPanel.java

License:Open Source License

@Override
public void exportActiveDocumentItem(OutputStream out, int exportFormat)
        throws IOException, ImageWrapperException {
    if (exportFormat == EXPORT_FORMAT_PDF) {
        //There seems to be no PNG support in Apache PDFBox, but
        //transforming into JPEG isn't too much of an effort and allows to
        //limit dependencies to Apache PDFBox
        PDDocument document = new PDDocument();
        PDRectangle documentRectangle = PDRectangle.A4;
        for (OCRSelectPanel oCRSelectPanel : oCRSelectComponent.getoCRSelectPanelPanel().getoCRSelectPanels()) {
            ImageWrapper imageWrapper = oCRSelectPanel.getImage();
            PDPage page = new PDPage(documentRectangle);
            document.addPage(page);/*  w  ww.  java2 s.c o m*/
            //@TODO: figure out how to create PDImageXObject from stream
            //since this was possible in 1.8 and it's unlikely that there's
            //such a severe regression
            InputStream inputStream = imageWrapper.getOriginalImageStream();
            if (inputStream == null) {
                //cache has been shut down
                return;
            }
            BufferedImage awtImage = ImageIO.read(inputStream);
            PDImageXObject pdImageXObject = LosslessFactory.createFromImage(document, awtImage);
            PDPageContentStream contentStream = new PDPageContentStream(document, page);
            contentStream.drawImage(pdImageXObject, 0, 0, documentRectangle.getWidth(),
                    documentRectangle.getHeight());
            //in case width and height exceed the size of
            //documentRectangle, the page is empty (or the content might
            //be placed outside the page which has the same effect)
            contentStream.setFont(PDType1Font.COURIER, 10);
            contentStream.close();
        }
        document.save(out);
        document.close();
        out.flush();
        out.close();
    } else {
        throw new IllegalArgumentException("export format %s isn't supported");
    }
}

From source file:se.streamsource.streamflow.web.application.pdf.PdfDocument.java

License:Apache License

public PDDocument generateHeaderAndPageNumbers(PdfFont font, String... headers) {
    try {/*from w  w w  .  ja  v a  2 s.com*/
        int pageTotal = pdf.getNumberOfPages();
        int pageCount = 1;
        float stringWidth = 0.0f;
        float positionX = 0.0f;

        for (Object o : pdf.getDocumentCatalog().getAllPages()) {
            String numbering = "" + pageCount + " (" + pageTotal + ")";

            PDPage page = (PDPage) o;
            PDRectangle pageSize = page.findMediaBox();
            float positionY = pageSize.getHeight() - headerMargin + font.height;
            PDPageContentStream stream = new PDPageContentStream(pdf, page, true, true);
            stream.beginText();

            stream.setFont(font.font, font.size);
            stream.moveTextPositionByAmount(0, positionY);

            for (String header : headers) {
                stringWidth = font.font.getStringWidth(header);
                positionX = (pageSize.getWidth() - rightMargin - (stringWidth * font.size) / 1000f);

                stream.moveTextPositionByAmount(positionX, 0);
                stream.drawString(header);
                stream.moveTextPositionByAmount(-positionX, -font.height);
                positionY -= font.height;
            }

            stringWidth = font.font.getStringWidth(numbering);
            positionX = (pageSize.getWidth() - rightMargin - (stringWidth * font.size) / 1000f);
            stream.moveTo(pageSize.getLowerLeftX(), pageSize.getLowerLeftY());
            stream.moveTextPositionByAmount(positionX, 30 - positionY);
            stream.drawString(numbering);

            stream.endText();
            stream.close();
            pageCount++;
        }
    } catch (IOException ioe) {
        close();
    }
    return closeAndReturn();
}

From source file:uk.ac.leeds.ccg.andyt.rdl.web.RDL_ParsePDF.java

/**
 * https://svn.apache.org/viewvc/pdfbox/trunk/examples/ Based on
 * https://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/PrintURLs.java?view=markup&pathrev=1703066
 *
 * @param f//from   w  w w .  j  a  va2 s.c  o  m
 * @param filter
 * @param fis
 * @return
 * @throws IOException
 * @throws TikaException
 * @throws SAXException
 */
public static ArrayList<String[]> parseForLinks(File f, String filter, FileInputStream fis)
        throws IOException, TikaException, SAXException {
    ArrayList<String[]> result;
    result = new ArrayList<String[]>();
    PDDocument doc = PDDocument.load(f);
    int pageNum = 0;
    for (PDPage page : doc.getPages()) {
        pageNum++;

        //            if (pageNum == 11) { //Degug test hack
        System.out.println("Parsing page " + pageNum);
        PDFTextStripperByArea stripper = new PDFTextStripperByArea();
        List<PDAnnotation> annotations = page.getAnnotations();
        //first setup text extraction regions
        for (int j = 0; j < annotations.size(); j++) {
            PDAnnotation annot = annotations.get(j);
            if (annot instanceof PDAnnotationLink) {
                PDAnnotationLink link = (PDAnnotationLink) annot;
                PDRectangle rect = link.getRectangle();
                //need to reposition link rectangle to match text space
                float x = rect.getLowerLeftX();
                float y = rect.getUpperRightY();
                float width = rect.getWidth();
                float height = rect.getHeight();
                int rotation = page.getRotation();
                if (rotation == 0) {
                    PDRectangle pageSize = page.getMediaBox();
                    y = pageSize.getHeight() - y;
                } else if (rotation == 90) {
                    //do nothing
                }

                //Rectangle2D.Float awtRect = new Rectangle2D.Float(x, y, width, height);
                // Rounding here could be a problem!
                Rectangle2D.Double awtRect = new Rectangle2D.Double(x, y, width, height);
                stripper.addRegion("" + j, awtRect);
            }
        }

        stripper.extractRegions(page);

        for (int j = 0; j < annotations.size(); j++) {
            PDAnnotation annot = annotations.get(j);
            if (annot instanceof PDAnnotationLink) {
                PDAnnotationLink link = (PDAnnotationLink) annot;
                PDAction action = link.getAction();
                if (action == null) {
                    System.out.println(link.getContents());
                    System.out.println(annot.getClass().getName());
                    System.out.println(annot.getAnnotationName());
                    //System.out.println(annot.getNormalAppearanceStream().toString());
                    System.out.println(annot.getContents());
                    System.out.println(annot.getSubtype());
                } else {
                    String urlText = stripper.getTextForRegion("" + j);
                    if (action instanceof PDActionURI) {
                        PDActionURI uri = (PDActionURI) action;
                        String url;
                        url = uri.getURI();
                        if (url.contains(filter)) {
                            String[] partResult;
                            partResult = new String[3];
                            partResult[0] = "Page " + pageNum;
                            partResult[1] = "urlText " + urlText;
                            partResult[2] = "URL " + uri.getURI();
                            System.out.println(partResult[0]);
                            System.out.println(partResult[1]);
                            System.out.println(partResult[2]);
                            System.out.println("URL " + uri.getURI());
                            result.add(partResult);
                        } else {
                            System.out.println("URL " + uri.getURI());
                        }
                    } else {
                        System.out.println(action.getType());
                    }
                }
            } else {
                System.out.println(annot.getClass().getName());
                System.out.println(annot.getAnnotationName());
                System.out.println(annot.getContents());
                System.out.println(annot.getSubtype());
            }
        }

        //}
    }
    //       PDDocument doc = PDDocument.load(f);
    //        int pageNum = 0;
    //        for (PDPage page : doc.getPages()) {
    //            pageNum++;
    //            List<PDAnnotation> annotations = page.getAnnotations();
    //
    //            for (PDAnnotation annotation : annotations) {
    //                PDAnnotation annot = annotation;
    //                if (annot instanceof PDAnnotationLink) {
    //                    PDAnnotationLink link = (PDAnnotationLink) annot;
    //                    PDAction action = link.getAction();
    //                    if (action instanceof PDActionURI) {
    //                        PDActionURI uri = (PDActionURI) action;
    //                        String oldURI = uri.getURI();
    //                        String name = annot.getAnnotationName();
    //                        String contents = annot.getContents();
    //                        PDAppearanceStream a = annot.getNormalAppearanceStream();
    //                        //String newURI = "http://pdfbox.apache.org";
    //                        System.out.println(oldURI + " " + name + " " + contents);
    //                        //uri.setURI(newURI);
    //                    }
    //                }
    //            }
    //        }

    //        result = parseWithTika(fis);
    //XMPSchema schema;
    //schema = new XMPSchema();
    //List<String> XMPBagOrSeqList;
    //XMPBagOrSeqList = getXMPBagOrSeqList(XMPSchema schema, String name) {

    //        PDDocument tPDDocument;
    //        tPDDocument = PDDocument.load(f);
    //        COSDocument tCOSDocument;
    //        tCOSDocument = tPDDocument.getDocument();

    //        String header;
    //        header = tCOSDocument.getHeaderString();
    //        System.out.println(header);

    //        PDDocumentCatalog tPDDocumentCatalog;
    //        tPDDocumentCatalog = tPDDocument.getDocumentCatalog();
    //        PDDocumentNameDictionary tPDDocumentNameDictionary;
    //        tPDDocumentNameDictionary = tPDDocumentCatalog.getNames();

    //        COSDictionary tCOSDictionary;
    //        tCOSDictionary = tPDDocumentNameDictionary.getCOSDictionary();
    //tCOSDictionary.
    //        PDPageNode tPDPageNode;
    //        tPDPageNode = tPDDocumentCatalog.getPages();

    //        List<COSObject> tCOSObjects;
    //        tCOSObjects = tCOSDocument.getObjects();
    //        int n;
    //        n = tCOSObjects.size();
    //        System.out.println(n);
    //        COSObject aCOSObject;
    //        String s;
    //        for (int i = 0; i < n; i++) {
    //            aCOSObject = tCOSObjects.get(i);
    //            s = aCOSObject.toString();
    //            System.out.println(s);
    //        }

    //        XMPMetadata tXMPMetadata;
    //        tXMPMetadata = getXMPMetadata(tPDDocument);

    //        Document XMPDocument;
    //        XMPDocument = tXMPMetadata.getXMPDocument();
    //        Node n;
    //        n = XMPDocument.getFirstChild();
    //        parseNode(n);
    return result;
}

From source file:uk.ac.leeds.ccg.andyt.rdl.web.RDL_ParsePDF.java

/**
 * Converts PDF to a String a page at a time.
 *
 * @param f//ww w  .j  a  va 2  s  .c om
 * @return
 * @throws IOException
 */
public static String parseToString(File f) throws IOException {
    String result;
    result = "";
    PDDocument doc = PDDocument.load(f);
    PDFTextStripperByArea stripper = new PDFTextStripperByArea();
    stripper.setSortByPosition(true);
    //Rectangle rect = new Rectangle(10, 280, 275, 60);
    //PDPage firstPage = doc.getPage(0);
    for (PDPage page : doc.getPages()) {
        PDRectangle aPDRectangle;
        aPDRectangle = page.getBBox();
        Rectangle2D.Double rect = new Rectangle2D.Double(aPDRectangle.getLowerLeftX(),
                aPDRectangle.getLowerLeftY(),
                //aPDRectangle.getUpperRightY(),
                aPDRectangle.getWidth(), aPDRectangle.getHeight());
        stripper.addRegion("class1", rect);
        stripper.extractRegions(page);
        System.out.println("<Text in the area:" + rect + ">");
        String text;
        text = stripper.getTextForRegion("class1");
        System.out.println(text);
        System.out.println("</Text in the area:" + rect + ">");
        result += text;
    }
    return result;
}

From source file:uk.ac.liverpool.thumbnails.PDFService.java

License:Open Source License

public BufferedImage generateThumb(URI u, File f, int w, int h, int pn) throws IOException {
    PDDocument document = getPages(u, f);
    List pages = document.getDocumentCatalog().getAllPages();
    int pagen = document.getNumberOfPages();
    int i = 0;//from  ww w.j av  a  2  s.  c om
    if (pn < pages.size())
        i = pn;
    PDPage page = (PDPage) pages.get(i);
    PDRectangle mBox = page.findMediaBox();
    float widthPt = mBox.getWidth();
    float heightPt = mBox.getHeight();
    float sx = widthPt / (float) w;
    float sy = heightPt / (float) h;
    BufferedImage bi = page.convertToImage(BufferedImage.TYPE_INT_ARGB, Math.round(72 / Math.max(sx, sy)));

    return bi;

}