@@ -34,17 +34,16 @@ This file is part of the iText (R) project.
34
34
import com .itextpdf .kernel .pdf .PdfName ;
35
35
import com .itextpdf .kernel .pdf .PdfNumber ;
36
36
import com .itextpdf .kernel .pdf .PdfObject ;
37
+ import com .itextpdf .kernel .pdf .PdfOutline ;
37
38
import com .itextpdf .kernel .pdf .PdfPage ;
38
39
import com .itextpdf .kernel .pdf .PdfStream ;
39
40
import com .itextpdf .kernel .pdf .PdfString ;
40
41
import com .itextpdf .kernel .pdf .PdfXrefTable ;
41
42
import com .itextpdf .kernel .pdf .canvas .CanvasGraphicsState ;
42
43
import com .itextpdf .kernel .pdf .colorspace .PdfColorSpace ;
43
44
44
- import java .util .ArrayList ;
45
45
import java .util .HashMap ;
46
46
import java .util .HashSet ;
47
- import java .util .List ;
48
47
import java .util .Map ;
49
48
import java .util .Set ;
50
49
@@ -164,7 +163,9 @@ public void checkDocument(PdfCatalog catalog) {
164
163
checkCatalog (catalog );
165
164
checkLogicalStructure (catalogDict );
166
165
checkForm (catalogDict .getAsDictionary (PdfName .AcroForm ));
167
- checkOutlines (catalogDict );
166
+ if (catalog .getDocument ().hasOutlines ()) {
167
+ checkOutlines (catalog .getDocument ().getOutlines (false ));
168
+ }
168
169
checkPages (catalog .getDocument ());
169
170
checkOpenAction (catalogDict .get (PdfName .OpenAction ));
170
171
checkColorsUsages ();
@@ -917,34 +918,18 @@ private void checkAnnotations(PdfDictionary page) {
917
918
}
918
919
}
919
920
920
- private void checkOutlines (PdfDictionary catalogDict ){
921
- PdfDictionary outlines = catalogDict . getAsDictionary ( PdfName . Outlines );
922
- if ( outlines != null ) {
923
- for ( PdfDictionary outline : getOutlines ( outlines ) ) {
924
- PdfDictionary action = outline . getAsDictionary ( PdfName . A );
925
- if ( action != null ) {
926
- checkAction ( action );
927
- }
921
+ private void checkOutlines (PdfOutline outline ){
922
+ if ( outline != null ) {
923
+ final PdfDictionary action = outline . getContent (). getAsDictionary ( PdfName . A );
924
+ if ( action != null ) {
925
+ checkAction ( action );
926
+ }
927
+ for ( PdfOutline child : outline . getAllChildren ()) {
928
+ checkOutlines ( child );
928
929
}
929
930
}
930
931
}
931
932
932
- private List <PdfDictionary > getOutlines (PdfDictionary item ) {
933
- List <PdfDictionary > outlines = new ArrayList <>();
934
- outlines .add (item );
935
-
936
- PdfDictionary processItem = item .getAsDictionary (PdfName .First );
937
- if (processItem != null ){
938
- outlines .addAll (getOutlines (processItem ));
939
- }
940
- processItem = item .getAsDictionary (PdfName .Next );
941
- if (processItem != null ){
942
- outlines .addAll (getOutlines (processItem ));
943
- }
944
-
945
- return outlines ;
946
- }
947
-
948
933
private void setCheckerOutputIntent (PdfDictionary outputIntent ) {
949
934
if (outputIntent != null ) {
950
935
pdfAOutputIntentDestProfile = outputIntent .getAsStream (PdfName .DestOutputProfile );
0 commit comments