using it.stefanochizzolini.clown.documents;
using it.stefanochizzolini.clown.documents.contents;
using it.stefanochizzolini.clown.documents.contents.composition;
using it.stefanochizzolini.clown.documents.contents.objects;
using it.stefanochizzolini.clown.files;
using System;
using System.Collections.Generic;
using System.Drawing;
namespace it.stefanochizzolini.clown.samples{
/**
<summary>This sample is a rough stub that demonstrates a basic way to remove all
the text content from a document.</summary>
<remarks>Next releases will provide a refined way to discriminate text content
for removal through ContentScanner class.</remarks>
*/
public class ContentRemovalSample
: ISample
{
#region dynamic
#region interface
#region public
#region 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);
// 2. Parsing the document...
// Get the PDF document!
Document document = file.Document;
// Interating through the pages...
foreach(Page page in document.Pages)
{
// Get the page contents!
Contents contents = page.Contents;
// Remove text content from page!
RemoveText(contents);
// Update the page contents!
contents.Flush();
}
// (boilerplate metadata insertion -- ignore it)
loader.BuildAccessories(document,this.GetType(),"Content removal","content removal from existing pages");
// 3. Serialize the PDF file (again, boilerplate code -- see the SampleLoader class source code)!
loader.Serialize(file,this.GetType().Name);
}
#endregion
#endregion
#region private
private void RemoveText(
IList<ContentObject> contents
)
{
for(
int index = 0,
length = contents.Count;
index < length;
index++
)
{
ContentObject content = contents[index];
if(content is Text)
{
contents.RemoveAt(index);
index--; length--;
}
else if(content is CompositeObject<ContentObject>)
{RemoveText(((CompositeObject<ContentObject>)content).Objects);}
}
}
#endregion
#endregion
#endregion
}
}
|