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); }
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); }
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}"); } }
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); } }
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; }