PDFBookmarkUtils.java
3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.adobe.internal.pdftoolkit.core.exceptions.PDFIOException
* com.adobe.internal.pdftoolkit.core.exceptions.PDFInvalidDocumentException
* com.adobe.internal.pdftoolkit.core.exceptions.PDFSecurityException
* com.adobe.internal.pdftoolkit.core.types.ASName
*/
package com.adobe.internal.pdftoolkit.pdf.interactive.navigation;
import com.adobe.internal.pdftoolkit.core.exceptions.PDFIOException;
import com.adobe.internal.pdftoolkit.core.exceptions.PDFInvalidDocumentException;
import com.adobe.internal.pdftoolkit.core.exceptions.PDFSecurityException;
import com.adobe.internal.pdftoolkit.core.types.ASName;
import com.adobe.internal.pdftoolkit.pdf.document.PDFCosObject;
import com.adobe.internal.pdftoolkit.pdf.interactive.navigation.PDFBookmark;
import com.adobe.internal.pdftoolkit.pdf.interactive.navigation.PDFBookmarkNode;
public class PDFBookmarkUtils {
public static void appendLastKid(PDFBookmark bookmark, PDFBookmarkNode parentBookmarkNode) throws PDFInvalidDocumentException, PDFIOException, PDFSecurityException {
PDFBookmark lastKid = parentBookmarkNode.getLastKid();
if (!parentBookmarkNode.dictionaryContains(ASName.k_First)) {
parentBookmarkNode.setFirst(bookmark);
}
if (lastKid != null) {
lastKid.setNext(bookmark);
}
bookmark.setPrevious(lastKid);
parentBookmarkNode.setLast(bookmark);
bookmark.setDictionaryValue(ASName.k_Parent, parentBookmarkNode);
}
public static void insertAfterKid(PDFBookmark insertAfter, PDFBookmark toInsert, PDFBookmarkNode parentBookmark) throws PDFInvalidDocumentException, PDFIOException, PDFSecurityException {
PDFBookmark insertBefore;
if (toInsert == null) {
return;
}
if (insertAfter == null) {
insertBefore = parentBookmark.getFirstKid();
parentBookmark.setFirst(toInsert);
} else {
insertBefore = insertAfter.getNext();
insertAfter.setNext(toInsert);
toInsert.setPrevious(insertAfter);
}
PDFBookmark lastToInsert = null;
for (PDFBookmark b = toInsert; b != null; b = b.getNext()) {
b.setParent(parentBookmark);
lastToInsert = b;
}
if (insertBefore == null) {
parentBookmark.setLast(lastToInsert);
} else {
lastToInsert.setNext(insertBefore);
insertBefore.setPrevious(lastToInsert);
}
}
public static void replaceKid(PDFBookmark toReplace, PDFBookmark toInsert, PDFBookmarkNode parentBookmark) throws PDFInvalidDocumentException, PDFIOException, PDFSecurityException {
PDFBookmark previous = toReplace.getPrevious();
PDFBookmark following = toReplace.getNext();
if (toInsert == null) {
if (previous == null) {
parentBookmark.setFirst(following);
} else {
previous.setNext(following);
}
if (following == null) {
parentBookmark.setLast(previous);
} else {
following.setPrevious(previous);
}
return;
}
toInsert.setPrevious(previous);
if (previous == null) {
parentBookmark.setFirst(toInsert);
} else {
previous.setNext(toInsert);
}
PDFBookmark lastToInsert = null;
for (PDFBookmark b = toInsert; b != null; b = b.getNext()) {
b.setParent(parentBookmark);
lastToInsert = b;
}
lastToInsert.setNext(following);
if (following == null) {
parentBookmark.setLast(lastToInsert);
} else {
following.setPrevious(lastToInsert);
}
}
}