using it.stefanochizzolini.clown.documents;
using it.stefanochizzolini.clown.documents.contents.composition;
using entitiesit.stefanochizzolini.clown.documents.contents.entities;
using it.stefanochizzolini.clown.documents.contents.fonts;
using filesit.stefanochizzolini.clown.files;
using System;
using System.Drawing;
using System.IO;
namespace it.stefanochizzolini.clown.samples{
/**
<summary>This sample demonstrates how to embed an image object within a content
stream.</summary>
<remarks>
<para>Inline objects should be used sparingly, as they easily clutter content
streams.</para>
<para>The alternative (and preferred) way to insert an image object is via external
object (XObject); its main advantage is to allow content reuse.</para>
</remarks>
*/
public class InlineObjectSample
: ISample
{
#region static
#region fields
private const float Margin = 36;
#endregion
#endregion
#region dynamic
#region interface
#region public
#region ISample
public void Run(
SampleLoader loader
)
{
// 1. PDF file instantiation.
files::File file = new files::File();
// 2. Content creation.
Document document = file.Document;
Populate(
document,
loader
);
// (boilerplate metadata insertion -- ignore it)
loader.BuildAccessories(document,this.GetType(),"Inline image","embedding an image within a content stream");
// 3. Serialize the PDF file (again, boilerplate code -- see the SampleLoader class source code)!
loader.Serialize(file,this.GetType().Name,false);
}
#endregion
#endregion
#region private
/**
Populates a PDF file with contents.
*/
private void Populate(
Document document,
SampleLoader loader
)
{
Page page = new Page(document);
document.Pages.Add(page);
SizeF pageSize = page.Size.Value;
PrimitiveFilter builder = new PrimitiveFilter(page);
{
BlockFilter blockFilter = new BlockFilter(builder);
blockFilter.Hyphenation = true;
blockFilter.Begin(
new RectangleF(
Margin,
Margin,
(float)pageSize.Width - Margin * 2,
(float)pageSize.Height - Margin * 2
),
AlignmentXEnum.Justify,
AlignmentYEnum.Top
);
StandardType1Font bodyFont = new StandardType1Font(
document,
StandardType1Font.FamilyNameEnum.Courier,
true,
false
);
builder.SetFont(bodyFont,32);
blockFilter.ShowText("Inline image sample"); blockFilter.ShowBreak();
builder.SetFont(bodyFont,16);
blockFilter.ShowText("Showing the GNU logo as an inline image within the page content stream.");
blockFilter.End();
}
// Showing the 'GNU' image...
{
// Instantiate a jpeg image object!
entities::Image image = entities::Image.Get(loader.InputPath + Path.DirectorySeparatorChar + "images" + Path.DirectorySeparatorChar + "gnu.jpg"); // Abstract image (entity).
builder.ApplyMatrix(200,0,0,200,(pageSize.Width-200)/2,(pageSize.Height-200)/2);
// Show the image!
image.ToInlineObject(builder);
}
builder.Flush();
}
#endregion
#endregion
#endregion
}
}
|