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