Hi 

first of all thanks to the develeloppers of iText. It's a very comfortable 
framework.

I'm struggling with the following problem: I'd like to add an Outline tree to 
a document, while concatanating it with PdfCopy.

I possibly found a bug. As my knowledge of iText internal is very poor, I'm 
not shure about that.


Here's the simpliefied code:


....
PdfImportedPage page;
document.newPage();
for (int i = 0; i < n;)
{
        ++i;
        page = writer.getImportedPage(reader, i);
        writer.addPage(page);

        PdfDestination destination = new PdfDestination(PdfDestination.FITB);
        writer.getDirectContent().localDestination("Page " + String.valueOf
(i),destination);

        PdfOutline outline = new PdfOutline(writer.getDirectContent
().getRootOutline(),destination,"Page " + String.valueOf(i));
}
...

The code always traps in the following IllegalArgumentException, now matter if 
I place the call to localDestination before or after the call to addPage.
Here is the iText-code-snippet of PdfCopy


public PdfIndirectReference getPageReference(int page) {
 if (page < 0 || page > pageNumbersToRefs.size())
     throw new IllegalArgumentException("Invalid page number " + page);
 return (PdfIndirectReference)pageNumbersToRefs.get(page - 1);
}


I see the following reasons:

call to localDestination before addPage
page = currentPage = 1 (1 based) the size of the collection is 0, 
-> thus page > pageNumbersToRefs.size() 
-> exception

call to localDestination after addPage
addPage increment both pageNumbersToRefs.size() and page
-> thus page = currentPage = 2 and pageNumbersToRefs.size() = 1
-> exception


I've overwritten the method getCurrentPage of PdfWriter

PdfIndirectReference getCurrentPage() {
   return getPageReference(currentPageNumber);
}

with the following code
PdfIndirectReference getCurrentPage() {
   return getPageReference(currentPageNumber-1);
}

and all worked fine.

As I mentioned, I'not very into iText interals. Therefor I can't assess if 
this is the correct way to solve this problem. 
I would be pleased, if someone more competent, would have a look at it.

Thanks,

Matthias





-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
iText-questions mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/itext-questions

Reply via email to