using ComPDFKit.PDFDocument; using compdfkit_tools.PDFControlUI; using compdfkit_tools.PDFView.PDFOutline.PDFOutlineData; using ComPDFKitViewer.PdfViewer; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace compdfkit_tools.PDFControl { /// /// CPDFOutlineControl.xaml 的交互逻辑 /// public partial class CPDFOutlineControl : UserControl { CPDFViewer pdfViewer; private CPDFOutline CurrentCPDFOutline { set; get; } public ObservableCollection OutlineList { set; get; } public CPDFOutlineControl() { InitializeComponent(); } private int GetIndexFromParent(List parentlist, CPDFOutline outline) { for (int i = 0; i < parentlist.Count; i++) { if (parentlist[i] == outline) { return i; } } return -1; } public CPDFOutlineNode FindOutlineFromDto(ObservableCollection list, CPDFOutline outline) { foreach (CPDFOutlineNode item in list) { CPDFOutline parent = outline.GetParent(); CPDFOutline PARENT = item.PDFOutline.GetParent(); item.CurrentNodeName = outline.Title; int i = GetIndexFromParent(parent.ChildList, outline); int I = GetIndexFromParent(PARENT.ChildList, item.PDFOutline); if (item.PDFOutline.Title == outline.Title && i == I && outline.Level == item.PDFOutline.Level && ((parent.Title == PARENT.Title) || (parent.Title == null && PARENT.Title == null))) { return item; } else if (item.ChildrenNodeList.Count > 0) { CPDFOutlineNode retdto = FindOutlineFromDto(item.ChildrenNodeList, outline); if (retdto != null) { return retdto; } } } return null; } private CPDFOutlineNode ConvertCPDFToOutlineNode(CPDFOutline outline, CPDFOutlineNode parent) { CPDFOutlineNode node = new CPDFOutlineNode(); if (outline != null) { node.PDFOutline = outline; if (parent != null) { node.ParentNode = parent; } if (OutlineList != null && OutlineList.Count > 0) { CPDFOutlineNode oldnode = FindOutlineFromDto(OutlineList, node.PDFOutline); } node.ChildrenNodeList = new ObservableCollection(); if (outline.ChildList.Count > 0) { foreach (CPDFOutline item in outline.ChildList) { node.ChildrenNodeList.Add(ConvertCPDFToOutlineNode(item, node)); } } } return node; } public ObservableCollection GetOutlineViewDataSource() { ObservableCollection data = new ObservableCollection(); List datasource = pdfViewer.Document.GetOutlineList(); foreach (CPDFOutline item in datasource) { CPDFOutlineNode dto = ConvertCPDFToOutlineNode(item, null); if (dto != null) { data.Add(dto); } } return data; } public void InitWithPDFViewer(CPDFViewer pdfViewer) { this.pdfViewer = pdfViewer; List outlineList = pdfViewer.Document.GetOutlineList(); CPDFOutlineUI.SetOutlineTree(outlineList); } } }