public static void Serialize(BookTemplate bookTemplate) { FileStream stream = new FileStream(bookTemplate.OutputFolder + "BookTemplate.json", FileMode.OpenOrCreate); try { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(BookTemplate)); ser.WriteObject(stream, bookTemplate); } finally { stream.Close(); } }
public TestBookTemplateDefinition() { bookTemplate = new BookTemplate { Id = "TestBook", PageTemplates = CreatePageTemplates(), PageWidth = 900, PageHeight = 506, TemplateFolder = @"C:\git\imagesandpit\BookEngine\BookTemplates\Book\TestBook", TemplateImagesFolder = @"C:\git\imagesandpit\BookEngine\BookTemplates\Book\TestBook\Images\", OutputFolder = @"C:\git\imagesandpit\BookEngine\BookTemplates\Book\TestBook\" }; }
public static BookTemplate GetTemplate() { BookTemplate bookTemplate = new BookTemplate { Id = "BestSwimmer", PageTemplates = CreatePageTemplates(), PageWidth = 900, PageHeight = 506, TemplateFolder = @"C:\git\ImageSandpit\BookEngine\BookTemplates\Book\BestSwimmer\", TemplateImagesFolder = @"C:\git\ImageSandpit\BookEngine\BookTemplates\Book\BestSwimmer\Images\", OutputFolder = @"C:\git\ImageSandpit\BookEngine\Output\BestSwimmer\" }; return bookTemplate; }
public static Book BuildBook(BookTemplate bookTemplate, Dictionary<string, string> selectedCharacterOptions, Dictionary<string, string> selectedPageOptions) { Book book = new Book { CustomerId = selectedCharacterOptions["CustomerId"], PersonalMessage = selectedCharacterOptions["PersonalMessage"], TemplateId = bookTemplate.Id }; // Create character book.Character = new Character { Name = selectedCharacterOptions["Name"], Gender = selectedCharacterOptions["Gender"], HairColour = selectedCharacterOptions["HairColour"], SkinColour = selectedCharacterOptions["SkinColour"] }; // Create pages based on template ** Currently assuming there is only one option for each page book.Pages = new List<Page>(); foreach (PageTemplate pageTemplate in bookTemplate.PageTemplates) { // Check to see if this page template is the selected option // ** // TO DO // ** // // >>>> USE pageOptions !!!! <<<< // if (pageTemplate.OptionCondition.Value != null && pageTemplate.OptionCondition.Value != selectedPageOptions[pageTemplate.OptionCondition.Key]) continue; Page page = new Page(); page.Index = pageTemplate.Index; page.TemplateId = pageTemplate.Id; page.TemplateOptionId = pageTemplate.OptionId; // Copy new base image based on base page image string baseImageFile = bookTemplate.TemplateImagesFolder + pageTemplate.BaseImageLayer.File; page.ImageFile = bookTemplate.OutputFolder + book.Id + @"-" + pageTemplate.Id + ".png"; page.ImageFileRelative = @"../Output/" + book.Id + @"-" + pageTemplate.Id + ".png"; File.Copy(baseImageFile, page.ImageFile, true); // Determine which image layers to include depending on specified conditions List<ImageLayer> processedImageLayers = new List<ImageLayer>(); foreach (ImageLayer imageLayer in pageTemplate.ImageLayers) { bool include = true; if (imageLayer.Conditions != null) { foreach (KeyValuePair<string, string> condition in imageLayer.Conditions) { if (selectedCharacterOptions[condition.Key] != condition.Value) { include = false; break; } } } if (include) { processedImageLayers.Add(imageLayer); } } // Word replacement logic for text layers List<TextLayer> processedTextLayers = new List<TextLayer>(); foreach (TextLayer textLayer in pageTemplate.TextLayers) { textLayer.Text = WordReplaceHelper.Replace(book.Character, textLayer.Text); processedTextLayers.Add(textLayer); } // Physically create the layers and add page Image newPageImage = AddLayers(bookTemplate.TemplateImagesFolder, page.ImageFile, processedImageLayers, processedTextLayers, bookTemplate.PageWidth, bookTemplate.PageHeight); newPageImage.Save(page.ImageFile); newPageImage.Save(page.ImageFileRelative.Replace("..", @"C:\git\ImageSandpit\ImageSandpit")); // << + duplicated for website access [**to be reviewed**] book.Pages.Add(page); } return book; }