Close() public method

Close the GhostscriptRasterizer.
public Close ( ) : void
return void
示例#1
0
        //Methods
        //88888888888888888888888888888888888888888888888888888888888888888888888
        /// <summary>
        /// Divide the source pdf by QR code seperatorrs into chunks that
        /// can be ripped and saved from the source.
        /// </summary>
        public void FindPdfChunks()
        {
            GhostscriptVersionInfo Gvi;                 //Ghostscript info object
            GhostscriptRasterizer Rasterizer = null;    //Rasterizer
            Bitmap pageImg; //Image of one PDF page.
            string docType; //Value of document-type property in QR code json.
            int qrCodeGap = 0;

            //Only process PDFs
            if (SrcIsPdf())
            {
                try
                {
                    //TEST_OUTPUT
                    //Console.WriteLine("BASE DIRECTORY{0}{1}", AppDomain.CurrentDomain.BaseDirectory + "gsdll64.dll", Environment.NewLine);

                    //Init GhostScript and Rasterize
                    Gvi = new GhostscriptVersionInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "gsdll64.dll"));
                    Rasterizer = new GhostscriptRasterizer();
                    Rasterizer.Open(SrcPdf.FullName, Gvi, false); //Raserize the source PDF.

                    totalPages = Rasterizer.PageCount; //Total pages

                    //Loop from page 1 to page n-1 (No need to read the last page).
                    //Note: 1 page PDF will automatically be skipped.
                    for (int i = 1; i < Rasterizer.PageCount; i++)
                    {
                        pageImg = (Bitmap)Rasterizer.GetPage(72, 72, i);
                        docType = getDocTypeStr(QrReader.ReadQr(pageImg));

                        //Assert that page has a doc type
                        if (!isBlankOrNullStr(docType))
                        {
                            qrCount++; //Increment found qr code count.

                            //Throw exception if more than one QR code is found
                            //and QR Gap is less than 1 (Double Feed)
                            if (qrCount > 1 && qrCodeGap < 1)
                            {
                                throw new ApplicationException("File: " + SrcPdf.Name + " has two consecutive QR code pages. "
                                                                + "QR code double feed will result with an empty document.");
                            }
                            else
                            {
                                qrCodeGap = 0;  //Reset Gap//
                            }

                            //Console.WriteLine("DOC TYPE: {0}{1}", docType, Environment.NewLine); //TEST OUTPUT

                            //Create chunk with src page # for first page (The one after QR page) and name (srcFileName_docType_qr#).
                            initChunk(i + 1, Path.GetFileNameWithoutExtension(SrcPdf.Name) + "_" + docType + "_" + qrCount);

                            updatePreviousChunk(i - 1); //Update the previous chunks last page.
                        }
                        else if(i == 1 && isBlankOrNullStr(docType))
                        {
                            //Exit loop if the first page is not a QR code seperator page
                            Console.WriteLine("SKIPPED: {0}{1}", SrcPdf.Name, Environment.NewLine); //TEST OUTPUT
                            break;
                        }
                        else
                        {
                            //Else count as a content page
                            contentCount++;

                            //Increment QR gap//
                            qrCodeGap++;
                        }
                    }
                    //END LOOP

                    contentCount++; //Loop ends before the last page which is assumed to be content.

                    //Assert that we have some chuncks
                    if (Chunks.Count > 0)
                    {
                        //Set last page of the last chunk to the last page of the source document.
                        Chunks[Chunks.Count - 1].lastPage = Rasterizer.PageCount;
                    }
                }
                catch (Exception ex)
                {
                    throw new ApplicationException("Unable to complete chunk search. " + ex.Message);
                }
                finally
                {
                    //Dispose raterizer resource.
                    if (Rasterizer != null)
                    {
                        Rasterizer.Close();
                        Rasterizer.Dispose();
                    }
                }
            }
            //End outer if
        }