c# wpf document viewer pdf : Extract pages from pdf document SDK application service wpf windows .net dnn AN38881-part181

Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
Freescale Semiconductor
11
Events
NOTE
Define the Random method in the Math class with the namespace, because 
there is another class with the same name in the System  namespace. Specify 
which class to use.
5. Order the numbers. The orderNumbers method creates a thread to work into the process as 
another task:
public void orderNumbers() {
thread = new Thread(new ThreadStart(orderNumbers_process));
thread.Start();
}
private void orderNumbers_process() {
int temp, j;
for (int i = 1; i < (buffer.Length); i++) {
j = i - 1;
while ((j >= 0) && (buffer[j] > buffer[i])) j--;
if (buffer[j+1] > buffer[i]) {
j = j + 1;
temp = buffer[i];
for (int k = i; k > j; k--) buffer[k] = buffer[k - 1];
buffer[j] = temp;
}
ordered = i + 1;
}
if (OnOrdered != null) OnOrdered(this, "Done! all the numbers are ordered");
}
3.3.2
Program Class
The Program  class is based on the sample Program  class provided by the Microsoft Visual Studio® 2005 
development system, which is used to create a new project in the following folder:
C#/.Net Microframework/Window Application
The following steps show the changes made to the provided Program  class in order to run this example:
1. Include the needed namespaces:
using System.Threading;
2. Define the types of data and variables to use:
private HardMathEvaluation orderNum;
private Text text1;
private Text text2;
private delegate void UpdateTextDelegate(Text IUElement, String text);
private Thread t1;
— orderNum  object is the reference to the HardMathEvaluation class that defines and applies 
the events.
— text1  and text2  are the objects that display text in the screen.
— UpdateTextDelegate defines the structure of the asynchronous function to be executed for 
correct screen updating. For more information, see Section5.1, “Standard UI Elements.”
— The variable t1  is used to run the update screen process as a separate task.
Extract pages from pdf document - SDK application service:C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use C# Code to Extract PDF Pages, Copy Pages from One PDF File and Paste into Others
www.rasteredge.com
Extract pages from pdf document - SDK application service:VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Detailed VB.NET Guide for Extracting Pages from Microsoft PDF Doc
www.rasteredge.com
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
12
Freescale Semiconductor
Events
The Main() method remains unchanged.
3. Initialize the variables. This step:
— Modifies the CreateWindow method to create a panel object of type Panel
— Initializes the Text objects
— Adds the Text objects to the panel
— Assigns the panel as child of the mainWindow object
— Initializes the orderNum  object
— Assigns the events functions
With these changes, the new CreateWindow method contains the following code (some comments 
are removed to save space):
public Window CreateWindow() {
mainWindow = new Window();
mainWindow.Height = SystemMetrics.ScreenHeight;
mainWindow.Width = SystemMetrics.ScreenWidth;
Panel panel = new Panel(); // Create a panel control.
text1 = new Text();
text1.Font = Resources.GetFont(Resources.FontResources.small);
text1.TextContent = Resources.GetString(Resources.StringResources.String1);
text1.HorizontalAlignment = 
Microsoft.SPOT.Presentation.HorizontalAlignment.Center;
text1.VerticalAlignment = Microsoft.SPOT.Presentation.VerticalAlignment.Center;
text2 = new Text();
text2.Font = Resources.GetFont(Resources.FontResources.small);
text2.HorizontalAlignment = 
Microsoft.SPOT.Presentation.HorizontalAlignment.Center;
text2.VerticalAlignment = Microsoft.SPOT.Presentation.VerticalAlignment.Top;
panel.Children.Add(text1);
panel.Children.Add(text2);
mainWindow.Child = panel;
mainWindow.AddHandler
(Buttons.ButtonUpEvent,new ButtonEventHandler(OnButtonUp), false);
mainWindow.Visibility = Visibility.Visible;
Buttons.Focus(mainWindow);
// Create the HardMathEvaluation control and assign its events.
orderNum = new HardMathEvaluation(1000);
orderNum.OnGenerated += 
new HardMathEvaluation.InterruptDelegate(OnGeneratedNumEvent);
orderNum.OnOrdered += 
new HardMathEvaluation.InterruptDelegate(OnOrderedNumEvent);
return mainWindow;
}
NOTE
Compiling the code at this point produces errors because the methods with 
the OnGeneratedNumEvent and OnOrderedNumEvent events code are 
not yet defined.
SDK application service:C# PDF Page Insert Library: insert pages into PDF file in C#.net
Support adding and inserting one or multiple pages to existing PDF document. Add and Insert Multiple PDF Pages to PDF Document Using C#.
www.rasteredge.com
SDK application service:C# PDF Image Extract Library: Select, copy, paste PDF images in C#
How to C#: Extract Image from PDF Document. C# users are able to extract image from PDF document page and get image information for indexing and accessing.
www.rasteredge.com
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
Freescale Semiconductor
13
Events
4. Start the process. The process is defined to start when any button is pressed. For this purpose, 
additional lines are added to the OnButtonUp method. The changes are moved into an IF 
condition, to avoid the case in which a process is running, a key is pressed, and the process tries to 
run again without having finished the initial run. This IF condition verifies the value of the thread 
variable, and is used for the screen update.
if (t1 == null)
The added lines start the hard mathematical order process, which continues through the 
generateNumbers method, and then starts the screen update thread content in the t1 variable:
orderNum.generateNumbers();
t1 = new Thread(new ThreadStart(updateWindow));
t1.Start();
With the changes, the OnButtonUp method contains the following code (some comments are 
removed to save space):
private void OnButtonUp(object sender, ButtonEventArgs e) {
Debug.Print(e.Button.ToString());
if (t1 == null) {
orderNum.generateNumbers();
t1 = new Thread(new ThreadStart(updateWindow));
t1.Start();
}
}
NOTE
Compiling the code at this point produces errors because the thread 
updateWindow method is not yet defined.
5. Define the window update code. To correctly update the window content and view the screen 
changes, the instructions for visual changes in functions must be called asynchronously. 
Therefore, UpdateTextDelegate is used as a parameter in the asynchronous calls, and is defined 
with two parameters. The first parameter identifies the user interface text object to update, and the 
second represents the text to update.
6. Define the UpdateText method as follows, respecting the parameters and returning types defined 
by the delegate UpdateTextDelegate:
private void UpdateText(Text IUElement, String text) {
IUElement.TextContent = text;
}
NOTE
Any function that respects the parameters and returns the types defined by 
the UpdateTextDelegate can be a function of that type.
7. Implement the updateWindow thread method. The updateWindow  thread method is 
implemented to update the text2  object with the number of elements already ordered. The call to 
the UpdateText method is made through the Dispatcher.Invoke method. Because this thread 
method must be running forever to update the text, the code is in a 
while(true)
loop.
private void updateWindow() {
while (true) {
SDK application service:VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
Able to add and insert one or multiple pages to existing adobe PDF document in VB.NET. Add and Insert Multiple PDF Pages to PDF Document Using VB.
www.rasteredge.com
SDK application service:VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
doc.Save(outPutFilePath). How to VB.NET: Delete Consecutive Pages from PDF. This is a VB .NET example for how to delete a range of pages from a PDF document.
www.rasteredge.com
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
14
Freescale Semiconductor
Persistent Data
text2.Dispatcher.Invoke(
new TimeSpan(0, 0, 1),
new UpdateTextDelegate(UpdateText),
new object[] { text2, orderNum.Ordered.ToString() + " ordered" });
}
}
— The TimeSpan parameter represents the .NET Micro Framework delay between the execution 
of the Invoke instruction and the UpdateText method. In this case it is one second.
— The object[] parameter represents the parameters of the UpdateText method in array form.
8. Define the events code. There are two events in this example. One event is exited when the buffer 
is filled with semi-random number values. The second event is exited when the ordering process 
is complete. 
The OnGeneratedNumEvent event method is assigned to the orderNum  object for the 
OnGenerated event in Step 3. Implement the function that starts the ordering process and updates 
a message on the screen. The function looks like this:
private void OnGeneratedNumEvent(Object sender, String description) {
Debug.Print(description);
orderNum.orderNumbers();
text1.Dispatcher.Invoke(
new TimeSpan(0, 0, 1),
new UpdateTextDelegate(UpdateText),
new object[] {text1,Resources.GetString
(Resources.StringResources.String1)+":"+description});
}
The OnOrderedNumEvent event method is assigned to the orderNum  object for the OnOrdered 
event in Step 3. Implement the function that updates a message on the screen and suspends the t1  
thread, which updates the window with the numbers ordered. The function looks like this:
private void OnOrderedNumEvent(Object sender, String description) {
Debug.Print(description);
text1.Dispatcher.Invoke(
new TimeSpan(0, 0, 1),
new UpdateTextDelegate(UpdateText),
new object[]{text1,Resources.GetString
(Resources.StringResources.String1)+":"+description});
t1.Suspend();
t1 = null;
}
After suspending the t1  thread, the variable is set to null to allow the system to run again by 
pressing any button. This is also done in Section2.2.3, “Start a Thread.”
4
Persistent Data
Persistent data is that data stored in Flash memory for restoration as needed, such as configuration options, 
profiles, and control variables. This section explains how to maintain persistent data in .Net Micro 
Framework at the managed layer.
SDK application service:VB.NET PDF Image Extract Library: Select, copy, paste PDF images
VB.NET PDF - Extract Image from PDF Document in VB.NET. using RasterEdge.Imaging. Basic; using RasterEdge.XDoc.PDF; VB.NET: Extract All Images from PDF Document.
www.rasteredge.com
SDK application service:C# PDF Text Extract Library: extract text content from PDF file in
PDFTextMgr textMgr = PDFTextHandler.ExportPDFTextManager(doc); // Extract text content C# example code for text extraction from all PDF pages. Open a document.
www.rasteredge.com
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
Freescale Semiconductor
15
Persistent Data
4.1
Create Storable Data
To be storable, data must be defined as serializable. Such storable data definitions include Stringintbyte, 
ArrayList, and so on. A serializable class can also be created in order to enclose the storable data. Flash 
memory can be erased and saved a finite number of times. It is recommended to create a serializable class 
with the storable data, and save the memory only when necessary.
4.2
Example: Persistent Data
In this example, the Device class is defined as a serializable class with two variables, name and id . The 
application stores the data of these variables in Flash. If the application needs to store the information for 
more than one Flash device, create a log for the data using an ArrayList object, located in the 
System.Collections namespace, as the manager of the data.
[Serializable]
public class Device {
private String name;
private byte id;
public String Name {
set { name = value; }
get { return name; }
}
public byte Id {
set { id = value; }
get { return id; }
}
public Device(byte Id, String Name) {
id = Id; name = Name;
}
}
The DeviceLog class showed below, can be used to store a stack of data. The DeviceLog class can be 
updated with search functions to allow searching for a device by name or ID.
[Serializable]
class DeviceLog {
private ArrayList log = new ArrayList();
private Device lastDeviceUsed;
public ArrayList Log {
get { return log; }
}
public Device LastDeviceUsed {
get { return lastDeviceUsed; }
set { lastDeviceUsed = value; }
}
public void AddToLog(Device device) {
log.Insert(0, device);
// this to have the last element added at the start
}
public void RemoveFromLog(Device device) {
log.Remove(device);
}
public void ClearLog() {
log.Clear();
lastDeviceUsed = null;
}
}
SDK application service:C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
in C#.NET. How to delete a range of pages from a PDF document. in C#.NET. How to delete several defined pages from a PDF document.
www.rasteredge.com
SDK application service:VB.NET PDF Text Extract Library: extract text content from PDF
SharePoint. Extract text from adobe PDF document in VB.NET Programming. Extract file. Extract highlighted text out of PDF document. Image
www.rasteredge.com
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
16
Freescale Semiconductor
Persistent Data
4.3
Create a Flash Reference
The ExtendedWeakReference class in the Microsoft.SPOT namespace is used as reference to the data 
to be stored in and recovered from Flash.
To save and recover data from Flash, use these steps:
1. Add a reference to the namespaces where the classes to use are located:
using Microsoft.SPOT;
2. Define the object that is used for the process:
ExtendedWeakReference flashReference;
3. Load the objects to recover the data from Flash, or create the object in Flash:
flashReference = ExtendedWeakReference.RecoverOrCreate(
typeof(Program), 
// marker class
id, 
// id number in the marker class
ExtendedWeakReference.c_SurvivePowerdown);
// flags
flashReference.Priority = (Int32)ExtendedWeakReference.PriorityLevel.Important;
Object data = flashReference.Target; 
// recovering data
Data is null if this is the first time it is used, or if the data is damaged.
4. Save the data in Flash:
flashReference.Target = data;
To clear the saved data, use null instead of using the data.
4.4
FlashReference Class
The FlashReference class encloses the basic functionality of the ExtendedWeakReference class. The 
FlashReference class only needs a unique identifier for the object to load/save Flash:
public class FlashReference {
private ExtendedWeakReference flashReference;
private uint id;
public FlashReference(uint Id) {
id = Id;
}
public Object load() {
flashReference = ExtendedWeakReference.RecoverOrCreate(
typeof(Program), 
// marker class
id, 
// id number in the marker class
ExtendedWeakReference.c_SurvivePowerdown);
// flags
flashReference.Priority=(Int32)ExtendedWeakReference.PriorityLevel.Important;
Object data = flashReference.Target;
// recovering data
return data;
}
public void save(Object data) {
flashReference.Target = data;
}
}
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
Freescale Semiconductor
17
GUI Applications
4.5
Example: FlashReference Class
The following example uses the FlashReferenceDeviceLog and Device classes used in Section4.2, 
“Example: Persistent Data,” and Section 4.4, “FlashReference Class.” This example illustrates the use of 
the FlashReference class for the following tasks:
• Store serializable data in the Flash memory for the first time
• Recover the data from Flash
• Update the data
• Save data in the Flash again
To perform this example, use these steps:
1. Add a reference to the namespaces where the classes to use are located:
DeviceLog deviceLog;
FlashReference deviceLogFlash;
2. Define the object that is used for the process:
DeviceLog deviceLog;
FlashReference deviceLogFlash;
3. Load the object to recover the data from Flash. The number 0 (zero) is the identification of the 
deviceLog object in Flash. Select a number as required, to identify the storable data.
deviceLogFlash = new FlashReference(0);
deviceLog = deviceLogFlash.load() as DeviceLog;
4. Initialize the object, if needed. Initialize the object for the first read time of the Flash object, or if 
the Flash object is damaged:
if (deviceLog == null) deviceLog = new DeviceLog();
5. Update the object. Update/change/delete data in the object:
String legend = "Data saved no: " + deviceLog.Log.Count.ToString();
deviceLog.AddToLog(new Device((byte)deviceLog.Log.Count, legend));
6. Save the object in Flash:
deviceLogFlash.save(deviceLog);
5
GUI Applications
This section describes two ways to create graphical user interface elements:
• Use the standard User Interface (UI) objects provided by .NET Micro Framework (which are 
limited in number, properties, and scope)
• Use the Bitmap class
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
18
Freescale Semiconductor
GUI Applications
5.1
Standard UI Elements
Visual Studio 2005 and .Net Micro Framework provide standard UI elements that allow quick design of 
the look and feel of screen components. Table1 describes the most commonly used standard UI elements.
5.2
Using UI Elements
To interact with the interface elements, use functions that are called in the queue of messages of any UI 
element. This avoid issues with the interaction of visual UI elements.
The user interface elements (UIElement) are an implementation of the dispatcher abstract object 
(DispatcherObject). This dispatcher object adds the queue messaging service to the UI, which must be 
used for any visual change in the object to take effect. Use any dispatcher of any object in the window, 
including the window object, to update any visual property of the UI elements.
To update the elements and view the effects in the screen, use these steps:
1. Configure the delegate for the function that updates the user interface element:
private delegate void UpdateScreenDelegate(UIElement newValue,bool setFocus);
private delegate 
void AddCanvasChildDelegate(UIElement newValue, int top, int left, bool setFocus);
private delegate void UpdateHintDelegate(String hint);
2. Implement the functions. These functions must be defined with the same parameters, using the 
same types of data. The content of the function updates the properties of the user interface 
elements. The user interface element to update can be a parameter for the function, or the user 
interface element can be referenced by a global variable.
private void UpdateScreen(UIElement newValue, bool setFocus) {
_mainWindow.Child = newValue;
if (setFocus) Buttons.Focus(newValue);
}
Table 1. Standard UI Elements
Element
Description
Canvas
Defines an area, or canvas, within which child elements can be explicitly positioned by using coordinates that 
are relative to the upper-left corner of the canvas
Image
Displays a bitmap image
ListBox
Implements a list of selectable items
ListBoxItem
Implements a selectable item inside a ListBox object
Panel
Constitutes a base class for all panel elements
StackPanel Arranges child elements (child objects) in a single line that can be oriented either horizontally or vertically
Text
Displays a block of text
TextFlow
Provides members that control how text flows on the display device (screen)
TextRun
Provides members used to create and work with a text run, which is a string of characters that share a single 
property set
Shape
Represents a line or a two-dimensional shape displayed on a hardware display device; the implemented shape 
objects are: ellipse, line, polygon, and rectangle
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
Freescale Semiconductor
19
GUI Applications
private void AddCanvasChild(UIElement newValue, int top, int left, bool setFocus) {
Canvas.SetTop(newValue, top);
Canvas.SetLeft(newValue, left);
if (setFocus) Buttons.Focus(newValue);
_canvas.Children.Add(newValue);
}
private void UpdateHint(String text) {
if (_hint != null) _hint.TextContent = text;
}
The Buttons.Focus method moves the button focus to a specified display element, and in this case, 
is used to catch keyboard events. This method is used to focus (using setFocus) on any element 
that is associated with the keyboard, such as ListBox. At any specific point in time, there can be 
only one element on a button device display that has the button’s focus. For example, if the 
Buttons.Focus method is applied to the ListBox element, and then the ListBox element cleared, 
then the Buttons.Focus method must be applied to other user interface elements in the window, 
including the window itself, in order to continue catching the keyboard events.
3. Add functions to the queue. Put the function call in the queue for the correct update of the user 
interface elements:
_mainWindow.Dispatcher.Invoke(
new TimeSpan(0, 0, 1),
new UpdateScreenDelegate(UpdateScreen),
new object[] { _panel, true });
_mainWindow.Dispatcher.Invoke(
new TimeSpan(0, 0, 1),
new AddCanvasChildDelegate(AddCanvasChild),
new object[] { image, 40, 10, false });
_mainWindow.Dispatcher.Invoke(
new TimeSpan(0, 0, 1),
new UpdateHintDelegate(UpdateHint),
new object[] { "Actual State: Draw Image" });
5.2.1
Example: Graphical User Interface
The following example illustrates architecture development of an application using .Net Micro Framework 
user interface elements. This example uses the convention of the underscore character (_) to indicate 
global private variables.
1. Add references to the namespaces where the classes are located:
using System.Threading;
using Microsoft.SPOT.Presentation.Media;
using Microsoft.SPOT.Presentation.Shapes;
2. Define the objects that are used for this example:
/* Delegates */
private delegate void UpdateScreenDelegate(UIElement newValue, bool setFocus);
private delegate void AddCanvasChildDelegate
(UIElement newValue, int top, int left, bool setFocus);
private delegate void UpdateHintDelegate(String hint);
/* Global variables for reference of user interface elements */
private Window _mainWindow;
private StackPanel _panel;
private Canvas _canvas;
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
20
Freescale Semiconductor
GUI Applications
private Thread _stateT;
private ListBox _listbox;
private Text _hint;
/* States of the main states machine */
private enum statesMain {initialState, drawImage, drawListBox, idle, undefined, end, }
/* States control variable */
private struct stateType {
public statesMain actual;
public statesMain prior;
public statesMain next;
}
private stateType _state;
/* Additional enumeration control */
private enum shapeTypes { rectangle, circle, ellipse, line, }
3. Initialize and configure the objects through the CreateWindow and the stateMachine with the 
state of initialState . With these changes, the CreateWindow method looks like this:
public Window CreateWindow() {
_mainWindow = new Window();
_mainWindow.Height = SystemMetrics.ScreenHeight;
_mainWindow.Width = SystemMetrics.ScreenWidth;
Text text = new Text();
text.Font = Resources.GetFont(Resources.FontResources.small);
text.TextContent = Resources.GetString(Resources.StringResources.String1);
text.HorizontalAlignment =
Microsoft.SPOT.Presentation.HorizontalAlignment.Center;
text.VerticalAlignment = Microsoft.SPOT.Presentation.VerticalAlignment.Center;
_mainWindow.Child = text;
_mainWindow.AddHandler
(Buttons.ButtonUpEvent, new ButtonEventHandler(OnButtonUp), false);
_mainWindow.Visibility = Visibility.Visible; Buttons.Focus(_mainWindow);
/* Initializing the states */
_state = new stateType();
_state.prior = statesMain.undefined;
_state.actual = statesMain.idle;
_state.next = statesMain.initialState;
/* Creating and running the thread for the state machine */
_stateT = new Thread(new ThreadStart(stateMachine));
_stateT.Start();
return _mainWindow;
}
4. Use the objects when a key is pressed while in the state machine function. In this example the use 
of complex objects is done through detached functions. With these changes, the OnButtonUp 
method looks like this:
private void OnButtonUp(object sender, ButtonEventArgs e) {
if (e.Button == Button.Right) {
/* Update the states after right button is pressed */
_state.prior = _state.actual;
_state.actual = _state.next;
_state.next = statesMain.undefined;
}
if ((_state.prior == statesMain.drawListBox)
&& (e.Button == Button.Select)) {
/* In case of the state "drawListBox" the button select is pressed
* draw a picture depending of the list box element selected */
Documents you may be interested
Documents you may be interested