XML
:
:
Par
s
er
251
The 
Handlers
parameter is a reference to a hash. The keys of this hash are the
names of the events that the parser triggers while parsing the document and the val-
ues are references to subroutines which are called when the events are triggered.
The subroutines are assumed to be in the package defined by the 
Pkg
parameter.
Table 
A
.4 lists the various types of handlers. The first parameter to each of these
handlers is a reference to the Expat object which 
XML::Parser
creates to actually
handle the parsing. This object has a number of its own methods which you can use
to gain even more precise control over the parsing process. For details of these, see
the manual page for 
XML::Parser::Expat
.
Tree
The parse method will return a par
s
e tree repre
s
enting the document. Each node i
s
repre
-
s
ented by a reference to a two
-
element array. The fir
s
t element in the li
s
t i
s
either the tag 
name or “0” if it i
s
a text node. The 
s
econd element i
s
the content of the tag. The content i
s
a reference to another array. The fir
s
t element of thi
s
array i
s
a reference to a (po
s
s
ibly empty) 
ha
s
h containing attribute
/
value pair
s
. The re
s
t of thi
s
array i
s
made up of pair of element
s
repre
s
enting the type and content of the contained node
s
. See 
s
ection 9.2.3 for example
s
.
Ob
j
ect
s
The parse method return
s
a par
s
e tree repre
s
enting the ob
j
ect. Each node in the tree i
s
ha
s
h which ha
s
been ble
s
s
ed into an ob
j
ect. The ob
j
ect type name
s
are created by append
-
ing the type of each tag to the value of the Pkg parameter followed by ::. 
A
text node i
s
ble
s
s
ed into the cla
s
s
::Characters. Each node will have a kids attribute which will be a 
reference to an array containing each of the node’
s
children.
Stream
Thi
s
s
tyle work
s
in a manner 
s
imilar to the Subs 
s
tyle. Whenever the par
s
er find
s
particular 
X
ML ob
j
ect
s
, it call
s
variou
s
s
ubroutine
s
. The
s
s
ubroutine
s
are all a
s
s
umed to exi
s
t in the 
package denoted by the Pkg parameter. The 
s
ubroutine
s
are called StartDocument
StartTagEndTagTextPI, and EndDocument. The only one of the
s
e name
s
which 
doe
s
n’t make it obviou
s
when the 
s
ubroutine i
s
called i
s
P
I
. Thi
s
i
s
called when the par
s
er 
encounter
s
a proce
s
s
ing in
s
truction in the document.
Table A.4 XML::Parser Handler
s
Handler
When called
Subrou
t
ine parame
t
er
s
I
nit 
Before the par
s
er 
s
tart
s
proce
s
s
ing the document
Reference to the Expat ob
j
ect
Final 
A
fter the par
s
er fini
s
he
s
proce
s
s
ing the document
Reference to the Expat ob
j
ect
Start 
When the par
s
er find
s
the 
s
tart of a tag
Reference to the Expat ob
j
ect
Name of the tag found
Li
s
t of name
/
value pair
s
for 
the attribute
s
Table A.3 XML::Parser S
t
yle
s
(con
t
inued)
S
t
yle 
name
Re
s
ul
t
s
Pdf rotate page and save - rotate PDF page permanently in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Users to Change the Rotation Angle of PDF File Page Using C#
how to save a pdf after rotating pages; pdf reverse page order
Pdf rotate page and save - VB.NET PDF Page Rotate Library: rotate PDF page permanently in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
PDF Document Page Rotation in Visual Basic .NET Class Application
pdf rotate all pages; how to rotate one page in a pdf file
252
APPENDIX 
Module
s
reference
End 
When the par
s
er find
s
the end of a tag
Reference to the Expat Ob
j
ect
Char 
When the par
s
er find
s
character data
Reference to the Expat Ob
j
ect
The character 
s
tring
Proc 
When the par
s
er find
s
a proce
s
s
ing in
s
truction
Reference to the Expat Ob
j
ect
The name of the P
I
target
The P
I
data
Comment 
When the par
s
er find
s
a comment
Reference to the Expat Ob
j
ect
The comment data
CdataStart  When the par
s
er find
s
the 
s
tart of a CD
A
T
A
s
ection
Reference to the Expat Ob
j
ect
CdataEnd 
When the par
s
er find
s
the end of a CD
A
T
A
s
ection
Reference to the Expat Ob
j
ect
Default
When the par
s
er find
s
any data that doe
s
n’t have an 
a
s
s
igned handler
Reference to the Expat Ob
j
ect
The data 
s
tring
Unpar
s
ed
When the par
s
er find
s
an unpar
s
ed entity declaration Reference to the Expat Ob
j
ect
Name of the Entity
Ba
s
e URL to u
s
e when re
s
olving the 
addre
s
s
The 
s
y
s
tem 
I
D
The public 
I
D
Notation
When the par
s
er find
s
a notation declaration
Reference to the Expat Ob
j
ect
Name of the Notation
Ba
s
e URL to u
s
e when re
s
olving the 
addre
s
s
The 
s
y
s
tem 
I
D
The public 
I
D
ExternEnt
When the par
s
er find
s
an external entity declaration
Reference to the Expat Ob
j
ect.
Ba
s
e URL to u
s
e when re
s
olving the 
addre
s
s
The 
s
y
s
tem 
I
D.
The public 
I
D.
Entity
When the par
s
er find
s
an entity declaration
Reference to the Expat Ob
j
ect
Name of the Entity
The value of the Entity
The 
s
y
s
tem 
I
D
The public 
I
D
The notation for the entity
Element
When the par
s
er find
s
an element declaration
Reference to the Expat Ob
j
ect
Name of the Element
The Content Model
Table A.4 XML::Parser Handler
s
(con
t
inued)
Handler
When called
Subrou
t
ine parame
t
er
s
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
this RasterEdge XDoc.PDF SDK, you can simply delete a single page from a PDF document using VB.NET or remove any page from a PDF document and save to local
rotate a pdf page; pdf reverse page order preview
C# PDF Page Insert Library: insert pages into PDF file in C#.net
PDF document files by C# code, how to rotate PDF document page page to a specific location of current PDF file two empty page at 2 (previous to the third page).
rotate pages in pdf permanently; rotate pdf pages individually
254
B
E
s
s
ential Perl
C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
int pageIndex = 2; doc.UpdatePage(page, pageIndex); // Save the PDFDocument. String outputFilePath = Program.RootPath + "\\" Output.pdf"; doc.Save
how to rotate a page in pdf and save it; change orientation of pdf page
C# TIFF: How to Rotate TIFF Using C# Code in .NET Imaging
Convert Tiff to Jpeg Images. Convert Word, Excel, PowerPoint to Tiff. Convert PDF to Tiff. Move Tiff Page Position. Rotate a Tiff Page. Extract Tiff Pages.
rotate pages in pdf; pdf save rotated pages
Runn
i
ng Perl
255
Throughout this book I have assumed that you have a certain level of knowledge of
Perl and have tried to explain everything that I have used beyond that level. In this
appendix, I’ll give a brief overview of the level of Perl that I’ve been aiming at. Note
that this is not intended to be a complete introduction to Perl. For that you would
be better looking at Learning Perl by Randal Schwartz and Tom Christiansen
(O’Reilly); Element
s
of Programming with Perl by Andrew Johnson (Manning), or
Perl
:
The Programmer’
s
Companion by Nigel Chapman (Wiley).  
B.1
Running Perl
There are a number of ways to achieve most things in Perl and running Perl scripts
is no exception. In most cases you will write your Perl code using a text editor and
save it to a file. Many people like to give Perl program files the extension 
.pl
, but
this usually isn’t necessary.1 
Under most modern operating systems the command interpreter works out how
to run a script by parsing the first line of the script. If the first line looks like
#!/path/to/script/interpreter
then the program defined in this line will be called and your program file will be
passed to it as input. In the case of Perl, this means that your Perl program files
should usually start with the line
#!/usr/bin/perl
(although the exact path to the Perl interpreter will vary from system to system).
Having saved your program (and made the file executable if your operating sys-
tem requires it) you can run it by typing the name of the file on your command line;
e.g., if your script is in a file called 
myscript.pl
you can run it by typing
myscript.pl
at the command line.
An alternative would be to call the Perl interpreter directly, passing it the name of
your script like this:
perl myscript.pl
There are a number of command line options that you can either put on the com-
mand line or on the interpreter line in the program file. The most useful include:
1
I say “usually” because Windows uses the extension of the file to determine how to run it. Therefore, if
you’re developing Perl under Windows, you’ll need the .pl extension.
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
Description: Convert to DOCX/TIFF with specified zoom value and save it into stream. Parameters: zoomValue, The magnification of the original PDF page size.
rotate pdf pages and save; pdf rotate single page and save
C# Create PDF from Tiff Library to convert tif images to PDF in C#
Description: Convert to PDF with specified zoom value and save it into stream. DocumentType.PDF. zoomValue, The magnification of the original tiff page size.
rotate pdf page permanently; how to rotate pdf pages and save permanently
Var
i
able
s
and data type
s
257
$text = 'Hello World';
$count = 100;
$count = 'one hundred';
As you can see from the last two examples, the same scalar variable can contain both
text and numbers. If a variable holds a number and you use it in a context where
text is more useful, then Perl automatically makes the translation for you.
$number = 1;
$text = "$number ring to rule them all";
After running this code, 
$text
would contain the string “1 ring to rule them all”.
This also works the other way around.2
$number = '100';
$big_number = $number * 2; # $big_number now contains the value 200.
Notice that we have used two different types of quotes to delimit strings in the previ-
ous examples. If a string is in double quotes and it contains variable names, then
these variables are replaced by their values in the final string. If the string is in single
quotes then variable expansion does not take place. There are also a number of char-
acter sequences which are expanded to special characters within double quotes. These
include 
\n
for a newline character, 
\t
for a tab, and 
\x1F
for a character whose 
ASCII
code is 
1F
in hex. The full set of these escape sequences is in 
perldoc perldata
.
B.2.2 Arrays
An array contains an ordered list of scalar values. Once again the scalar values can be
of any type. Here are some examples of array assignment:
@empty = ();
@hobbits = ('Bilbo', 'Frodo', 'Merry');
@elves = ('Elrond', 'Legolas', 'Galadriel');
@people = (@hobbits, @elves);
($council, $fellow, $mirror) = @elves;
Notice that when assigning two arrays to a third (as in the fourth example above)
the result array is an array consisting of six elements, not an array with two elements
each of which is another array. Remember that the elements of an array can only be
scalars. The final example shows how you can use list assignment to extract data
from an array.
You can access the individual elements of an array using syntax like this:
$array[0]
2
You can always turn a number into a string, but it’s harder to turn most strings into numbers.
258
APPENDIX 
E
s
s
ent
i
al Perl
You can use this syntax to both get and set the value of an individual array element. 
$hero = $hobbits[0];
$hobbits[2] = 'Pippin';
Notice that we use 
$
rather than 
@
to denote this value. This is because a single ele-
ment of an array is a scalar value, not an array value.
If you assign a value to an element outside the current array index range, then
the array is automatically extended.
$hobbits[3] = 'Merry';
$hobbits[100] = 'Sam';
In that last example, all of the elements between 4 and 99 also magically sprang into
existence, and they all contain the value 
undef
.
You can use negative index values to access array values from the end of the array.
$gardener = $hobbits[-1];
# $gardener now contains 'Sam'
You can use an array 
s
lice to access a number of elements of an array at once. In this
case the result is another array.
@ring_holders = @hobbits[0, 1];
You can also use syntax indicating a range of values:
@ring_holders = @hobbits[0 .. 1];
or even another array which contains the indexes of the values that you need.
@index = (0, 1);
@ring_holders = @hobbits[@index];
You can combine different types of values within the same assignment.
@ring_holders = ('Smeagol', @hobbits[0, 1], 'Sam');
If you assign an array to a scalar value, you will get the number of elements in the array.
$count = @ring_holders;
# $count is now 4
There is a subtle difference between an array and a li
s
t (which is the set of values
that an array contains). Notably, assigning a list to a scalar will give you the value of
the rightmost element in the list. This often confuses newcomers to Perl.
$count = @ring_holders;
# As before, $count is 4
$last = ('Bilbo', 'Frodo'); # $last contains 'Frodo'
You can also get the index of the last element of an array using the syntax:
$#array
There are a number of functions that can be used to process a list.
260
APPENDIX 
E
s
s
ent
i
al Perl
Notice that using the arrow operator (
=>
) has two advantages over the comma. It
makes the assignment easier to understand and it automatically quotes the value to its
left. Also notice that hashes use different brackets to access individual elements and
because, like arrays, each element is a scalar, it is denoted with a 
$
rather than a 
%
.
You can access the complete set of keys in a hash using the function 
keys
, which
returns a list of the hash keys.
@ring_types = keys %rings; # @ring_types is now ('men', 'great',
'dwarves', 'elves')
There is a similar function for values.
@ring_counts = values %rings; # @ring_counts is now (9, 1, 7, 3)
Notice that neither 
keys
nor 
values
is guaranteed to return the data in the same
order as it was added to the hash. They are, however, guaranteed to return the
data in the same order (assuming that you haven’t changed the hash between the
two calls). 
There is a third function in this set called 
each
which returns a two-element list
containing one key from the hash together with its associated value. Subsequent
calls to 
each
will return another key
/
value pair until all pairs have been returned, at
which point an empty array is returned. This allows you to write code like this:
while ( ($type, $count) = each %rings) ) {
print "$count $type ring(s)\n";
}
You can also call 
each
in a scalar context in which case it iterates over the keys in
the hash.
The most efficient way to get the number of key
/
value pairs in a hash is to assign
the return value from either 
keys
or 
values
to a scalar variable.3
$ring_types = keys %rings;
# $ring_types is now 4
You can access parts of a hash using a ha
s
s
lice which is very similar to the array slice
discussed earlier.
@minor_rings_types = ('elves', 'dwarves', 'men');
@minor_rings{@minor_rings_types} = @rings{@minor_rings_types};
# creates a new hash called %minor rings containing
#
elves => 3
#
dwarves => 7
#
men => 9
3
Note that this example also demonstrates that you can have variables of different types with the same
name. The scalar 
$ring_types
in this example has no connection at all with the array 
@ring_types
in the
earlier example.
Documents you may be interested
Documents you may be interested