//
// This code is part of Document Solutions for PDF demos.
// Copyright (c) MESCIUS inc. All rights reserved.
//
using System;
using System.Drawing;
using System.IO;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;
namespace DsPdfWeb.Demos.Basics
{
// Demonstrates text alignment options (horizontal alignment for LRT text):
// Left / Centered / Right / Justified.
public class TextAlign
{
public int CreatePDF(Stream stream)
{
// Helper function to generate a paragraph of random text:
Func<string> makePara = () => Common.Util.LoremIpsum(1, 3, 4, 15, 20);
//
var doc = new GcPdfDocument();
var g = doc.NewPage().Graphics;
// Using Graphics.CreateTextLayout() ensures that TextLayout's resolution
// is set to the same value as that of the graphics (which is 72 dpi by default):
var tl = g.CreateTextLayout();
tl.DefaultFormat.Font = StandardFonts.Times;
tl.DefaultFormat.FontSize = 12;
// Set layout size (full page with 1" margins):
tl.MaxWidth = doc.Pages.Last.Size.Width - 72 * 2;
tl.MaxHeight = doc.Pages.Last.Size.Height - 72 * 2;
// Strong text format for 'headers':
var tf = new TextFormat(tl.DefaultFormat) { Font = StandardFonts.TimesBold };
// Insertion point:
var ip = new PointF(72, 72);
// TextAlignment controls how text is aligned horizontally within the layout rectangle.
// We render 5 paragraphs with different alignments.
// Leading:
tl.TextAlignment = TextAlignment.Leading;
tl.Append("TextAlignment.Leading: ", tf);
tl.Append(makePara());
tl.PerformLayout(true);
g.DrawTextLayout(tl, ip);
// Advance insertion point, adding one line's height between paragraphs:
ip.Y += tl.ContentHeight + tl.Lines[0].Height;
// Center:
tl.Clear();
tl.TextAlignment = TextAlignment.Center;
tl.Append("TextAlignment.Center: ", tf);
tl.Append(makePara());
tl.PerformLayout(true);
g.DrawTextLayout(tl, ip);
// Advance insertion point, adding one line's height between paragraphs:
ip.Y += tl.ContentHeight + tl.Lines[0].Height;
// Trailing:
tl.Clear();
tl.TextAlignment = TextAlignment.Trailing;
tl.Append("TextAlignment.Trailing: ", tf);
tl.Append(makePara());
tl.PerformLayout(true);
g.DrawTextLayout(tl, ip);
// Advance insertion point, adding one line's height between paragraphs:
ip.Y += tl.ContentHeight + tl.Lines[0].Height;
// Justified:
tl.Clear();
tl.TextAlignment = TextAlignment.Justified;
tl.Append("TextAlignment.Justified: ", tf);
tl.Append(makePara());
tl.PerformLayout(true);
g.DrawTextLayout(tl, ip);
// Advance insertion point, adding one line's height between paragraphs:
ip.Y += tl.ContentHeight + tl.Lines[0].Height;
// Distributed:
tl.Clear();
tl.TextAlignment = TextAlignment.Distributed;
tl.Append("TextAlignment.Distributed: ", tf);
tl.Append(makePara());
tl.PerformLayout(true);
g.DrawTextLayout(tl, ip);
// Done:
doc.Save(stream);
return doc.Pages.Count;
}
}
}