Beispiel #1
0
        public void A_valid_file_is_happily_converted()
        {
            var metadataFile = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestDataCopy\jp2_OK\header\metadata.xml");
            var rootFolder   = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestDataCopy\jp2_OK");
            var paket        = (PaketDIP)Paket.LoadFromFile(metadataFile);
            var settings     = new ScansZusammenfassenSettings {
                GroesseInProzent = 100, DefaultAufloesungInDpi = 300, JpegQualitaetInProzent = 80
            };
            var processor = new ScanProcessor(new FileResolution(settings), settings);

            // Act
            processor.ConvertSingleJpeg2000ScansToPdfDocuments(paket, rootFolder);

            // Assert
            // Every Dokument and Umschlag got converted
            var contentFolder = paket.Inhaltsverzeichnis.Ordner[0];

            contentFolder.Ordner.FirstOrDefault(o => o.Name == "D_o_k_u_m_e_n_t_0000001")?.Datei.Count.Should().Be(1); // Just the pdf
            contentFolder.Ordner.FirstOrDefault(o => o.Name == "D_o_k_u_m_e_n_t_0000002")?.Datei.Count.Should().Be(1); // Just the pdf
            contentFolder.Ordner.FirstOrDefault(o => o.Name == "U_m_s_c_h_l_a_g_0000001")?.Datei.Count.Should().Be(1); // Just the pdf

            // Premis Dateien gelöscht?
            var dokument1         = new DirectoryInfo(Path.Combine(rootFolder, "content", "D_o_k_u_m_e_n_t_0000001"));
            var dokument2         = new DirectoryInfo(Path.Combine(rootFolder, "content", "D_o_k_u_m_e_n_t_0000002"));
            var umschlagDirectory = new DirectoryInfo(Path.Combine(rootFolder, "content", "U_m_s_c_h_l_a_g_0000001"));

            umschlagDirectory.GetFiles("*.xml").Length.Should().Be(0);
            dokument1.GetFiles("*.xml").Length.Should().Be(0);
            dokument2.GetFiles("*.xml").Length.Should().Be(0);
        }
Beispiel #2
0
        public void A_messed_up_metadata_file_results_in_unchanged_document_1_and_2()
        {
            // This metadata file has data that has wrongly named jp2/premis pairs, so it does not line up
            var metadataFile = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestDataCopy\jp2_NOK\header\metadata.xml");
            var rootFolder   = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestDataCopy\jp2_NOK");
            var paket        = (PaketDIP)Paket.LoadFromFile(metadataFile);
            var settings     = new ScansZusammenfassenSettings {
                GroesseInProzent = 100, DefaultAufloesungInDpi = 300, JpegQualitaetInProzent = 80
            };
            var processor = new ScanProcessor(new FileResolution(settings), settings);

            // Act
            processor.ConvertSingleJpeg2000ScansToPdfDocuments(paket, rootFolder);

            // Assert
            // Document 1 and 2 are the same
            // Umschlag 1 got converted to pdf
            var contentFolder = paket.Inhaltsverzeichnis.Ordner[0];

            contentFolder.Ordner.FirstOrDefault(o => o.Name == "D_o_k_u_m_e_n_t_0000001")?.Datei.Count.Should().Be(8); // The original jp2 and premis
            contentFolder.Ordner.FirstOrDefault(o => o.Name == "D_o_k_u_m_e_n_t_0000002")?.Datei.Count.Should().Be(8); // The original jp2 and premis
            contentFolder.Ordner.FirstOrDefault(o => o.Name == "U_m_s_c_h_l_a_g_0000001")?.Datei.Count.Should().Be(1); // Just the pdf

            // Premis Dateien gelöscht?
            var umschlagDirectory = new DirectoryInfo(Path.Combine(rootFolder, "content", "U_m_s_c_h_l_a_g_0000001"));

            umschlagDirectory.GetFiles("*.xml").Length.Should().Be(0);
        }
Beispiel #3
0
        public ScanProcessor(FileResolution fileResolution, ScansZusammenfassenSettings settings)
        {
            // ReSharper disable once RedundantNameQualifier
            var licensePdf = new License();

            licensePdf.SetLicense("Aspose.Total.lic");

            var licenseImaging = new Aspose.Imaging.License();

            licenseImaging.SetLicense("Aspose.Total.lic");
            this.fileResolution = fileResolution;
            this.settings       = settings;
        }
        private static void Main(string[] args)
        {
            ConfigureLogging();

            Log.Information("CMI.Manager.Asset.TransformJp2ToPdfTester starting");

            if (args.Length == 0 || !Directory.Exists(args[0]))
            {
                Console.WriteLine(
                    "You need to provide a directory with a sample DIP package to process as an argument. As a second argument the JPEG quality can be provided. A third parameter sets the new size in percent of the original image");
                Console.ReadLine();
                return;
            }

            // Read source folder
            var sourceFolder = args[0];
            var jpegQuality  = 80; // Default

            if (args.Length == 2 && int.TryParse(args[1], out var quality))
            {
                jpegQuality = quality;
            }

            var sizeInPercent = 100; // Default

            if (args.Length == 3 && int.TryParse(args[2], out var size))
            {
                sizeInPercent = size;
            }

            try
            {
                var transformEngine = new TransformEngine(new Xsl2Processor());
                ConvertAreldaMetadataXml(sourceFolder, transformEngine);

                var metadataFile = Path.Combine(sourceFolder, "header", "metadata.xml");
                var paket        = (PaketDIP)Paket.LoadFromFile(metadataFile);
                var settings     = new ScansZusammenfassenSettings {
                    DefaultAufloesungInDpi = 300, GroesseInProzent = sizeInPercent, JpegQualitaetInProzent = jpegQuality
                };
                var scanProcessor = new ScanProcessor(new FileResolution(settings), settings);
                // Create pdf documents from scanned jpeg 2000 scans.
                scanProcessor.ConvertSingleJpeg2000ScansToPdfDocuments(paket, sourceFolder);
            }
            catch (Exception ex)
            {
                Log.Error(ex, $"Unexpected error. {ex.Message}");
            }
        }
Beispiel #5
0
        public void File_not_found_in_content_structure_results_in_exception()
        {
            // Arrange
            var metadataFile = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestDataCopy\jp2_OK\header\metadata.xml");
            var rootFolder   = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestDataCopy\jp2_OK");
            var paket        = (PaketDIP)Paket.LoadFromFile(metadataFile);

            // Make the file invalid to trigger the exception by removing one file reference in the first folder.
            paket.Inhaltsverzeichnis.Ordner[0].Ordner[0].Datei.RemoveAt(0);
            var settings  = new ScansZusammenfassenSettings();
            var processor = new ScanProcessor(new FileResolution(settings), settings);

            // Act(ion)
            Action action = () => processor.ConvertSingleJpeg2000ScansToPdfDocuments(paket, rootFolder);

            // Asert
            action.Should().Throw <InvalidOperationException>();
        }
        /// <summary>
        ///     <para>
        ///         Converts single page jpeg2000 Scans found within the package into (multi-paged) pdf document.
        ///         Per document or dossier (with direct dateiRef's) one pdf is created. The metadata information in the package is
        ///         updated to reflect the changes made.
        ///     </para>
        ///     <para>The following assumptions are made:</para>
        ///     <list type="bullet">
        ///         <item>JPEG 2000 Files have the extension .jp2</item>
        ///         <item>The .jp2 may be accompanied by a premis xml file. The premis filename is "[jpeg200Filename]_premis.xml</item>
        ///         <item>
        ///             Within one document or (dossier with dateiRef) only .jp2 files are allowed.
        ///             If other file types are mixed in, (except for the premis files) the conversion silently fails for that
        ///             document.
        ///         </item>
        ///         <item>The premis files are removed after the pdf creation took place.</item>
        ///     </list>
        /// </summary>
        /// <param name="paket">The package to be converted</param>
        /// <param name="folder">The root folder where the files can be found.</param>
        /// <param name="settings">The conversion settings</param>
        public void ConvertSingleJpeg2000ScansToPdfDocuments(PaketDIP paket, string folder, ScansZusammenfassenSettings settings)
        {
            conversionSettings = settings;
            rootFolder         = folder;
            paketToConvert     = paket;

            // Default settings for Image conversion
            encoderParameters = new EncoderParameters(1);
            var encoderParameter = new EncoderParameter(Encoder.Quality, conversionSettings.JpegQualitaetInProzent);

            encoderParameters.Param[0] = encoderParameter;
            BitmapImageCreator.Register();

            foreach (var ordnungssystemposition in paket.Ablieferung.Ordnungssystem.Ordnungssystemposition)
            {
                ProcessOrdnungssystemPosition(ordnungssystemposition);
            }
        }
Beispiel #7
0
        public void Files_linked_to_document_that_are_not_jp2_files_and_not_premis_result_in_unchanged_package()
        {
            var metadataFile = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestDataCopy\jp2_OK\header\metadata.xml");
            var rootFolder   = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestDataCopy\jp2_OK");
            var paket        = (PaketDIP)Paket.LoadFromFile(metadataFile);
            var settings     = new ScansZusammenfassenSettings {
                GroesseInProzent = 100, DefaultAufloesungInDpi = 300, JpegQualitaetInProzent = 80
            };
            var processor = new ScanProcessor(new FileResolution(settings), settings);

            // Add some weird files to the package
            AddFileToPackage("test01.txt", "D_o_k_u_m_e_n_t_0000001", paket, rootFolder);
            AddFileToPackage("test02.txt", "D_o_k_u_m_e_n_t_0000002", paket, rootFolder);
            AddFileToPackage("test03.txt", "U_m_s_c_h_l_a_g_0000001", paket, rootFolder);

            // Act
            processor.ConvertSingleJpeg2000ScansToPdfDocuments(paket, rootFolder);

            // Assert
            // Nothing should be changed
            var contentFolder = paket.Inhaltsverzeichnis.Ordner[0];

            contentFolder.Ordner.FirstOrDefault(o => o.Name == "D_o_k_u_m_e_n_t_0000001")?.Datei.Count.Should().Be(9);
            contentFolder.Ordner.FirstOrDefault(o => o.Name == "D_o_k_u_m_e_n_t_0000002")?.Datei.Count.Should().Be(9);
            contentFolder.Ordner.FirstOrDefault(o => o.Name == "U_m_s_c_h_l_a_g_0000001")?.Datei.Count.Should().Be(5);

            // Alle Dateien vorhanden?
            var dokument1         = new DirectoryInfo(Path.Combine(rootFolder, "content", "D_o_k_u_m_e_n_t_0000001"));
            var dokument2         = new DirectoryInfo(Path.Combine(rootFolder, "content", "D_o_k_u_m_e_n_t_0000002"));
            var umschlagDirectory = new DirectoryInfo(Path.Combine(rootFolder, "content", "U_m_s_c_h_l_a_g_0000001"));

            umschlagDirectory.GetFiles("*.xml").Length.Should().Be(2);
            umschlagDirectory.GetFiles("*.jp2").Length.Should().Be(2);
            dokument1.GetFiles("*.xml").Length.Should().Be(4);
            dokument1.GetFiles("*.jp2").Length.Should().Be(4);
            dokument2.GetFiles("*.xml").Length.Should().Be(4);
            dokument2.GetFiles("*.jp2").Length.Should().Be(4);
        }
 public FileResolution(ScansZusammenfassenSettings settings)
 {
     this.settings = settings;
 }