c# pdf viewer wpf : How to reorder pages in pdf online SDK control API .net web page html sharepoint vb_dot_net_developers_guide29-part581

258
Chapter 6 • Advanced Programming Concepts
oFont = New System.Drawing.Font("Courier New", 12)
'Determine the height of font for printing
sngLineHeight = oFont.GetHeight(arg.Graphics)
'Move to top of page    
sngCurY = arg.MarginBounds.Top
'Make sure data is available in file        
If m_oFile.Peek() <> -1 Then
Do
'move to next line on page
sngCurY += sngLineHeight
'print the next line of the file
arg.Graphics.DrawString(m_oFile.ReadLine(), _
oFont, brushes.Black, _
arg.MarginBounds.Left, sngCurY)                
Loop Until sngCurY >= arg.MarginBounds.Bottom Or _
m_oFile.Peek() = -1
End If
'determine whether we should continue
'on the next page
If m_oFile.Peek <> -1 Then
arg.HasMorePages = True
Else
arg.HasMorePages = False
End If
End Sub
In the first line, we declare the sub OnPagePrint.This routine must accept two
arguments: the first is of type Object and the second is of type
System.Drawing.Printing.PrintPageEventArgs.The second argument, which we
declared as arg, provides us with the ability to discover information about the
print job and to write our output to the printer.We use the Handles keyword to
www.syngress.com
How to reorder pages in pdf online - re-order PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Customizing Page Order of PDF Document in C# Project
how to rearrange pages in a pdf document; change pdf page order
How to reorder pages in pdf online - VB.NET PDF Page Move Library: re-order PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sort PDF Document Pages Using VB.NET Demo Code
how to move pages in a pdf document; pdf rearrange pages
Advanced Programming Concepts • Chapter 6
259
indicate that this method provides the event handling for the PrintPage method of
the PrintDocument object.
On the next several lines, we declare variables that are important for the
spacing of our printer output.The single, sngCurY, contains our current vertical
position on the page.We use this to indicate when we need to go to the next
page.The single, sngLineHeight, contains the height of the lines on our page.This
is calculated by calling the GetHeight method of the Font object used to render
our text. Finally, we declare our Font object, oFont, which determines the charac-
teristics of the font used in our print job.
Following the declaration of our variables, we instantiate oFont, setting the
font family to Courier New and the font size to 12.We then use the GetHeight
method of oFont to set sngLineHeight to the height of each line in our document.
By setting sngCurY to the value of arg.MarginBounds.Top, we move our starting
position to the topmost position in the printable area of our page.
Our next step is to determine whether we have data left inside the file to
print.This is done by calling the Peek() method of our StreamReader object.The
Peek() method returns the next available character (or –1 if no more characters
are available) without actually moving the pointer within the file. If we have data
in the file, we proceed into our loop.
Inside the loop, the first action we need to take is to move our vertical posi-
tion on the paper.We do this by adding the value of sngLineHeight to sngCurY.
This, in effect, brings our “pen” down one line.We call the DrawString method of
the System.Drawing object so that we can access through the variable arg. Our
loop continues this process until we have reached the bottom of the page or we
have run out of data in our file.
This process concludes by determining whether we finished the loop because
we ran out of data in the file or because we reached the bottom of the page. If
there is still data in our file, then we know that we reached the bottom of the
page, and we set the HasMorePages property of arg to True to indicate that the
print engine needs to request another page. If not, we set the HasMorePages prop-
erty to False to indicate that the print engine can complete the job. Our
OnPagePrint method is called until the print engine is instructed that there are no
more pages to print.
www.syngress.com
C# TIFF: How to Reorder, Rearrange & Sort TIFF Pages Using C# Code
Reorder, Rearrange and Sort TIFF Document Pages in C#.NET Application. C# TIFF Page Sorting Overview. Reorder TIFF Pages in C#.NET Application.
reorder pages in pdf online; switch page order pdf
VB.NET PowerPoint: Sort and Reorder PowerPoint Slides by Using VB.
Sort and Reorder PowerPoint Slides Range with VB amount of robust PPT slides/pages editing methods powerful & profession imaging controls, PDF document, image
rearrange pages in pdf online; how to move pages in pdf acrobat
260
Chapter 6 • Advanced Programming Concepts
Table 6.4
Classes of the System.Drawing.Printing Namespace
Method
Description
System.Drawing.Printing.Duplex()
This enumeration defines the 
printer’s duplex setting.
System.Drawing.Printing
This class is the base for the 
.InvalidPrinterException()
error that gets thrown when 
trying to use a printer with 
invalid settings.
System.Drawing.Printing.Margins()
This class is used to specify the 
margins of a page.
System.Drawing.Printing.MarginsConverter() This class is used to convert the 
margins to and from different 
types.
System.Drawing.Printing.PageSettings()
This class can be used to specify 
settings for a page.
System.Drawing.Printing.PaperKind()
This enumeration is used to 
specify the standard paper size.
System.Drawing.Printing.PaperSize()
This class is used to specify the 
paper size.
System.Drawing.Printing.PaperSource()
This enumeration is used to 
specify the standard paper 
source.
System.Drawing.Printing.PaperSourceKind() This enumeration is used to 
specify the standard paper 
source.
System.Drawing.Printing.PreviewPageInfo() This class contains objects for a 
single page. This class cannot 
be inherited.
System.Drawing.Printing
This class contains objects for a 
.PreviewPrintController()
printcontroller.
System.Drawing.Printing.PrintController()
This class contains objects that 
control how a document is 
printed.
System.Drawing.Printing.PrintDocument()
This class contains objects to 
send documents to the printer.
System.Drawing.Printing.PrinterResolution() This class contains objects to 
represent the printer resolution.
www.syngress.com
Continued
Read PDF in Web Image Viewer| Online Tutorials
"This online guide content is Out Dated! Extract images from PDF documents; Add, reorder pages in PDF files; Save and print PDF as you wish;
pdf change page order; move pages in a pdf file
C# PDF: C# Code to Process PDF Document Page Using C#.NET PDF
C# PDF Page Processing: Sort PDF Pages - online C#.NET tutorial page for how to reorder, sort, reorganize or re-arrange PDF document files using C#.NET code.
change page order pdf reader; how to reorder pdf pages
Advanced Programming Concepts • Chapter 6
261
System.Drawing.Printing
This class contains objects to 
.PrinterResolutionKind()
represent the standard printer 
resolutions.
System.Drawing.Printing.PrinterSettings()
This class contains objects to 
represent how a document is 
printed.
System.Drawing.Printing.PrinterUnit()
This enumeration contains 
representations that are used 
to define the unit of measure 
for the printer.
System.Drawing.Printing
This class contains objects that 
.PrinterUnitConvert()
are used for working with the 
WIN32 printing API.
System.Drawing.Printing.PrintEventArgs()
This class contains objects for 
printing; used with the begin-
print and endprint events.
System.Drawing.Printing.PrintEventHandler() This delegate handles the 
beginprint, endprint, and 
querypagesettings events
System.Drawing.Printing
This class contains objects for 
.PrintPageEventArgs()
printing; used with the 
printpage event.
System.Drawing.Printing
This delegate handles the print-
.PrintPageEventHandler()
page event.
System.Drawing.Printing.PrintRange()
This enumeration is used to 
specify the options buttons on 
the Print dialog box.
System.Drawing.Printing
This class provides data for the 
.QueryPageSettingsEventArgs()
querypagesettings event.
System.Drawing.Printing
This delegate is for the 
.QueryPageSettingsEventHandler()
querypagesettings event.
System.Drawing.Printing
This class is used to specify a 
.StandardPrintController()
print controller to send data to 
a printer.
www.syngress.com
Table 6.4
Continued
Method
Description
VB.NET TIFF: Modify TIFF File by Adding, Deleting & Sort TIFF
Users can use it to reorder TIFF pages in ''' &ltsummary> ''' Sort TIFF document pages in designed powerful & profession imaging controls, PDF document, image
reordering pages in pdf document; move pdf pages online
C# PDF Page Rotate Library: rotate PDF page permanently in C#.net
Online C# class source codes enable the ability to rotate single NET, add new PDF page, delete certain PDF page, reorder existing PDF pages and split
how to move pages in pdf; change page order pdf acrobat
Advanced Programming Concepts • Chapter 6
263
The following statement kicks off the thread:
othread.Start()
Because Visual Basic has made creating threads so easy, you must be careful
about synchronization with threads as well as the creation of so many threads that
the system performance suffers. If you need to terminate a thread, you can do so
by implementing the following code:
oThread.Stop
SyncLock
You can use the SyncLock command to help prevent problems when working
with objects in a multithreaded environment.The SyncLock command accepts
an object as a key and locks that object from being accessed by other threads. By
key we mean a unique identifier or license plate that is used to identify an object
.In this way, a function can be marked as off-limits to other threads.The reason
why this is so critical is that in the case of multiple threads trying to access an
object at the same time, it could cause the system to become unstable or crash.
The SyncLock command helps us to prevent this from happening.
If another thread were to try to execute the locked block of code, it would
be suspended until the SyncLock cleared (at the end SyncLock statement).
SyncLock is basically a mutex (mutual exclusion) preventing a critical section of
code from being executed by two threads at the same time.The following code
fragment demonstrates the SyncLock command:
Private Sub dosomething()
SyncLock (button1)
button1.Text = "Something Else"
End SyncLock
End Sub
In the procedure, the SyncLock command uses the button1 object as the key.
In this case, a key is used as a unique identifier for a block of code.This prevents
other threads from accessing button1 while we were changing the text. If another
thread changed the text while we were changing it, a system crash, program
error, or some other undesired effect may result.
www.syngress.com
264
Chapter 6 • Advanced Programming Concepts
Good threadsafe code is written by properly using multithreading and paying
attention to designing your application properly.Threadsafe code operates prop-
erly when more than one thread executes it.
You can use events to simplify thread synchronization. If a process needs to
wait for another process to finish, it can wait for the event to raise.This is done
my designing the program so that functions wait for other functions to finish
using events.
N
OTE
Although the SyncLock command is helpful, it is not a substitute for
writing robust, threadsafe code. When you are developing a multi-
threaded application, proper design consideration to threading is still
required.
An example of this would be asking a coworker to do something and waiting
for them to finish (them telling you they are done could be likened to an event)
before performing a task that needs the work they were doing.
www.syngress.com
Advanced Programming Concepts • Chapter 6
265
Summary
In this chapter, we have covered namespaces and how they benefit us by giving
us logical groupings of functionality.We have seen how namespaces can make the
programming task easier through code reuse, as more and more functions are
written.We have also explored the use of the Imports keyword.This is the
method by which namespaces are made available to a program. Remember to
choose wisely when deciding to use an array or a collection. Collections offer
many advantages over arrays.We have begun to exploit the power of free
threading, and how it can make our applications more responsive. Some of the
risks associated with free threading have also been covered.This will be a boon to
applications which need to process information asynchronously.The SyncLock
command was introduced to help manage multithreaded object access.
Solutions Fast Track
Using Modules
;
In Visual Basic .NET, modules are treated like classes.
;
Shared methods take the place of functions and subs in modules.
Utilizing Namespaces
;
Namespaces are one of the key new concepts in Visual Basic .NET. Be
sure that you understand how they can help you with code reuse.
;
Take the time to familiarize yourself with Visual Basic .NET’s built-in
namespaces.
Understanding the Imports Keyword
;
The Imports keyword is one of the most important new features of
Visual Basic .NET.
;
Imports is the method by which we use namespaces.
www.syngress.com
266
Chapter 6 • Advanced Programming Concepts
Implementing Interfaces
;
Visual inheritance is now supported in Visual Basic .NET, which is a
major benefit when creating a lot of similar forms.
;
The Implements command requires all interfaces of the base class to be
created in the inherited class.
Delegates and Events
;
Delegates are similar to pointers in C.
;
The Handles keyword accepts multiple events.
The Advantages of Language Interoperability
;
Language interoperability can help to ease development on large projects.
;
It can aid in code reuse across languages.
File Operations
;
File handling has changed somewhat—it’s now stream oriented.
;
The System.IO namespace should be imported when doing file I/O.
;
Consider the type of data and the use of the data before deciding on a
storage type.
Collections
;
The implementation of collections has changed slightly from earlier 
versions of Visual Basic, but the principles are the same.
;
Collections don’t require redimensioning like arrays do.
;
Removing an object from within a collection is easier than it is within
an array.
The Drawing Namespace
;
When drawing, use the paint event of your form where appropriate.
www.syngress.com
Advanced Programming Concepts • Chapter 6
267
Understanding Free Threading
;
Consider synchronization of processes when creating threads.
;
Creating too many threads can negatively affect performance instead of
speeding things up.
Q:
I’m trying to use a namespace that is part of an assembly I know is installed on
my system, but it doesn’t show up in the Intellisense list.What should I do?
A:
If you know the name of the assembly (in this case we’ll say it’s
MHFUNCS.DLL, you can go to the Add References selection from the
Project menu and add MHFUNCS.DLL to the list.
Q:
I created a thread for every function in my application, and now it runs really
slow.Why didn’t free threading speed things up?
A:
You created too many threads. Consider creating threads for tasks that take a
long time to return control to the calling function.
Q:
I create graphics to draw a square on the screen, but when I Alt-Tab to my 
e-mail program and come back, the graphics are gone. What can I do to 
prevent this?
A:
Add code to draw the graphics (or redraw the graphics) in the form paint
event.This will cause the graphics to be redisplayed whenever the form needs
to be redrawn.
www.syngress.com
Frequently Asked Questions
The following Frequently Asked Questions, answered by the authors of this book,
are designed to both measure your understanding of the concepts presented in 
this chapter and to assist you with real-life implementation of these concepts. To
have  your  questions  about  this  chapter  answered  by  the  author,  browse  to
www.syngress.com/solutions and click on the “Ask the Author” form.
Documents you may be interested
Documents you may be interested