예제 #1
0
        public static bool Redo(KPage page)
        {
            if (!history.ContainsKey(page))
            {
                return(false);
            }
            if (history[page].Current >= history[page].Versions.Count - 1)
            {
                return(false);
            }

            page.LoadFromString(E.GetString(history[page].Versions[++history[page].Current].Data), Program.MainLog);
            SetButtonVisibility(page);
            return(true);
        }
예제 #2
0
        public bool LoadDocument(string path, MessageLog log)
        {
            log?.Add(MessageType.MSG, "Loading File '{0}'", path);
            DirectoryInfo dir = TmpManager.GetTmpDir();

            if (path != null)
            {
                ZipFile zip = new ZipFile(path);
                if (dir.Exists)
                {
                    dir.RemoveAll();
                }
                try
                {
                    zip.ExtractAll(dir.FullName);
                }
                catch (BadPasswordException)
                {
                    Dialogues.PasswordDialog dialog = new Dialogues.PasswordDialog();
                    var res = dialog.ShowDialog(out string pw, delegate(string _password)
                    {
                        try
                        {
                            zip.Password = _password;
                            zip.ExtractAll(dir.FullName);
                            return(true);
                        }
                        catch (BadPasswordException)
                        {
                            return(false);
                        }
                    });
                    if (res == DialogResult.Cancel)
                    {
                        return(false);
                    }
                }
            }
            FileInfo    docFile = new FileInfo(dir + "\\document.kritzel");
            XmlReader   reader  = XmlReader.Create(docFile.FullName);
            XmlDocument doc     = new XmlDocument();

            doc.Load(reader);
            reader.Close();
            XmlNode root      = doc.LastChild;
            XmlNode pagesNode = root.GetNode("Pages");
            //Bitmap[] bgrs = new Bitmap[0];
            PdfDocument pdfDoc  = null;
            bool        loadPdf = false;

            if (File.Exists(dir + "\\.pdf"))
            {
                //bgrs = MupdfSharp.PageRenderer.Render(dir + "\\.pdf", Dialogues.PDFImporter.PAGETHEIGHTPIXEL);
                pdfDoc  = PdfSharp.Pdf.IO.PdfReader.Open(dir + "\\.pdf", PdfDocumentOpenMode.Modify | PdfDocumentOpenMode.Import);
                loadPdf = true;
            }
            int ind = 1;

            foreach (XmlNode xmlPage in pagesNode.GetNodes("Page"))
            {
                string src  = xmlPage.Attributes.GetNamedItem("src").InnerText;
                string text = File.ReadAllText(dir.FullName + "\\" + src);
                KPage  page = new KPage(this);
                log?.Add(MessageType.MSG, "Loading Page {0}", ind++);
                page.LoadFromString(text, log);
                int pdfInd;
                int.TryParse(xmlPage.Attributes["pdf"].Value, out pdfInd);
                if (pdfInd >= 0 && loadPdf)
                {
                    //page.BackgroundImage = new Renderer.Image(bgrs[pdfInd]);
                    page.OriginalPage  = pdfDoc.Pages[pdfInd];
                    page.PdfRenderPath = TmpManager.NewFilename(TmpManager.GetTmpDir() + "\\render", "page", ".png");
                }
                Pages.Add(page);
            }

            var defForm = doc.GetElementsByTagName("DefaultFormat");

            if (defForm.Count > 0)
            {
                DefaultFormat = defForm[0].InnerText;
            }

            if (loadPdf)
            {
                pdfDoc.Close();
                pdfDoc.Dispose();
            }

            this.FilePath = path;
            SetCurrentStateAsSaved();
            return(true);
        }