Add Odd-Even Merge operation mode (#1445)
* Add ODD_EVEN_MERGE sort type * Add process method to merge odd and even PDF pages * Add test cases for Odd-Even merge method * Add Odd-Even Merge mode in PDF Organizer webpage This also add a new translatable text message variable pdfOrganiser.mode.10 with translation for english and german * Add ODD_EVEN_MERGE documentation to RearrangePagesRequest * Add english translation for pdfOrganiser.mode.10 --------- Co-authored-by: Anthony Stirling <77850077+Frooodle@users.noreply.github.com>
This commit is contained in:
@@ -145,6 +145,28 @@ public class RearrangePagesPDFController {
|
||||
return newPageOrder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rearrange pages in a PDF file by merging odd and even pages. The first half of the pages will
|
||||
* be the odd pages, and the second half will be the even pages as input. <br>
|
||||
* This method is visible for testing purposes only.
|
||||
*
|
||||
* @param totalPages Total number of pages in the PDF file.
|
||||
* @return List of page numbers in the new order. The first page is 0.
|
||||
*/
|
||||
List<Integer> oddEvenMerge(int totalPages) {
|
||||
List<Integer> newPageOrderZeroBased = new ArrayList<>();
|
||||
int numberOfOddPages = (totalPages + 1) / 2;
|
||||
|
||||
for (int oneBasedIndex = 1; oneBasedIndex < (numberOfOddPages + 1); oneBasedIndex++) {
|
||||
newPageOrderZeroBased.add((oneBasedIndex - 1));
|
||||
if (numberOfOddPages + oneBasedIndex <= totalPages) {
|
||||
newPageOrderZeroBased.add((numberOfOddPages + oneBasedIndex - 1));
|
||||
}
|
||||
}
|
||||
|
||||
return newPageOrderZeroBased;
|
||||
}
|
||||
|
||||
private List<Integer> processSortTypes(String sortTypes, int totalPages) {
|
||||
try {
|
||||
SortTypes mode = SortTypes.valueOf(sortTypes.toUpperCase());
|
||||
@@ -159,6 +181,8 @@ public class RearrangePagesPDFController {
|
||||
return sideStitchBooklet(totalPages);
|
||||
case ODD_EVEN_SPLIT:
|
||||
return oddEvenSplit(totalPages);
|
||||
case ODD_EVEN_MERGE:
|
||||
return oddEvenMerge(totalPages);
|
||||
case REMOVE_FIRST:
|
||||
return removeFirst(totalPages);
|
||||
case REMOVE_LAST:
|
||||
|
||||
@@ -6,6 +6,7 @@ public enum SortTypes {
|
||||
BOOKLET_SORT,
|
||||
SIDE_STITCH_BOOKLET_SORT,
|
||||
ODD_EVEN_SPLIT,
|
||||
ODD_EVEN_MERGE,
|
||||
REMOVE_FIRST,
|
||||
REMOVE_LAST,
|
||||
REMOVE_FIRST_AND_LAST,
|
||||
|
||||
@@ -19,6 +19,7 @@ public class RearrangePagesRequest extends PDFWithPageNums {
|
||||
+ "DUPLEX_SORT: Sorts pages as if all fronts were scanned then all backs in reverse (1, n, 2, n-1, ...). "
|
||||
+ "BOOKLET_SORT: Arranges pages for booklet printing (last, first, second, second last, ...).\n"
|
||||
+ "ODD_EVEN_SPLIT: Splits and arranges pages into odd and even numbered pages.\n"
|
||||
+ "ODD_EVEN_MERGE: Merges pages and organises them alternately into odd and even pages.\n"
|
||||
+ "REMOVE_FIRST: Removes the first page.\n"
|
||||
+ "REMOVE_LAST: Removes the last page.\n"
|
||||
+ "REMOVE_FIRST_AND_LAST: Removes both the first and the last pages.\n")
|
||||
|
||||
Reference in New Issue
Block a user