public void Apply()
        {
            // Get read object options
            // Get resolution
            ResolutionItem resolutionItem = (ResolutionItem)_resolutionComboBox.SelectedItem;

            _resolution = resolutionItem.Value;

            _parseDocumentStructOptions = PDFParseDocumentStructureOptions.None;

            if (_readBookmarksCheckBox.Checked)
            {
                _parseDocumentStructOptions |= PDFParseDocumentStructureOptions.Bookmarks;
            }
            if (_readFontsCheckBox.Checked)
            {
                _parseDocumentStructOptions |= PDFParseDocumentStructureOptions.Fonts;
            }
            if (_readInternalLinksCheckBox.Checked)
            {
                _parseDocumentStructOptions |= PDFParseDocumentStructureOptions.InternalLinks;
            }

            _parsePagesOptions = PDFParsePagesOptions.None;
            if (_parseObjectsCheckBox.Checked)
            {
                _parsePagesOptions = PDFParsePagesOptions.AllIgnoreWhiteSpaces;
            }
            if (!_parseDigitalSignaturesCheckBox.Checked)
            {
                _parsePagesOptions &= ~PDFParsePagesOptions.Signatures;
            }

            _parseChunks = _parseChunksCheckBox.Checked;

            _lastResolution = _resolution;
            _lastParseDocumentStructOptions = _parseDocumentStructOptions;
            _lastParsePagesOptions          = _parsePagesOptions;
            _lastParseChunks = _parseChunks;
        }
        private void ParseObjects(PDFDocument document, PDFParsePagesOptions parsePagesOptions, bool parseChunks)
        {
            if (parsePagesOptions == PDFParsePagesOptions.None)
            {
                return;
            }

            _readObjectsLabel.Visible = true;

            int pageCount = document.Pages.Count;

            int chunkSize;

            if (parseChunks)
            {
                _readObjectsValueLabel.Visible  = false;
                _readObjectsProgressBar.Visible = true;
                _stopButton.Visible             = true;
                _readObjectsProgressBar.Minimum = 1;
                _readObjectsProgressBar.Maximum = pageCount;
                chunkSize = 50;
            }
            else
            {
                _readObjectsValueLabel.Visible  = true;
                _readObjectsProgressBar.Visible = false;
                chunkSize = pageCount;
                Application.DoEvents();
            }

            int pagesLeft = pageCount;

            int firstPageNumber = 1;

            while (pagesLeft > 0 && !_stopReading)
            {
                int toRead = Math.Min(pagesLeft, chunkSize);
                if (toRead > 0)
                {
                    if (parseChunks)
                    {
                        Application.DoEvents();
                    }

                    int lastPageNumber = firstPageNumber + toRead - 1;

                    try
                    {
                        if (parseChunks)
                        {
                            document.ParsePages(parsePagesOptions, firstPageNumber, lastPageNumber);
                        }
                        else
                        {
                            using (WaitCursor wait = new WaitCursor())
                            {
                                document.ParsePages(parsePagesOptions, firstPageNumber, lastPageNumber);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        AddError(string.Format("{0} {1} {2} {3}", DemosGlobalization.GetResxString(GetType(), "resx_ReadingPages"), firstPageNumber, DemosGlobalization.GetResxString(GetType(), "resx_To"), lastPageNumber), ex);
                    }

                    pagesLeft       -= toRead;
                    firstPageNumber += toRead;

                    if (_readObjectsProgressBar.Visible)
                    {
                        _readObjectsProgressBar.Value = firstPageNumber - 1;
                        Application.DoEvents();
                    }
                }
            }

            if (!parseChunks)
            {
                _readObjectsValueLabel.Text = DemosGlobalization.GetResxString(GetType(), "resx_Finished");
                Application.DoEvents();
            }
        }
        public bool Run(PDFDocument document, PDFParseDocumentStructureOptions parseDocumentStructureOptions, PDFParsePagesOptions parsePagesOptions, bool parseChunks)
        {
            // - Read the document structure
            ReadDocumentStructure(document, parseDocumentStructureOptions);

            // - Parse the document objects
            ParseObjects(document, parsePagesOptions, parseChunks);

            if (_errorsListBox.Items.Count > 0)
            {
                _errorsLabel.Visible           = true;
                _copyToClipboardButton.Visible = true;
                return(false);
            }

            return(true);
        }