i am using itext pdf library. can any one know how can i move pages in existing pdf?
Actually i want to move few last pages at beginning of file.
It is something like below but i don't understand how it work.
reader = new PdfReader(baos.toByteArray());
n = reader.getNumberOfPages();
reader.selectPages(String.format("%d, 1-%d", n, n-1));
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(filename));
stamper.close();
Can any one explain in detail?
The
selectPages()
method is explained in chapter 6 of my book (see page 164). In the context of code snippet 6.3 and 6.11, it is used to reduce the number of pages being read byPdfReader
for consumption byPdfStamper
orPdfCopy
. However, it can also be used to reorder pages. First allow me to explain the syntax.There are different flavors of the
selectPages()
method:You can pass a
List<Integer>
containing all the page numbers you want to keep. This list can consist of increasing page numbers, 1, 2, 3, 4,... If you change the order, for instance: 1, 3, 2, 4,...PdfReader
will serve the pages in that changed order.You can also pass a String (which is what is done in your snippet) using the following syntax:
You can have multiple ranges separated by commas, and the ! modifier removes pages from what is already selected. The range changes are incremental; numbers are added or deleted as the range appears. The start or the end can be omitted; if you omit both, you need at least o (odd; selects all odd pages) or e (even; selects all even pages).
In your case, we have:
Suppose we have a document with 10 pages, then
n
equals 10 and the result of the formatting operation is:"10, 1-9"
. In this case,PdfReader
will present the last page as the first one, followed by pages 1 to 9.Now suppose that you have a TOC that starts on page 8, and you want to move this TOC to the first pages, then you need something like this:
8-10, 1-7
, or iftoc
equals 8 andn
equals 10:For more info about the
format()
method, see the API docs forString
and the Format String syntax.