//
// This code is part of Document Solutions for Word demos.
// Copyright (c) MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Word;
using GrapeCity.Documents.Imaging;
namespace DsWordWeb.Demos
{
// This sample adds a paragraph of text, splits it in the middle,
// and inserts a picture into the split position.
// This sequence is repeated several times with the same text and picture,
// but with different picture wrapping styles and alignments.
public class PictureWrap
{
public GcWordDocument CreateDocx()
{
GcWordDocument doc = new GcWordDocument();
doc.Styles.DefaultParagraphFormat.Alignment = ParagraphAlignment.Both;
// Load picture data:
var picBytes = File.ReadAllBytes(Path.Combine("Resources", "Images", "road.jpg"));
// Create a GcBitmap so that we can find out the native picture size:
var image = new GcBitmap(picBytes);
// Scale picture to a smallish size:
var width = doc.Body.Sections.Last.PageSetup.ClientWidth / 6;
var height = image.Height * (width / image.Width);
// The section:
var sec = doc.Body.Sections.First;
// The paragraphs collection:
var pars = sec.GetRange().Paragraphs;
// Generate a sample string (used in all sample paragraphs):
var str = Util.LoremIpsumPar(10, 10, 10, 10);
// Header:
pars.Add("Different picture wrapping styles and alignments.", doc.Styles[BuiltInStyleId.Heading1]);
// Function to insert a sized picture into the middle of a paragraph:
Func<string, Picture> addPicture = (caption_) => {
pars.Add(caption_, doc.Styles[BuiltInStyleId.Heading2]);
var par_ = pars.Add(str);
var text_ = par_.GetRange().Texts.First.Split(str.Length / 2);
var run_ = text_.ParentRun.Split(text_, InsertLocation.Before);
run_ = run_.Previous;
var pic_ = run_.GetRange().Pictures.Add(picBytes, "image/jpeg");
pic_.Size.Width.Value = width;
pic_.Size.Height.Value = height;
return pic_;
};
// Add picture using different wrapping styles and alignments:
var pic = addPicture("Wrapping style 'In line with text':");
pic = addPicture("Wrapping style 'Square', centered:");
pic.WrapFormat.Type = WrapType.Square;
pic.Position.Horizontal.Type = ShapePositionType.Alignment;
pic.Position.Horizontal.Alignment = ShapeHorizontalRelativeAlignment.Center;
pic = addPicture("Wrapping style 'Tight', centered:");
pic.WrapFormat.Type = WrapType.Tight;
pic.Position.Horizontal.Type = ShapePositionType.Alignment;
pic.Position.Horizontal.Alignment = ShapeHorizontalRelativeAlignment.Center;
// Add page break:
sec.GetRange().Runs.Last.GetRange().Texts.AddBreak(BreakType.Page);
pic = addPicture("Wrapping style 'Through', left aligned:");
pic.WrapFormat.Type = WrapType.Through;
pic.Position.Horizontal.Type = ShapePositionType.Alignment;
pic.Position.Horizontal.Alignment = ShapeHorizontalRelativeAlignment.Left;
pic = addPicture("Wrapping style 'Top and Bottom', right aligned:");
pic.WrapFormat.Type = WrapType.TopBottom;
pic.Position.Horizontal.Type = ShapePositionType.Alignment;
pic.Position.Horizontal.Alignment = ShapeHorizontalRelativeAlignment.Right;
pic = addPicture("Wrapping style 'Behind text', left aligned:");
pic.WrapFormat.BehindText = true;
pic.WrapFormat.Type = WrapType.None;
pic.Position.Horizontal.Type = ShapePositionType.Alignment;
pic.Position.Horizontal.Alignment = ShapeHorizontalRelativeAlignment.Left;
// Add page break:
sec.GetRange().Runs.Last.GetRange().Texts.AddBreak(BreakType.Page);
pic = addPicture("Wrapping style 'In front of text', right aligned:");
pic.WrapFormat.BehindText = false;
pic.WrapFormat.Type = WrapType.None;
pic.Position.Horizontal.Type = ShapePositionType.Alignment;
pic.Position.Horizontal.Alignment = ShapeHorizontalRelativeAlignment.Right;
pars.Add("The End.");
// Done:
return doc;
}
}
}