示例#1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="worker"></param>
        /// <param name="e"></param>
        public BookFileConverter(BackgroundWorker worker, DoWorkEventArgs e)
        {
            Worker = worker;
            Event  = e;

            Settings = (ContractParameters)e.Argument;
        }
示例#2
0
        public void Write(string outputFileName, string inputFolder, string outputFolder, List <byte[]> imageBytes, List <string> imageNames, ContractParameters settings, ProgressDelegate progress)
        {
            if (LogHelper.CanDebug())
            {
                LogHelper.Begin("ImageFileWriter.Write");
            }
            try
            {
                for (int i = 0; i < imageBytes.Count; ++i)
                {
                    using (MemoryStream ms = new MemoryStream(imageBytes[i]))
                    {
                        BitmapImage myImage = new BitmapImage();
                        myImage.BeginInit();
                        myImage.StreamSource = ms;
                        myImage.EndInit();

                        using (FileStream fs = new FileStream(Path.Combine(outputFolder, outputFileName + "_" + imageNames[i]), FileMode.Create))
                        {
                            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
                            encoder.Frames.Add(BitmapFrame.Create(myImage));
                            encoder.Save(fs);
                        }
                    }
                }
                string msg = CultureManager.Instance.GetLocalization("ByCode", "Convert.ImageSaved", "{0} images saved...");
                progress(string.Format(msg, imageBytes.Count));
            }
            catch (Exception err)
            {
                LogHelper.Manage("ImageFileWriter:Write", err);
                settings.Result = false;
            }
            finally
            {
                LogHelper.End("ImageFileWriter.Write");
            }
        }
示例#3
0
        internal string CompressFolder(string outputFileName, string inputFolder, string outputFolder, ContractParameters settings, ProgressDelegate progress)
        {
            if (LogHelper.CanDebug())
            {
                LogHelper.Begin("ZIPWriter.CompressFolder");
            }
            try
            {
                // move up from one directory if same as source in case of files
                if (string.IsNullOrEmpty(settings.DestinationPath) && settings.InputType.Type == DocumentType.ImageFile)
                {
                    outputFolder = Directory.GetParent(outputFolder).FullName;
                }

                string file_out = Path.Combine(outputFolder, outputFileName + ".cbz");

                if (File.Exists(file_out))
                {
                    File.Delete(file_out);
                }

                int iResult = 0;
                if (!ZipHelper.Instance.CompressFolder(file_out, inputFolder, out iResult))
                {
                    settings.Result = false;
                }
                else
                {
                    string msg = CultureManager.Instance.GetLocalization("ByCode", "Convert.ImageZipped", "{0} images zipped...");
                    progress(string.Format(msg, iResult));
                }
                return(file_out);
            }
            catch (Exception err)
            {
                LogHelper.Manage("ZIPWriter.CompressFolder", err);
                settings.Result = false;
                return(string.Empty);
            }
            finally
            {
                LogHelper.End("ZIPWriter.CompressFolder");
            }
        }
示例#4
0
        public void Write(string outputFileName, string inputFolder, string outputFolder, List <byte[]> imageBytes, List <string> imageNames, ContractParameters settings, ProgressDelegate progress)
        {
            if (LogHelper.CanDebug())
            {
                LogHelper.Begin("ZIPWriter.Write");
            }
            try
            {
                string file_out;

                // in this case, just zip the folder in shortFileName
                if (!string.IsNullOrEmpty(inputFolder))
                {
                    file_out = CompressFolder(outputFileName, inputFolder, outputFolder, settings, progress);

                    // temp folders
                    if (inputFolder.Contains(DirectoryHelper.TempPath))
                    {
                        Directory.Delete(inputFolder);
                    }
                }
                else // write the men to temp folder
                {
                    string tempFolder = Path.Combine(DirectoryHelper.TempPath, outputFileName);
                    DirectoryHelper.Check(tempFolder);

                    //first write in temp folder
                    new ImageFileWriter().Write(outputFileName, inputFolder, tempFolder, imageBytes, imageNames, settings, progress);

                    file_out = CompressFolder(outputFileName, tempFolder, outputFolder, settings, progress);

                    Directory.Delete(tempFolder, true);
                }

                if (settings.ResfreshLibrary)
                {
                    settings.ResultFiles.Add(file_out);
                }
            }
            catch (Exception err)
            {
                LogHelper.Manage("ZIPWriter.Write", err);
                settings.Result = false;
            }
            finally
            {
                LogHelper.End("ZIPWriter.Write");
            }
        }
示例#5
0
        public bool Read(string filePath, string outputFolder, List <byte[]> imageBytes, List <string> imageNames, ContractParameters settings, ProgressDelegate progress)
        {
            if (LogHelper.CanDebug())
            {
                LogHelper.Begin("XPSImageReader.Read");
            }
            try
            {
                XpsDocument xpsDocument = null;

                // read the document
                xpsDocument = new XpsDocument(filePath, FileAccess.Read, CompressionOption.NotCompressed);

                //
                IXpsFixedDocumentSequenceReader fixedDocSeqReader = xpsDocument.FixedDocumentSequenceReader;

                ICollection <IXpsFixedDocumentReader> fixedDocuments = fixedDocSeqReader.FixedDocuments;

                IEnumerator <IXpsFixedDocumentReader> enumerator = fixedDocuments.GetEnumerator();
                enumerator.MoveNext();
                ICollection <IXpsFixedPageReader> fixedPages = enumerator.Current.FixedPages;

                string imageFileName = Path.GetFileNameWithoutExtension(filePath);
                int    i             = 0;
                foreach (IXpsFixedPageReader fixedPageReader in fixedPages)
                {
                    try
                    {
                        ICollection <XpsImage> list = fixedPageReader.Images;

                        if (list.Count == 1)
                        {
                            XpsImage img = list.First();
                            if (img != null)
                            {
                                using (Stream xpsThumbStream = img.GetStream())
                                {
                                    byte[] buf = new byte[xpsThumbStream.Length];
                                    xpsThumbStream.Read(buf, 0, buf.Length);

                                    imageBytes.Add(buf);
                                    imageNames.Add(imageFileName + "_" + i + ".jpg");
                                }
                            }
                        }
                        i++;
                    }
                    catch (System.InvalidOperationException)
                    {
                    }
                }

                xpsDocument.Close();

                string msg = CultureManager.Instance.GetLocalization("ByCode", "Convert.ImageExtracted", "{0} images extracted...");
                progress(string.Format(msg, imageBytes.Count));
            }
            catch (Exception err)
            {
                LogHelper.Manage("XPSImageReader.Read", err);
                settings.Result = false;
                return(false);
            }
            finally
            {
                LogHelper.End("XPSImageReader.Read");
            }

            return(true);
        }
示例#6
0
        public bool Read(string inputFileorFolder, string tempFolder, List <byte[]> imageBytes, List <string> imageNames, ContractParameters settings, ProgressDelegate progress)
        {
            SevenZipExtractor temp = null;

            if (LogHelper.CanDebug())
            {
                LogHelper.Begin("RARImageReader.Read");
            }
            try
            {
                temp = ZipHelper.Instance.GetExtractor(inputFileorFolder);

                //direct extract
                if (!string.IsNullOrEmpty(tempFolder))
                {
                    DirectoryHelper.Check(tempFolder);

                    temp.PreserveDirectoryStructure = false;
                    temp.ExtractArchive(tempFolder);

                    if (progress != null)
                    {
                        string msg = CultureManager.Instance.GetLocalization("ByCode", "Convert.ImageExtracted", "{0} images extracted...");
                        progress(string.Format(msg, temp.ArchiveFileData.Count));
                    }
                    CheckFileNames(tempFolder);
                }
                else //to memory
                {
                    foreach (ArchiveFileInfo fil in temp.ArchiveFileData)
                    {
                        if (!fil.IsDirectory && DocumentFactory.Instance.ImageExtension.Contains(Path.GetExtension(fil.FileName).ToUpper()))
                        {
                            using (MemoryStream stream = new MemoryStream())
                            {
                                temp.ExtractFile(fil.FileName, stream);

                                imageBytes.Add(stream.GetBuffer());
                                imageNames.Add(Path.GetFileName(fil.FileName));
                            }
                        }
                    }
                }
            }
            catch (Exception err)
            {
                LogHelper.Manage("RARImageReader.Read", err);

                if (settings != null)
                {
                    settings.Result = false;
                }

                return(false);
            }
            finally
            {
                ZipHelper.Instance.ReleaseExtractor(temp);
                LogHelper.End("RARImageReader.Read");
            }
            return(true);
        }
示例#7
0
        public bool Read(string inputFileorFolder, string outputFolder, List <byte[]> imageBytes, List <string> imageNames, ContractParameters settings, ProgressDelegate progress)
        {
            PdfReader        reader   = null;
            PDFImageListener listener = null;

            try
            {
                reader = new PdfReader(inputFileorFolder);
                PdfReaderContentParser parser = new PdfReaderContentParser(reader);

                listener = new PDFImageListener();

                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    listener.PageIndex = i;
                    parser.ProcessContent(i, listener);
                }

                if (settings.CheckResult && reader.NumberOfPages != listener.ImageNames.Count)
                {
                    if (settings.JoinImages)
                    {
                        string msg = CultureManager.Instance.GetLocalization("ByCode", "Convert.ImageCountingKO", "Extracting {0} : {1} images for {2} pages - Try to merge !");
                        progress(string.Format(msg, inputFileorFolder, listener.ImageNames.Count, reader.NumberOfPages));

                        ImageJoiner cp = new ImageJoiner();
                        cp.Merge(listener.ImageBytes, listener.ImageNames);

                        msg = CultureManager.Instance.GetLocalization("ByCode", "Convert.ImageMerge", "Merge to {0} new images...");
                        progress(string.Format(msg, cp.NewImageNames.Count));

                        imageBytes.AddRange(cp.NewImageBytes);
                        imageNames.AddRange(cp.NewImageNames);
                    }
                    else
                    {
                        string msg = CultureManager.Instance.GetLocalization("ByCode", "Convert.ImageError", "Error extracting {0} : {1} images for {2} pages !!");
                        progress(string.Format(msg, inputFileorFolder, listener.ImageNames.Count, reader.NumberOfPages));
                        throw new Exception("PDF check error");
                    }
                }
                else
                {
                    string msg = CultureManager.Instance.GetLocalization("ByCode", "Convert.ImageCountingOK", "Extracting {0} images in {1} pages");
                    progress(string.Format(msg, listener.ImageNames.Count, reader.NumberOfPages));

                    imageBytes.AddRange(listener.ImageBytes);
                    imageNames.AddRange(listener.ImageNames);

                    msg = CultureManager.Instance.GetLocalization("ByCode", "Convert.ImageExtracted", "{0} images extracted...");
                    progress(string.Format(msg, listener.ImageBytes.Count));
                }
            }
            catch (Exception err)
            {
                LogHelper.Manage("PDFImageReader:Read", err);
                settings.Result = false;
                listener.ImageNames.Clear();
                listener.ImageBytes.Clear();
                return(false);
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
            }
            return(true);
        }
示例#8
0
        public void Write(string inputFileorFolder, string inputFolder, string outputFolder, List <byte[]> imageBytes, List <string> imageNames, ContractParameters settings, ProgressDelegate progress)
        {
            if (LogHelper.CanDebug())
            {
                LogHelper.Begin("XPSImageWriter.Write");
            }
            try
            {
                string file_out = Path.Combine(outputFolder, inputFileorFolder) + ".xps";

                if (File.Exists(file_out))
                {
                    File.Delete(file_out);
                }

                if (new XpsHelper().WriteDocument(imageBytes, file_out))
                {
                    string msg = CultureManager.Instance.GetLocalization("ByCode", "Convert.Output", "Output file written !");
                    progress(msg);
                }
                if (settings.ResfreshLibrary)
                {
                    settings.ResultFiles.Add(file_out);
                }
            }
            catch (Exception err)
            {
                LogHelper.Manage("XPSImageWriter.Write", err);
                settings.Result = false;
            }
            finally
            {
                LogHelper.End("XPSImageWriter.Write");
            }
        }
示例#9
0
        public bool Read(string inputFileorFolder, string outputFolder, List <byte[]> imageBytes, List <string> imageNames, ContractParameters settings, ProgressDelegate progress)
        {
            if (LogHelper.CanDebug())
            {
                LogHelper.Begin("ImageFileReader.Read");
            }
            try
            {
                string[] files = Directory.GetFiles(inputFileorFolder, "*.*", SearchOption.TopDirectoryOnly);

                foreach (string filename in files)
                {
                    if (DocumentFactory.Instance.ImageExtension.Contains(Path.GetExtension(filename).ToUpper()))
                    {
                        BitmapImage myImage = new BitmapImage();
                        myImage.BeginInit();
                        myImage.UriSource   = new Uri(filename, UriKind.RelativeOrAbsolute);
                        myImage.CacheOption = BitmapCacheOption.OnLoad;
                        myImage.EndInit();

                        imageBytes.Add(StreamToImage.BufferFromImage(myImage));
                        imageNames.Add(Path.GetFileName(filename));
                    }
                }
                string msg = CultureManager.Instance.GetLocalization("ByCode", "Convert.ImageFound", "{0} images founded...");
                progress(string.Format(msg, imageBytes.Count));
            }
            catch (Exception err)
            {
                LogHelper.Manage("ImageFileReader:Read", err);
                settings.Result = false;
                return(false);
            }
            finally
            {
                LogHelper.End("ImageFileReader.Read");
            }
            return(true);
        }