Goals:
(1) To obtain a "copy" of an existing PDF (including interactive features)
(2) The "copy" must be on a slightly larger page, to accommodate goal 3.
(3) Place text in the "border" created from placing the original page on the 
slightly larger page.

Background:
(1) I have read and re-read iText in Action several/many times (both editions) 
and simply confuse myself more and more each time I read it.  However, I think 
I am beginning to have a better understanding.
(2) I have actually written code that does all of the above with the slight 
exception that interactive features are lost.
(3) Using iText 5.0.2

Question:
Am I using the best approach as detailed in my current algorithm that follows?
It would seem that I should probably be using PdfStamper somehow (even though I 
think that will result in a different approach to increasing the page size.
However, unless I have mis-read this many times now, I thought the whole idea to
   writer.getImportedPage()
was to retain interactive features by letting the writer use the reader?
Or is that only when using PdfCopy/SmartCopy?

Current Algorithm:
Goal #3 is another step (not included here) and seems to working just fine 
(though the answer to my question may affect this).
Goals #1 and #2 are combined into a single method which is where I am losing 
interactive features:

    private File enlargeDocument(String src, int stampType, boolean 
docDelState) throws IOException, DocumentException {

        final PdfReader rdr = createPdfReader(src);
        int count = rdr.getNumberOfPages();

        final File tmpDstFile = createTempPDFFile();
        final Document document = new Document();
        final PdfWriter writer = PdfWriter.getInstance(document, new 
FileOutputStream(tmpDstFile));

        document.open();

        final PdfContentByte cb = writer.getDirectContent();
        for ( int i = 1 ; i <= count ; i++ ) {

            final float cropSize = calcStampCropSize(rdr, i, stampType);

            final PdfImportedPage page = writer.getImportedPage(rdr, i);
            final int rotation = rdr.getPageRotation(i);
            logger.debug("Rotation of page " + i + " is: " + rotation);

            final float width = page.getBoundingBox().getRight() + ((stampType 
== PRESTAMP) ? 0 : cropSize);
            final float height = page.getBoundingBox().getTop() + ((stampType 
== PRESTAMP) ? cropSize : 0);
            final PdfRectangle newRect = new PdfRectangle(width, height, 
rotation);

            document.setPageSize(newRect.getRectangle());
            document.newPage();

            if (stampType == PRESTAMP) {
                    cb.addTemplate(page, 0, cropSize);
            } else { // stampType == POSTSTAMP
                    cb.addTemplate(page, cropSize, 0);
            }
        }

        document.close();

        return tmpDstFile;
    }

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions

iText(R) is a registered trademark of 1T3XT BVBA.
Many questions posted to this list can (and will) be answered with a reference 
to the iText book: http://www.itextpdf.com/book/
Please check the keywords list before you ask for examples: 
http://itextpdf.com/themes/keywords.php

Reply via email to