List of usage examples for org.apache.pdfbox.pdmodel.common PDRectangle getHeight
public float getHeight()
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; }