Example usage for com.itextpdf.text.pdf PdfStamper setOutlines

List of usage examples for com.itextpdf.text.pdf PdfStamper setOutlines

Introduction

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

Prototype

public void setOutlines(final List<HashMap<String, Object>> outlines) 

Source Link

Document

Sets the bookmarks.

Usage

From source file:at.laborg.briss.CropManager.java

License:Open Source License

private static void cropMultipliedFile(File source, CropJob cropJob)
        throws FileNotFoundException, DocumentException, IOException {

    PdfReader reader = new PdfReader(source.getAbsolutePath());
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(cropJob.getDestinationFile()));
    stamper.setMoreInfo(cropJob.getSourceMetaInfo());

    PdfDictionary pageDict;/*  w  ww .j a va 2  s .co  m*/
    int newPageNumber = 1;
    for (int origPageNumber = 1; origPageNumber <= cropJob.getSourcePageCount(); origPageNumber++) {
        SingleCluster cluster = cropJob.getClusterCollection().getSingleCluster(origPageNumber);

        // if no crop was selected do nothing
        if (cluster.getRatiosList().size() == 0) {
            newPageNumber++;
            continue;
        }

        for (Float[] ratios : cluster.getRatiosList()) {

            pageDict = reader.getPageN(newPageNumber);

            List<Rectangle> boxes = new ArrayList<Rectangle>();
            boxes.add(reader.getBoxSize(newPageNumber, "media"));
            boxes.add(reader.getBoxSize(newPageNumber, "crop"));
            int rotation = reader.getPageRotation(newPageNumber);

            Rectangle scaledBox = calculateScaledRectangle(boxes, ratios, rotation);

            PdfArray scaleBoxArray = new PdfArray();
            scaleBoxArray.add(new PdfNumber(scaledBox.getLeft()));
            scaleBoxArray.add(new PdfNumber(scaledBox.getBottom()));
            scaleBoxArray.add(new PdfNumber(scaledBox.getRight()));
            scaleBoxArray.add(new PdfNumber(scaledBox.getTop()));

            pageDict.put(PdfName.CROPBOX, scaleBoxArray);
            pageDict.put(PdfName.MEDIABOX, scaleBoxArray);
            // increment the pagenumber
            newPageNumber++;
        }
        int[] range = new int[2];
        range[0] = newPageNumber - 1;
        range[1] = cropJob.getSourcePageCount() + (newPageNumber - origPageNumber);
        SimpleBookmark.shiftPageNumbers(cropJob.getSourceBookmarks(), cluster.getRatiosList().size() - 1,
                range);
    }
    stamper.setOutlines(cropJob.getSourceBookmarks());
    stamper.close();
    reader.close();
}

From source file:at.laborg.briss.utils.DocumentCropper.java

License:Open Source License

private static void cropMultipliedFile(final CropDefinition cropDefinition, final File multipliedDocument,
        final PdfMetaInformation pdfMetaInformation) throws DocumentException, IOException {

    PdfReader reader = new PdfReader(multipliedDocument.getAbsolutePath());

    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(cropDefinition.getDestinationFile()));
    stamper.setMoreInfo(pdfMetaInformation.getSourceMetaInfo());

    PdfDictionary pageDict;/*from  ww  w .  java 2  s. c o  m*/
    int newPageNumber = 1;

    for (int sourcePageNumber = 1; sourcePageNumber <= pdfMetaInformation
            .getSourcePageCount(); sourcePageNumber++) {

        List<Float[]> rectangleList = cropDefinition.getRectanglesForPage(sourcePageNumber);

        // if no crop was selected do nothing
        if (rectangleList.isEmpty()) {
            newPageNumber++;
            continue;
        }

        for (Float[] ratios : rectangleList) {

            pageDict = reader.getPageN(newPageNumber);

            List<Rectangle> boxes = new ArrayList<Rectangle>();
            boxes.add(reader.getBoxSize(newPageNumber, "media"));
            boxes.add(reader.getBoxSize(newPageNumber, "crop"));
            int rotation = reader.getPageRotation(newPageNumber);

            Rectangle scaledBox = RectangleHandler.calculateScaledRectangle(boxes, ratios, rotation);

            PdfArray scaleBoxArray = createScaledBoxArray(scaledBox);

            pageDict.put(PdfName.CROPBOX, scaleBoxArray);
            pageDict.put(PdfName.MEDIABOX, scaleBoxArray);
            // increment the pagenumber
            newPageNumber++;
        }
        int[] range = new int[2];
        range[0] = newPageNumber - 1;
        range[1] = pdfMetaInformation.getSourcePageCount() + (newPageNumber - sourcePageNumber);
        SimpleBookmark.shiftPageNumbers(pdfMetaInformation.getSourceBookmarks(), rectangleList.size() - 1,
                range);
    }
    stamper.setOutlines(pdfMetaInformation.getSourceBookmarks());
    stamper.close();
    reader.close();
}

From source file:be.roots.taconic.pricingguide.service.PDFServiceImpl.java

License:Open Source License

private byte[] createBookmarks(byte[] pdf, Toc tableOfContents) throws DocumentException, IOException {

    // create the bookmarks
    final List<HashMap<String, Object>> outlines = new ArrayList<>();
    final List<TocEntry> entriesSorted = tableOfContents.getEntriesSorted();
    final List<HashMap<String, Object>> modelBookmarkKids = new ArrayList<>();
    HashMap<String, Object> modelBookmark;

    for (TocEntry tocEntry : entriesSorted) {

        if (tocEntry.isIncludedInToc()) {

            final HashMap<String, Object> bookmark = new HashMap<>();

            String name = tocEntry.getName();
            name = name.replaceAll("<sup>", "");
            name = name.replaceAll("</sup>", "");
            name = name.replaceAll("<i.*?>", "");
            name = name.replaceAll("</i>", "");
            name = GreekAlphabet.replaceGreekHtmlCodesWithUnicode(name);

            bookmark.put("Title", name);
            bookmark.put("Action", "GoTo");
            bookmark.put("Page", String.format("%d Fit", tocEntry.getFinalPageNumber()));
            if (tocEntry.getLevel() == 1) {
                outlines.add(bookmark);/*  w  w  w .  ja v a 2 s .c  om*/
            } else {
                modelBookmarkKids.add(bookmark);
            }

            if (tocEntry.isModelHeader()) {
                modelBookmark = bookmark;
                modelBookmark.put("Open", true);
                modelBookmark.put("Kids", modelBookmarkKids);
            }

        }

    }

    try (final ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
        final PdfReader reader = new PdfReader(pdf);
        final PdfStamper stamper = new PdfStamper(reader, bos);

        stamper.setOutlines(outlines);
        stamper.close();
        reader.close();

        return bos.toByteArray();
    }

}