Example usage for org.apache.pdfbox.pdmodel PDPage getArtBox

List of usage examples for org.apache.pdfbox.pdmodel PDPage getArtBox

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdmodel PDPage getArtBox.

Prototype

public PDRectangle getArtBox() 

Source Link

Document

A rectangle, expressed in default user space units, defining the extent of the page's meaningful content (including potential white space) as intended by the page's creator The default is the CropBox.

Usage

From source file:fr.aviz.hybridvis.utils.PDF.MultiScalePDFViewer.java

License:Open Source License

private void addOnWallImg(BufferedImage src, PDPage key) {
    int w = src.getWidth();
    int h = src.getHeight();

    // current wall column
    int curX = (int) Math.floor((double) nextX / (double) RESOLUTION_X);

    if (nextX + w > tempWidth) {
        // go to next screen row
        nextX = 0;/*  w ww .java 2s .c  om*/
        nextY += RESOLUTION_Y;
    }

    if (nextX + w > (curX + 1) * RESOLUTION_X) {
        if (w <= RESOLUTION_X) {
            // small image, but does not fit in current screen
            nextX = (curX + 1) * RESOLUTION_X;
        }
        // else w bigger than screen width, fit as you can
    }

    if (nextY > tempHeight) {
        // well, no more space ...
        return;
    }

    if (hybrid) {
        // close
        int pn = findPageNumber(document, key);

        System.out.println("Printing content in p. " + pn);

        if (closeImg == null)
            System.err.println("Image closeImg is null");

        Graphics2D g = closeImg.createGraphics();
        g.drawImage(src, nextX, nextY, w, h, null);

        // far, get titles and draw them
        BufferedImage itemImage;
        int titlesInPage = 0;
        List<String> titles = pageTitles.get(key);

        if (titles != null) {
            titlesInPage = titles.size();
            System.out.println("Printing titles in p. " + pn);
        }
        // local coords for titles in one page
        int pw = (int) key.getArtBox().getWidth() - 100;
        int ph = (int) key.getArtBox().getHeight() - 100;
        int px = (int) key.getArtBox().getLowerLeftX() + 50;
        int py = (int) key.getArtBox().getLowerLeftY() + 50;

        itemImage = new BufferedImage(pw, ph, BufferedImage.TYPE_INT_ARGB);

        if (titles_on && clouds_on) {
            itemImage = printTitlesAndCloudInImage(key, pn, titles, itemFont);
        } else if (titles_on) {
            if (titles != null)
                itemImage = printTitlesInImage(key, titles, itemFont);
        } else if (clouds_on) {
            itemImage = printCloudInImage(key, pn, titles, itemFont);
        }

        Graphics2D g2 = farImg.createGraphics();
        g2.drawImage(itemImage, nextX, nextY, w, h, null);
        g.dispose();
    }
    // } else {
    // Graphics2D g = wallImg.createGraphics();
    // g.drawImage(src, nextX, nextY, w, h, null);
    // g.dispose();
    // }

    nextX += w;
}

From source file:fr.aviz.hybridvis.utils.PDF.MultiScalePDFViewer.java

License:Open Source License

/**
 * @param PDDocument/*from  w  ww.  j  a  v  a2  s.co m*/
 *            Extracts the PDF's structure (up to 2 levels) if available
 *            (PDF passed as PDDocument). Create an image of the structure
 *            for each of the 1st level titles
 */
protected void pdfGetStructure_PDFbox(PDDocument document) throws IOException {

    PDDocumentOutline root = document.getDocumentCatalog().getDocumentOutline();
    PDOutlineItem item;

    try {
        item = root.getFirstChild();
    } catch (NullPointerException e) {
        System.out.println("No structure for pdf " + PDFname);
        return;
    }

    // fill map with titles per page
    while (item != null) {
        int pageNumber = findPageNumber(document, item.findDestinationPage(document));

        String conc = item.getTitle();
        if (conc.length() > 13)
            conc = conc.subSequence(0, 10) + "...";

        System.out.println("Item:" + conc + " at page " + pageNumber);

        if (pageTitles.containsKey(item.findDestinationPage(document)))

            pageTitles.get(item.findDestinationPage(document)).add(conc);
        else {
            pageTitles.put(item.findDestinationPage(document), new ArrayList<String>());
            pageTitles.get(item.findDestinationPage(document)).add(conc);
        }

        // do nothing with 2nd level children
        PDOutlineItem child = item.getFirstChild();
        while (child != null) {
            System.out.println("    Child:" + child.getTitle());
            child = child.getNextSibling();
        }
        item = item.getNextSibling();
    }

    int pn = 0;
    if (!hybrid) {
        BufferedImage itemImage;
        for (PDPage key : pages) {
            // for (PDPage key : pageTitles.keySet()) {
            ++pn;

            int titlesInPage = 0;
            List<String> titles = null;
            if (pageTitles.containsKey(key)) {
                titles = pageTitles.get(key);
                titlesInPage = titles.size();
            }

            int w = (int) key.getArtBox().getWidth() - 200;
            int h = (int) key.getArtBox().getHeight() - 100;
            ;
            int x = (int) key.getArtBox().getLowerLeftX() + 50;
            int y = (int) key.getArtBox().getLowerLeftY() + 50;

            // calling createGraphics() to get the Graphics2D and setup for
            // drawing titles
            itemImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

            if (titles_on && clouds_on) {
                itemImage = printTitlesAndCloudInImage(key, pn, titles, itemFont);
            } else if (titles_on) {
                if (titles != null)
                    itemImage = printTitlesInImage(key, titles, itemFont);
            } else if (clouds_on) {
                itemImage = printCloudInImage(key, pn, titles, itemFont);
            }
        }

    }

}

From source file:fr.aviz.hybridvis.utils.PDF.MultiScalePDFViewer.java

License:Open Source License

private BufferedImage printTitlesInImage(PDPage key, List<String> titles, Font itemFont) {

    int titlesInPage = titles.size();

    // assuming dimensions of PDF page for drawing
    int w = (int) key.getMediaBox().getWidth() - 200;
    int h = (int) key.getMediaBox().getHeight() - 100;
    int x = (int) key.getArtBox().getLowerLeftX() + 50;
    int y = (int) key.getArtBox().getLowerLeftY() + 50;

    // no idea why this is needed
    w *= 2;/*w  w w .ja v a2  s. c  o m*/
    h *= 2;

    BufferedImage itemImage;
    if (!hybrid) {
        // calling createGraphics() to get the Graphics2D and setup for
        // drawing titles. Completely transparent
        itemImage = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice()
                .getDefaultConfiguration().createCompatibleImage(w, h, Transparency.TRANSLUCENT);
    } else {
        itemImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    }

    Graphics2D g = itemImage.createGraphics();
    int currentTitle = titlesInPage;

    // background of title image transparent
    g.setColor(new Color(0f, 0f, 0f, opacity));
    for (String title : titles) {
        itemFont = scaleFontToFit(title, w - 100, g, itemFont);
        g.setFont(itemFont);
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);

        g.drawString(title, (float) x,
                (float) (y + (titlesInPage - currentTitle + 1) * h / (titlesInPage + 1)));
        --currentTitle;
    }
    // releasing resources
    g.dispose();

    return itemImage;

}

From source file:fr.aviz.hybridvis.utils.PDF.MultiScalePDFViewer.java

License:Open Source License

private BufferedImage printTitlesAndCloudInImage(PDPage key, int pageNo, List<String> titles, Font itemFont) {

    // assuming dimensions of PDF page for drawing
    int w = (int) key.getMediaBox().getWidth() - 200;
    int h = (int) key.getMediaBox().getHeight() - 100;
    int x = (int) key.getArtBox().getLowerLeftX() + 50;
    int y = (int) key.getArtBox().getLowerLeftY() + 50;

    // no idea why this is needed
    w *= 2;//  ww  w.  java  2s . c  om
    h *= 2;

    BufferedImage itemImage;
    if (!hybrid) {
        // calling createGraphics() to get the Graphics2D and setup for
        // drawing titles. Completely transparent
        itemImage = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice()
                .getDefaultConfiguration().createCompatibleImage(w, h, Transparency.TRANSLUCENT);
    } else {
        itemImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    }

    int originalFont = itemFont.getSize();

    Graphics2D g = itemImage.createGraphics();

    // background of title image transparent
    g.setColor(new Color(1f, 1f, 1f, 0f));
    g.fillRect(0, 0, w, h);
    g.setColor(new Color(0f, 0f, 0f, opacity));

    if (titles != null) {
        int titlesInPage = titles.size();
        int currentTitle = titlesInPage;

        for (String title : titles) {
            itemFont = scaleFontToFit(title, w - 100, g, itemFont);
            g.setFont(itemFont);
            g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);

            g.drawString(title, x, (float) ((titlesInPage - currentTitle + 1) * h * .5 / (titlesInPage + 1)));
            --currentTitle;
        }
    } else {
        System.out.println("PAGE NO TITLE");
    }

    String pageText;
    StringWriter pageTextWriter = new StringWriter();

    System.out.println("Printing text in p. " + pageNo);

    try {
        PDFts.setStartPage(pageNo);
        PDFts.setEndPage(pageNo);
        PDFts.writeText(document, pageTextWriter);
        pageText = pageTextWriter.toString();

        itemFont = itemFont.deriveFont(originalFont);
        g.setFont(itemFont);
        TagCloudImageGenerator tcig = new TagCloudImageGenerator(pageText, null, w, h / 2);

        int tw = tcig.getCloudImage().getWidth();
        int th = tcig.getCloudImage().getHeight();

        int y_drawing = h / 2 - 100;
        int x_drawing = 50;
        if (tw < w)
            x_drawing += .5 * (w - tw);

        if (titles == null)
            y_drawing = (int) (h / 4.0);

        g.drawImage(tcig.getCloudImage(), x_drawing, y_drawing, w, (h / 2), null);
    } catch (IOException e) {
        e.printStackTrace();
    }

    // releasing resources
    g.dispose();

    return itemImage;
}

From source file:fr.aviz.hybridvis.utils.PDF.MultiScalePDFViewer.java

License:Open Source License

private BufferedImage printCloudInImage(PDPage key, int pageNo, List<String> titles, Font itemFont) {

    // assuming dimensions of PDF page for drawing
    int w = (int) key.getMediaBox().getWidth() - 200;
    int h = (int) key.getMediaBox().getHeight() - 100;
    int x = (int) key.getArtBox().getLowerLeftX() + 50;
    int y = (int) key.getArtBox().getLowerLeftY() + 50;

    // no idea why this is needed
    w *= 2;/*from w  w  w  . j  av a 2s  .  c o m*/
    h *= 2;

    BufferedImage itemImage;
    if (!hybrid) {
        // calling createGraphics() to get the Graphics2D and setup for
        // drawing titles. Completely transparent
        itemImage = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice()
                .getDefaultConfiguration().createCompatibleImage(w, h, Transparency.TRANSLUCENT);
    } else {
        itemImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    }

    int originalFont = itemFont.getSize();

    Graphics2D g = itemImage.createGraphics();

    // background of title image transparent
    g.setColor(new Color(1f, 1f, 1f, 0f));
    g.fillRect(0, 0, w, h);
    g.setColor(new Color(0f, 0f, 0f, opacity));

    String pageText;
    StringWriter pageTextWriter = new StringWriter();

    System.out.println("Printing text in p. " + pageNo);

    try {
        PDFts.setStartPage(pageNo);
        PDFts.setEndPage(pageNo);
        PDFts.writeText(document, pageTextWriter);
        pageText = pageTextWriter.toString();

        itemFont = itemFont.deriveFont(originalFont);
        g.setFont(itemFont);
        TagCloudImageGenerator tcig = new TagCloudImageGenerator(pageText, null, w, 3 * h / 4);

        int tw = tcig.getCloudImage().getWidth();
        int th = tcig.getCloudImage().getHeight();

        int y_drawing = h / 4 - 100;
        int x_drawing = 50;
        if (tw < w)
            x_drawing += .5 * (w - tw);

        g.drawImage(tcig.getCloudImage(), x_drawing, y_drawing, w, 3 * h / 4, 0, 0,
                tcig.getCloudImage().getWidth(), tcig.getCloudImage().getHeight(), null);
    } catch (IOException e) {
        e.printStackTrace();
    }

    // releasing resources
    g.dispose();

    return itemImage;
}

From source file:org.qi4j.envisage.print.PDFWriter.java

License:Apache License

private void createNewPage() {
    try {/*  www. java 2 s  . co  m*/
        if (curContentStream != null) {
            curContentStream.endText();
            curContentStream.close();
        }

        PDPage page = new PDPage();
        doc.addPage(page);

        curContentStream = new PDPageContentStream(doc, page);

        curPageSize = page.getArtBox();
        //System.out.println("pSize: " + pdRect.getWidth() + "," + pdRect.getHeight());

        curContentStream.beginText();
        curY = curPageSize.getHeight() - startY;
        curContentStream.moveTextPositionByAmount(startX, curY);

        if (curFont != null) {
            setFont(curFont, curFontSize);
        }
    } catch (IOException e) {
        throw new PrintingException("Unable to create page.", e);
    }
}