/// <summary>Adds a spine text.</summary> /// <param name="graphics">The graphics object to draw to.</param> /// <param name="dpi">The DPI of the cover.</param> /// <param name="rectSafe">The spine safe rectangle.</param> private static void AddSpineText(Graphics graphics, int dpi, RectangleF rectSafe) { Contract.Requires<ArgumentNullException>(graphics != null); Font fontTitleSpine = null; Font fontAuthorSpine = null; try { string fontTypeface = Settings.Default.FontTypeface; string bookTitle = Settings.Default.BookTitle; string bookAuthor = Settings.Default.BookAuthor; float marginText = Settings.Default.MarginTextInches * dpi; fontTitleSpine = new Font(fontTypeface, Settings.Default.FontTitleSpineSize); fontAuthorSpine = new Font(fontTypeface, Settings.Default.FontAuthorSpineSize); SizeF sizeTextTitleSpine = graphics.MeasureString(bookTitle, fontTitleSpine); SizeF sizeTextAuthorSpine = graphics.MeasureString(bookAuthor, fontAuthorSpine); using (StringFormat stringFormat = new StringFormat(StringFormatFlags.DirectionVertical)) { RectangleF rectTitleSpine = new RectangleF( rectSafe.X + ((rectSafe.Width - sizeTextTitleSpine.Height) / 2), rectSafe.Y + marginText, sizeTextTitleSpine.Height, sizeTextTitleSpine.Width); graphics.DrawStringEmbossed(bookTitle, fontTitleSpine, Brushes.White, rectTitleSpine, stringFormat); RectangleF rectAuthorSpine = new RectangleF( rectSafe.X + ((rectSafe.Width - sizeTextAuthorSpine.Height) / 2), rectSafe.Bottom - marginText - sizeTextAuthorSpine.Width, sizeTextAuthorSpine.Height, sizeTextAuthorSpine.Width); graphics.DrawStringEmbossed(bookAuthor, fontAuthorSpine, Brushes.White, rectAuthorSpine, stringFormat); } } finally { fontTitleSpine?.Dispose(); fontAuthorSpine?.Dispose(); } }
/// <summary>Adds a back cover text.</summary> /// <param name="graphics">The graphics object to draw to.</param> /// <param name="dpi">The DPI of the cover.</param> /// <param name="rectSafe">The back cover safe rectangle.</param> private static void AddBackCoverText(Graphics graphics, int dpi, RectangleF rectSafe) { Contract.Requires<ArgumentNullException>(graphics != null); Font fontBlurb = null; try { float marginText = Settings.Default.MarginTextInches * dpi; string directoryImages = Settings.Default.DirectoryImages; Contract.Assume(directoryImages != null); // Draw the blurb string bookBlurb = Settings.Default.BookBlurb; PointF pointBlurb = new PointF(rectSafe.X + marginText, rectSafe.Y + marginText); fontBlurb = new Font(Settings.Default.FontTypeface, Settings.Default.FontBlurbSize); SizeF sizeTextBlurb = graphics.MeasureString(bookBlurb, fontBlurb, (int)Math.Ceiling(rectSafe.Width - (2 * marginText))); graphics.DrawStringEmbossed(bookBlurb, fontBlurb, Brushes.White, pointBlurb, sizeTextBlurb); // Draw the logo string logoFileNameFull = string.Format(CultureInfo.InvariantCulture, Settings.Default.FileNameLogo, dpi); Contract.Assume(logoFileNameFull != null); string logoPathName = Path.Combine(directoryImages, logoFileNameFull); if (File.Exists(logoPathName)) { using (Bitmap bitmapLogo = new Bitmap(logoPathName)) { graphics.DrawImage(bitmapLogo, rectSafe.X + marginText, rectSafe.Bottom - marginText - bitmapLogo.Height); } } // Draw the ISBN SizeF sizeIsbnBlockInches = Settings.Default.SizeIsbnBlockInches; SizeF sizeIsbnBlock = new SizeF(sizeIsbnBlockInches.Width * dpi, sizeIsbnBlockInches.Height * dpi); RectangleF rectIsbn = new RectangleF( rectSafe.Right - marginText - sizeIsbnBlock.Width, rectSafe.Bottom - marginText - sizeIsbnBlock.Height, sizeIsbnBlock.Width, sizeIsbnBlock.Height); graphics.FillRectangle(Brushes.White, rectIsbn); if (Settings.Default.ShowIsbn) { // Get the isbn graphic and draw it on the back. If not done, CoverSpace will automatically add an ISBN barcode to the // white block. string isbnFileNameFull = string.Format(CultureInfo.InvariantCulture, Settings.Default.FileNameIsbn, dpi); Contract.Assume(isbnFileNameFull != null); string isbnPathName = Path.Combine(directoryImages, isbnFileNameFull); if (File.Exists(isbnPathName)) { using (Bitmap bitmapIsbn = new Bitmap(isbnPathName)) { graphics.DrawImage(bitmapIsbn, rectIsbn.Left, rectIsbn.Top, rectIsbn.Width, rectIsbn.Height); } } } } finally { fontBlurb?.Dispose(); } }
/// <summary>Adds a front cover text.</summary> /// <param name="graphics">The graphics object to draw to.</param> /// <param name="dpi">The DPI of the cover.</param> /// <param name="rectSafe">The front cover safe rectangle.</param> private static void AddFrontCoverText(Graphics graphics, int dpi, RectangleF rectSafe) { Contract.Requires<ArgumentNullException>(graphics != null); Font fontTitle = null; Font fontAuthor = null; Font fontSubtitle = null; Font fontDraft = null; try { string fontTypeface = Settings.Default.FontTypeface; string bookTitle = Settings.Default.BookTitle; string bookAuthor = Settings.Default.BookAuthor; string bookSubtitle = Settings.Default.BookSubtitle; string bookDraftText = Settings.Default.BookDraftText; float spacingTitle = Settings.Default.SpacingTitleInches * dpi; float spacingAuthor = Settings.Default.SpacingAuthorInches * dpi; float spacingSubtitle = Settings.Default.SpacingSubtitleInches * dpi; float spacingDraft = Settings.Default.SpacingDraftInches * dpi; fontAuthor = new Font(fontTypeface, Settings.Default.FontAuthorSize); fontDraft = new Font(fontTypeface, Settings.Default.FontDraftSize); fontSubtitle = new Font(fontTypeface, Settings.Default.FontSubtitleSize, FontStyle.Italic); fontTitle = new Font(fontTypeface, Settings.Default.FontTitleSize, FontStyle.Bold); SizeF sizeTextAuthor = graphics.MeasureString(bookAuthor, fontAuthor); SizeF sizeTextDraft = graphics.MeasureString(bookDraftText, fontDraft); SizeF sizeTextSubtitle = graphics.MeasureString(bookSubtitle, fontSubtitle); SizeF sizeTextTitle = graphics.MeasureString(bookTitle, fontTitle); PointF pointTextTitle = new PointF(rectSafe.X + ((rectSafe.Width - sizeTextTitle.Width) / 2), rectSafe.Top + spacingTitle); PointF pointTextAuthor = new PointF( rectSafe.X + ((rectSafe.Width - sizeTextAuthor.Width) / 2), pointTextTitle.Y + spacingAuthor); PointF pointTextSubtitle = new PointF( rectSafe.X + ((rectSafe.Width - sizeTextSubtitle.Width) / 2), pointTextAuthor.Y + spacingSubtitle); PointF pointTextDraft = new PointF( rectSafe.X + ((rectSafe.Width - sizeTextDraft.Width) / 2), pointTextSubtitle.Y + spacingDraft); // Draw the text on the Front Cover graphics.DrawStringEmbossed(bookTitle, fontTitle, Brushes.White, pointTextTitle, sizeTextTitle); graphics.DrawStringEmbossed(bookAuthor, fontAuthor, Brushes.White, pointTextAuthor, sizeTextAuthor); graphics.DrawStringEmbossed(bookSubtitle, fontSubtitle, Brushes.White, pointTextSubtitle, sizeTextSubtitle); if (Settings.Default.ShowDraft) { // Puts the draft text on the front cover graphics.DrawStringEmbossed(bookDraftText, fontDraft, Brushes.Black, pointTextDraft, sizeTextDraft); } } finally { fontTitle?.Dispose(); fontAuthor?.Dispose(); fontSubtitle?.Dispose(); fontDraft?.Dispose(); } }