iTextSharp.text.pdf.SimpleBookmark.CreateOutlineAction C# (CSharp) Метод

CreateOutlineAction() статический приватный Метод

static private CreateOutlineAction ( PdfDictionary outline, Object>.Dictionary map, PdfWriter writer, bool namedAsNames ) : void
outline PdfDictionary
map Object>.Dictionary
writer PdfWriter
namedAsNames bool
Результат void
        internal static void CreateOutlineAction(PdfDictionary outline, Dictionary<String, Object> map, PdfWriter writer, bool namedAsNames)
        {
            try {
                String action = GetVal(map, "Action");
                if ("GoTo".Equals(action)) {
                    String p;
                    if ((p = GetVal(map, "Named")) != null) {
                        if (namedAsNames)
                            outline.Put(PdfName.DEST, new PdfName(p));
                        else
                            outline.Put(PdfName.DEST, new PdfString(p, null));
                    }
                    else if ((p = GetVal(map, "Page")) != null) {
                        PdfArray ar = new PdfArray();
                        StringTokenizer tk = new StringTokenizer(p);
                        int n = int.Parse(tk.NextToken());
                        ar.Add(writer.GetPageReference(n));
                        if (!tk.HasMoreTokens()) {
                            ar.Add(PdfName.XYZ);
                            ar.Add(new float[]{0, 10000, 0});
                        }
                        else {
                            String fn = tk.NextToken();
                            if (fn.StartsWith("/"))
                                fn = fn.Substring(1);
                            ar.Add(new PdfName(fn));
                            for (int k = 0; k < 4 && tk.HasMoreTokens(); ++k) {
                                fn = tk.NextToken();
                                if (fn.Equals("null"))
                                    ar.Add(PdfNull.PDFNULL);
                                else
                                    ar.Add(new PdfNumber(fn));
                            }
                        }
                        outline.Put(PdfName.DEST, ar);
                    }
                }
                else if ("GoToR".Equals(action)) {
                    String p;
                    PdfDictionary dic = new PdfDictionary();
                    if ((p = GetVal(map, "Named")) != null)
                        dic.Put(PdfName.D, new PdfString(p, null));
                    else if ((p = GetVal(map, "NamedN")) != null)
                        dic.Put(PdfName.D, new PdfName(p));
                    else if ((p = GetVal(map, "Page")) != null){
                        PdfArray ar = new PdfArray();
                        StringTokenizer tk = new StringTokenizer(p);
                        ar.Add(new PdfNumber(tk.NextToken()));
                        if (!tk.HasMoreTokens()) {
                            ar.Add(PdfName.XYZ);
                            ar.Add(new float[]{0, 10000, 0});
                        }
                        else {
                            String fn = tk.NextToken();
                            if (fn.StartsWith("/"))
                                fn = fn.Substring(1);
                            ar.Add(new PdfName(fn));
                            for (int k = 0; k < 4 && tk.HasMoreTokens(); ++k) {
                                fn = tk.NextToken();
                                if (fn.Equals("null"))
                                    ar.Add(PdfNull.PDFNULL);
                                else
                                    ar.Add(new PdfNumber(fn));
                            }
                        }
                        dic.Put(PdfName.D, ar);
                    }
                    String file = GetVal(map, "File");
                    if (dic.Size > 0 && file != null) {
                        dic.Put(PdfName.S,  PdfName.GOTOR);
                        dic.Put(PdfName.F, new PdfString(file));
                        String nw = GetVal(map, "NewWindow");
                        if (nw != null) {
                            if (nw.Equals("true"))
                                dic.Put(PdfName.NEWWINDOW, PdfBoolean.PDFTRUE);
                            else if (nw.Equals("false"))
                                dic.Put(PdfName.NEWWINDOW, PdfBoolean.PDFFALSE);
                        }
                        outline.Put(PdfName.A, dic);
                    }
                }
                else if ("URI".Equals(action)) {
                    String uri = GetVal(map, "URI");
                    if (uri != null) {
                        PdfDictionary dic = new PdfDictionary();
                        dic.Put(PdfName.S, PdfName.URI);
                        dic.Put(PdfName.URI, new PdfString(uri));
                        outline.Put(PdfName.A, dic);
                    }
                }
                else if ("JS".Equals(action)) {
                    String code = GetVal(map, "Code");
                    if(code != null) {
                        outline.Put(PdfName.A, PdfAction.JavaScript(code, writer));
                    }
                }
                else if ("Launch".Equals(action)) {
                    String file = GetVal(map, "File");
                    if (file != null) {
                        PdfDictionary dic = new PdfDictionary();
                        dic.Put(PdfName.S, PdfName.LAUNCH);
                        dic.Put(PdfName.F, new PdfString(file));
                        outline.Put(PdfName.A, dic);
                    }
                }
            }
            catch  {
                // empty on purpose
            }
        }