display pdf in asp.net page : Change orientation of pdf page application Library tool html asp.net web page online dmp21-part1829

XML
:
:
DOM
191
of the way the parser works, any particular sequence of character data can be split up
and processed in a number of calls to this handler. This is why we build up the
string and print it out only when we find the closing element tag. This would be
even more important if we were applying some kind of formatting to the text before
displaying it.
10.3
XML
:
:
DOM
As we have seen, 
XML::Parser
is a very powerful and flexible module, and one that
can be used to handle just about any 
XML
processing requirement. However, it’s
well known that one of the Perl mottoes is that there’s more than one way to do it,
and one of the cardinal virtues of a programmer is laziness.5 It should not therefore
come as a surprise that there are many other 
XML
parser modules available from the
CPAN
. Some of these are specialized to deal with 
XML
that conforms to a particular
DTD
(we will look at one of these a bit later), but many others present yet more
ways to handle general 
XML
parsing tasks. Probably the most popular of these is
XML::DOM
. This is a tree-based parser which returns a radically different view of an
XML
document.
XML::DOM
implements the Document Object Model. 
DOM
is a way to access
arbitrary parts of an 
XML
document. 
DOM
has been defined by the World Wide
Web Consortium (
W3C
), and is rapidly becoming a standard method to parse and
access 
XML
documents.
XML::DOM
is a subclass of 
XML::Parser
, so all 
XML::Parser
methods are still
available, but on top of these methods, 
XML::DOM
implements a whole new set of
methods which allow you to walk the document tree. 
10.3.1 Example
:
parsing 
XML
using 
XML
:
:
DOM
As an example of 
XML::DOM
in use, here is our usual document structure script rewrit-
ten to use it.
use strict;
use XML::DOM;
my $p = XML::DOM::Parser->new;
my $doc = $p->parsefile(shift);
my $level = 0;
process_node($doc->getFirstChild);
sub process_node {
5
The other two being impatience and hubris, according to Larry Wall.
Change orientation of pdf page - 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#
rotate all pages in pdf and save; how to rotate one page in a pdf file
Change orientation of pdf page - 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
save pdf rotated pages; rotate all pages in pdf file
192
CHAPTER 
XML
my ($node) = @_;
my $ind = ' ' x $level;;
my $nodeType = $node->getNodeType;
if ($nodeType == ELEMENT_NODE) {
my $type = $node->getTagName;
my $attrs = $node->getAttributes;
print $ind, $type, ' [';
my @attrs;
foreach (0 .. $attrs->getLength - 1) {
my $attr = $attrs->item($_);
push @attrs, $attr->getNodeName . ': ' . $attr->getValue;
}
print join (', ', @attrs);
print "]\n";
my $nodelist = $node->getChildNodes;
++$level;
for (0 .. $nodelist->getLength - 1) {
process_node($nodelist->item($_));
}
--$level;
} elsif ($nodeType == TEXT_NODE) {
my $content = $node->getData;
$content =~ s/\n/ /g;
$content =~ s/^\s+//;
$content =~ s/\s+$//;
print $ind, $content, "\n" if $content =~ /\S/;
}
}
A lot of the structure of this program will be very familiar by now, so we will look at
only the differences between this version and the Tree style version.
You should first notice that the value returned by 
parsefile
is a reference to an
object that represents the whole document. To get the single element which con-
tains the whole document, we need to call this object’s 
getFirstChild
method.
We can then pass this reference to the 
process_node
function.
Within the 
process_node
function we still do exactly the same things that we
have been doing in previous versions of this script; it is only the way that we access
the data which is different. To work out the type of the current node, we call its
getNodeType
method. This returns an integer defining the type. The 
XML::DOM
module exports constants which make these values easier to interpret. In this
VB Imaging - Micro QR Code Generation Guide
settings, like image size, rotation/orientation, data mode You can change the location by setting X and PDFDocument = New PDFDocument("C:\\Sample.pdf") Dim page
permanently rotate pdf pages; pdf reverse page order online
VB.NET Image: VB Code to Read and Scan Linear & 2D Barcodes
barcode from a certain image and document page area 1D and 2D barcodes from VB project PDF & MS Detect and report barcodes at any orientation and rotation angle
how to rotate all pages in pdf in preview; rotate individual pages in pdf reader
Spec
i
al
i
zed par
s
er
s
—XML
:
:
RSS
193
simplified example we only check for 
ELEMENT_NODE
or 
TEXT_NODE
, but there are a
number of other values listed in the module’s documentation.
Having established that we are dealing with an element node, we get the tag’s
name using the 
getTagName
method and a reference to its list of attributes using the
getAttributes
method. The value returned by 
getAttributes
is a reference to a
NodeList object. We can get the number of nodes in the list with the 
getLength
method and retrieve each node in the list in turn, using the 
item
method. For each of
the nodes returned we can get the attribute name and value using the 
getNodeName
and 
getValue
methods, respectively.
Having retrieved and displayed the node attributes we can deal with the
node’s children. The 
getChildNodes
method returns a NodeList of child nodes
which we can iterate over (using 
getLength
and 
item
again), recursively passing
each node to 
process_node
.
If the node that we are dealing with is a text node, we get the actual text using the
getData
method, and process the text in exactly the same way we have before.
This description has barely scratched the surface of 
XML::DOM
, but it is some-
thing that you will definitely come across if you process 
XML
data.
10.4
Specialized parsers—XML
:
:
RSS
Some of the subclasses of 
XML::Parser
are specialized to deal with particular types
of 
XML
documents, i.e., documents which conform to a particular 
DTD
. As an
example we will look at one of the most popular of these parsers, 
XML::RSS
.
10.4.1 Wha
t
is RSS?
As you can probably guess, 
XML::RSS
parses rich site summary (
RSS)
files. 
T
he RSS
format has become very popular among web sites that want to exchange ideas
about the information they are currently displaying. This is most often used by
news-based sites, as they can create an 
RSS
file containing their current headlines
and other sites can grab the file and create a list of the headlines on a web page. 
Quite a community of 
RSS
-swapping has built up around these files. My Netscape
and Slashdot are two of the biggest sites using this technology. Chris Nandor has
built a web site called My Portal which demonstrates a web page which users can
configure to show news stories from the sources which interest them.
10.4.2 A sample 
RSS
file
Here is an example of an 
RSS
file for a fictional news site called Dave’s news.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rss PUBLIC "//Netscape Communications//DTD RSS 0.91//EN"
Generate Barcodes in Web Image Viewer| Online Tutorials
Change Barcode Properties. Select "Orientation" to set barcode rotation angle; Select "Width" and RasterEdge OCR Engine; PDF Reading; Encode & Decode JBIG 2 Files
how to rotate a pdf page in reader; rotate all pages in pdf
C# Word - Document Pages Processing in C#.NET
Set Page Orientation in Word Document. You can set page orientations of all pages in document. We provide two type for pages orientation
rotate pdf page few degrees; rotate one page in pdf reader
194
CHAPTER 
XML
"http://my.netscape.com/publish/formats/rss-0.91.dtd">
<rss version="0.91">
<channel>
<title>Dave's News</title>
<link>http://daves.news</link>
<description>All the news that's unfit to print!</description>
<language>en</language>
<pubDate>Wed May 10 21:06:38 2000</pubDate>
<managingEditor>ed@daves.news</managingEditor>
<webMaster>webmaster@daves.news</webMaster>
<image>
<title>Dave's News</title>
<url>http://daves.news/images/logo.gif</url>
<link>http://daves.news</link>
</image>
<item>
<title>Data Munging Book tops best sellers list</title>
<link>http://daves.news/cgi-bin/read.pl?id=1</link>
</item>
<item>
<title>Microsoft abandons ASP for Perl</title>
<link>http://daves.news/cgi-bin/read.pl?id=2</link>
</item>
<item>
<title>Gates offers job to Torvalds</title>
<link>http://daves.news/cgi-bin/read.pl?id=3</link>
</item>
</channel>
</rss>
I hope you can see that the structure is very simple. The first thing to notice is that
because the file could potentially be processed using a validating parser, it needs a
reference to a 
DOCTYPE
(or 
DTD
). This is given on the second line and points to
version 0.91 of the 
DTD
(which, you’ll notice, was defined by Netscape). After the
DOCTYPE
definition, the next line opens the top-level element, which is called
<rss>
. Within one 
RSS
file you can define multiple channels; however, most RSS
files will contain only one channel.
With the channel element you can define a number of data items which define
the channel. Only a subset of the possible items is used in this example. The next
complex data item is the 
<image>
element. This element defines an image which a
client program can display to identify your channel. You can define a 
URL
to fetch
the image from, a title, and a link. It is obviously up to the client program how this
C# Imaging - Micro QR Code Generation Guide
settings, like image size, rotation/orientation, data mode You can change the location by setting new PDFDocument(inputDirectory + "Sample.pdf"); BasePage page
rotate pdf pages on ipad; pdf rotate single page reader
C# Imaging - Read PDF 417 Barcode in C#.NET
Read PDF 417 in entire PDF, Word, Excel or PPTX page region with C# code. C# code to scan multiple PDF 417 barcodes in any orientation.
rotate a pdf page; how to rotate pdf pages and save permanently
Spec
i
al
i
zed par
s
er
s
—XML
:
:
RSS
195
information is used, but if the channel was being displayed in a browser, it might be
useful to display the image as a hot link to the given 
URL
and to use the title as the
ALT
text for the image.
After the image element comes a list of the items which the channel contains.
Once more, the exact use of this information is up to the client application, but
browsers often display the title as a hot link to the given 
URL
. Notice that the 
URL
s
in the list of items are to individual news stories, whereas the earlier 
URL
s were to
the main page of the site.
10.4.3 Example
:
crea
t
ing an 
RSS
file wi
t
XML
:
:
RSS
XML::RSS
differs from other 
XML
parsers that we have seen as it can also be used to
create an 
RSS
file. Here is the script that I used to create the file given above:
#!/usr/bin/perl -w
use strict;
use XML::RSS;
my $rss = XML::RSS->new;
$rss->channel(title => "Dave's News",
link => 'http://daves.news',
language => 'en',
description => "All the news that's unfit to print!",
pubDate => scalar localtime,
managingEditor => 'ed@daves.news',
webMaster => 'webmaster@daves.news');
$rss->image(title => "Dave's News",
url => 'http://daves.news/images/logo.gif',
link => 'http://daves.news');
$rss->add_item(title=>'Data Munging Book tops best sellers list',
link=>'http://daves.news/cgi-bin/read.pl?id=1');
$rss->add_item(title=>'Microsoft abandons ASP for Perl',
link=>'http://daves.news/cgi-bin/read.pl?id=2');
$rss->add_item(title=>'Gates offers job to Torvalds',
link=>'http://daves.news/cgi-bin/read.pl?id=3');
$rss->save('news.rss');
As you can see, 
XML::RSS
makes the creation of 
RSS
files almost trivial. You create
an 
RSS
object using the class’s 
new
method and then add a channel using the
channel
method. The named parameters to the 
channel
method are the various
subelements of the 
<channel>
element in the 
RSS
file. I’m only using a subset here.
The full set is described in the documentation for the 
XML::RSS
which you can
VB.NET Image: How to Create Visual Basic .NET Windows Image Viewer
different image and document formats, including png, jpeg, gif, tiff, bmp, PDF, and Word Apart from that, you are entitled to change the orientation of an
reverse page order pdf online; how to permanently rotate pdf pages
VB.NET Image: Read and Scan Codabar on Image and Document within
Read and scan Codabar barcode from PDF document within on scanned Codabar, including location, orientation, and even format, you only need to change the sample
how to rotate pdf pages and save; rotate pages in pdf online
196
CHAPTER 
XML
access by typing 
perldoc
XML::RSS
from your command line once you have
installed the module.
The 
image
method is used to add image information to the 
RSS
object. Once
more, the various subelements of the 
<image>
element are passed as named param-
eters to the method. For each item that you wish to add to the 
RSS
file, you call the
add_item
method. Finally, to write the 
RSS
object to a file you use the 
save
method. You could also use the 
as_string
method, which will return the 
XML
that your 
RSS
object generates.
10.4.4 Example
:
parsing an 
RSS
file wi
t
XML
:
:
RSS
Interpreting an 
RSS
file using 
XML::RSS
is just as simple. Here is a script which dis-
plays some of the more useful data from an 
RSS
file.
use strict;
use XML::RSS;
my $rss = XML::RSS->new;
$rss->parsefile(shift);
print $rss->channel('title'), "\n";
print $rss->channel('description'), "\n";
print $rss->channel('link'), "\n";
print 'Published: ', $rss->channel('pubDate'), "\n";
print 'Editor: ', $rss->channel('managingEditor'), "\n\n";
print "Items:\n";
foreach (@{$rss->items}) {
print $_->{title}, "\n\t<", $_->{link}, ">\n";
}
The file is parsed using the 
parsefile
method (which 
XML::RSS
overrides from its
parent 
XML::Parser
). This method adds data structures modeling the 
RSS
file to
the 
RSS
parser object. This data can be accessed using various accessor methods.
The 
channel
method gives you access to the various parts of the 
<channel>
ele-
ment, and the 
items
method returns a list of the items in the file. Each element in
the items list is a reference to a hash containing the various attributes of one item
from the file.
If we run this script on our sample 
RSS
file, here is the output that we get.
Dave's News
All the news that's unfit to print!
http://daves.news
Published: Wed May 10 21:06:38 2000
Editor: ed@daves.news
Items:
Produc
i
ng d
i
fferent document format
s
197
Data Munging Book tops best sellers list
<http://daves.news/cgi-bin/read.pl?id=1>
Microsoft abandons ASP for Perl
<http://daves.news/cgi-bin/read.pl?id=2>
Gates offers job to Torvalds
<http://daves.news/cgi-bin/read.pl?id=3>
This example script only displays very basic information about the 
RSS
file, but it
should be simple to expand it to display more details and to produce an 
HTML
page
instead of text. There are a number of example scripts in the 
XML::RSS
distribution
which you can use as a basis for your scripts.
10.5
Producing differen
t
documen
t
forma
t
s
One of the best uses of 
XML
is producing different outputs from the same input
file. As an example of this kind of processing, in this section we will look at produc-
ing a number of different document formats from a single 
XML
document. The
example that we will look at is the documentation for Perl modules. Traditionally,
when a Perl module is released to the 
CPAN
the accompanying documentation is
written in plain old documentation (
POD
). 
POD
is a very simple markup language
which can be embedded within Perl code. The Perl interpreter knows to ignore it,
and there are a number of documentation tools which can be used to extract the
POD
from a Perl script and present it in a number of formats.6
In this example we will put the documentation for a Perl module in an 
XML
file
and use a Perl script to convert this 
XML
document to 
POD
HTML
, or plain text.
10.5.1 Sample 
XML
inpu
t
file
Here is an example of the 
XML
document we will use.
<?xml version="1.0" encoding="UTF-8"?>
<README>
<NAME>Test README File</NAME>
<SYNOPSIS>
This is a summary of the file.
It should appear in PRE tags
</SYNOPSIS>
<DESCRIPTION>
<TEXT>This is the full description of the file</TEXT>
<SUBSECTION>
<HEAD>Subsection Title</HEAD>
<TEXT>Subsection text</TEXT>
6
You can find out a lot more about POD by reading the perlpod manual page.
198
CHAPTER 
XML
</SUBSECTION>
<SUBSECTION>
<HEAD>Another Subsection Title</HEAD>
<TEXT>More Subsection text</TEXT>
<LIST TYPE='bullet'>
<ITEM>List item 1</ITEM>
<ITEM>List item 2</ITEM>
</LIST>
</SUBSECTION>
</DESCRIPTION>
<AUTHOR>
<ANAME>Dave Cross</ANAME>
<EMAIL>dave@mag-sol.com</EMAIL>
</AUTHOR>
<SEE_ALSO>
<LIST TYPE='bullet'>
<ITEM>Something</ITEM>
<ITEM>Something else</ITEM>
</LIST>
</SEE_ALSO>
</README>
This file supports most of the headings that you will see in a Perl module’s 
README
file. 
10.5.2
XML
documen
t
t
ransforma
t
ion scrip
t
Here is the script that we will use to transform it into other formats.
1: #!/usr/bin/perl -w
2:
3: use strict;
4:
5: use XML::Parser;
6: use Getopt::Std;
7: use Text::Wrap;
8:
9: my %formats = (h => {name => 'html'},
10:
p => {name => 'pod'},
11:
t => {name => 'text'});
12:
13: my %opts;
14: (getopts('f:', \%opts) && @ARGV)
15:
|| die "usage: format_xml.pl -f h|p|t xml_file\n";
16:
17: die "Invalid format: $opts{f}\n" unless exists $formats{$opts{f}};
18:
19: warn "Formatting file as $formats{$opts{f}}->{name}\n";
20:
Produc
i
ng d
i
fferent document format
s
199
21: my $p = XML::Parser->new(Style => 'Tree');
22: my $tree = $p->parsefile(shift);
23:
24: my $level = 0;
25: my $ind = '';
26: my $head = 1;
27:
28: top($tree);
29:
30: process_node(@$tree);
31:
32: bot();
33:
34: sub process_node {
35:
my ($type, $content) = @_;
36:
37:
$ind = ' ' x $level;
38:
39:
if ($type) {
40:
41:
local $_ = $type;
42:
43:
my $attrs = shift @$content;
44:
45:
/^NAME$/ && name($content);
46:
/^SYNOPSIS$/ && synopsis($content);
47:
/^DESCRIPTION$/ && description();
48:
/^TEXT$/ && text($content);
49:
/^CODE$/ && code($content);
50:
/^HEAD$/ && head($content);
51:
/^LIST$/ && do {list($attrs, $content); @$content = ()};
52:
/^AUTHOR$/ && author();
53:
/^ANAME$/ && aname($content);
54:
/^EMAIL$/ && email($content);
55:
/^SEE_ALSO$/ && see_also($content);
56:
57:
while (my @node = splice @$content, 0, 2) {
58:
++$level;
59:
++$head if $type eq 'SUBSECTION';
60:
process_node(@node);
61:
--$head if $type eq 'SUBSECTION';
62:
--$level;
63:
}
64:
}
65: }
66:
67: sub top {
68:
$tree = shift;
69:
70:
if ($opts{f} eq 'h') {
71:
print "<html>\n";
200
CHAPTER 
XML
72:
print "<head>\n";
73:
print "<title>$tree->[1]->[4]->[2]</title>\n";
74:
print "</head>\n<body>\n";
75:
} elsif ($opts{f} eq 'p') {
76:
print "=pod\n\n";
77:
} elsif ($opts{f} eq 't') {
78:
print "\n", $tree->[1]->[4]->[2], "\n";
79:
print '-' x length($tree->[1]->[4]->[2]), "\n\n";
80:
}
81: }
82:
83: sub bot {
84:
if ($opts{f} eq 'h') {
85:
print "</body>\n</html>\n";
86:
} elsif ($opts{f} eq 'p') {
87:
print "=cut\n\n";
88:
} elsif ($opts{f} eq 't') {
89:
# do nothing
90:
}
91: }
92:
93: sub name {
94:
my $content = shift;
95:
96:
if ($opts{f} eq 'h') {
97:
print "<h1>NAME</h1>\n";
98:
print "<p>$content->[1]</p>\n"
99:
} elsif ($opts{f} eq 'p') {
100:
print "=head1 NAME\n\n";
101:
print "$content->[1]\n\n";
102:
} elsif ($opts{f} eq 't') {
103:
print "NAME\n\n";
104:
print $ind, "$content->[1]\n\n";
105:
}
106: }
107:
108: sub synopsis {
109:
my $content = shift;
110:
111:
if ($opts{f} eq 'h') {
112:
print "<h1>SYNOPSIS</h1>\n";
113:
print "<pre>$content->[1]</pre>\n"
114:
} elsif ($opts{f} eq 'p') {
115:
print "=head1 SYNOPSIS\n\n";
116:
print "$content->[1]\n";
117:
} elsif ($opts{f} eq 't') {
118:
print "SYNOPSIS\n";
119:
print "$content->[1]\n";
120:
}
121: }
122:
Documents you may be interested
Documents you may be interested