using it.stefanochizzolini.clown.documents;
using it.stefanochizzolini.clown.documents.contents.colorSpaces;
using it.stefanochizzolini.clown.documents.contents.composition;
using it.stefanochizzolini.clown.documents.contents.fonts;
using it.stefanochizzolini.clown.files;
using it.stefanochizzolini.clown.tools;
using System;
using System.Collections.Generic;
using System.Drawing;
namespace it.stefanochizzolini.clown.samples{
/**
<summary>This sample demonstrates how to stamp the page number on alternated corners of an
existing document's pages.</summary>
<remarks>
<para>Stamping is just one of the several ways PDF contents can be manipulated using PDF Clown:
contents can be inserted as (raw) data chunks, mid-level content objects, external forms,
etc.</para>
</remarks>
*/
public class PageNumberingSample
: ISample
{
public void Run(
SampleLoader loader
)
{
// (boilerplate user choice -- ignore it)
string filePath = loader.GetPdfFileChoice("Please select a PDF file");
// 1. Open the PDF file!
File file = new File(filePath);
// Get the PDF document!
Document document = file.Document;
// 2. Stamp the document!
Stamp(document);
// (boilerplate metadata insertion -- ignore it)
loader.BuildAccessories(document,this.GetType(),"Page numbering","numbering a document's pages");
// 3. Serialize the PDF file (again, boilerplate code -- see the SampleLoader class source code)!
loader.Serialize(file,this.GetType().Name);
}
private void Stamp(
Document document
)
{
// 1. Instantiate the stamper!
/* NOTE: The PageStamper is optimized for dealing with pages. */
PageStamper stamper = new PageStamper();
// 2. Numbering each page...
StandardType1Font font = new StandardType1Font(
document,
StandardType1Font.FamilyNameEnum.Courier,
true,
false
);
DeviceRGBColor redColor = new DeviceRGBColor(1, 0, 0);
int margin = 32;
foreach(Page page in document.Pages)
{
// 2.1. Associate the page to the stamper!
stamper.Page = page;
// 2.2. Stamping the page number on the foreground...
{
PrimitiveFilter foreground = stamper.Foreground;
foreground.SetFont(font,16);
foreground.SetFillColor(redColor);
SizeF pageSize = page.Size.Value;
int pageNumber = page.Index + 1;
bool pageIsEven = (pageNumber % 2 == 0);
foreground.ShowText(
pageNumber.ToString(),
new PointF(
(pageIsEven
? margin
: pageSize.Width - margin),
pageSize.Height - margin
),
(pageIsEven
? AlignmentXEnum.Left
: AlignmentXEnum.Right),
AlignmentYEnum.Bottom,
0
);
}
// 2.3. End the stamping!
stamper.Flush();
}
}
}
}
|