<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Ozzie Perez</title>
	<atom:link href="http://ozzieperez.net/blog/index.php?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://ozzieperez.net/blog</link>
	<description>Mostly tech notes...</description>
	<pubDate>Thu, 29 Sep 2011 01:27:51 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>iPhone Development using only jQuery</title>
		<link>http://ozzieperez.net/blog/?p=296</link>
		<comments>http://ozzieperez.net/blog/?p=296#comments</comments>
		<pubDate>Fri, 23 Apr 2010 17:49:57 +0000</pubDate>
		<dc:creator>Ozzie Perez</dc:creator>
		
		<category><![CDATA[ASP.Net]]></category>

		<guid isPermaLink="false">http://ozzieperez.net/blog/?p=296</guid>
		<description><![CDATA[http://www.jqtouch.com/
]]></description>
			<content:encoded><![CDATA[<p>http://www.jqtouch.com/</p>
]]></content:encoded>
			<wfw:commentRss>http://ozzieperez.net/blog/?feed=rss2&amp;p=296</wfw:commentRss>
		</item>
		<item>
		<title>Character Encoding for HTML and XML</title>
		<link>http://ozzieperez.net/blog/?p=294</link>
		<comments>http://ozzieperez.net/blog/?p=294#comments</comments>
		<pubDate>Fri, 16 Apr 2010 15:40:45 +0000</pubDate>
		<dc:creator>Ozzie Perez</dc:creator>
		
		<category><![CDATA[ASP.Net]]></category>

		<guid isPermaLink="false">http://ozzieperez.net/blog/?p=294</guid>
		<description><![CDATA[HTML
&#60;meta http-equiv="Content-Type"  content="text/html;charset=utf-8" &#62;
XHTML (note the slash at the end)
&#60;meta http-equiv="Content-Type"  content="text/html;charset=utf-8" /&#62;
XML
&#60;?xml version="1.0" encoding="utf-8" ?&#62; 
Reference
http://www.w3.org/International/O-charset
]]></description>
			<content:encoded><![CDATA[<p>HTML<br />
<code>&lt;meta http-equiv="Content-Type"  content="text/html;charset=utf-8" &gt;</code></p>
<p>XHTML<code><span style="color: #808080;"> (note the slash at the end)</span></code><br />
<code>&lt;meta http-equiv="Content-Type"  content="text/html;charset=utf-8" /&gt;</code></p>
<p>XML<br />
<code>&lt;?xml version="1.0" encoding="utf-8" ?&gt; </code></p>
<p>Reference<br />
<a href="http://www.w3.org/International/O-charset">http://www.w3.org/International/O-charset</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ozzieperez.net/blog/?feed=rss2&amp;p=294</wfw:commentRss>
		</item>
		<item>
		<title>ASP.Net URL/Request Paths</title>
		<link>http://ozzieperez.net/blog/?p=287</link>
		<comments>http://ozzieperez.net/blog/?p=287#comments</comments>
		<pubDate>Tue, 23 Mar 2010 16:52:46 +0000</pubDate>
		<dc:creator>Ozzie Perez</dc:creator>
		
		<category><![CDATA[ASP.Net]]></category>

		<guid isPermaLink="false">http://ozzieperez.net/blog/?p=287</guid>
		<description><![CDATA[Here&#8217;s a good article on the different properties:
http://www.xcess.info/request_url_parameters_details_asp_net_aen.aspx
Request.Url
Full URL : http://localhost:2000/virtual_dir/myrep/page.aspx?q=qvalue



Request.ApplicationPath :
/virtual_dir


Request.CurrentExecutionFilePath :
/virtual_dir/myrep/page.aspx


Request.FilePath :
/virtual_dir/myrep/page.aspx


Request.Path :
/virtual_dir/myrep/page.aspx


Request.PhysicalApplicationPath :
d:\Inetpub\wwwroot\Websitename\virtual_dir\


Request.QueryString :
/virtual_dir/myrep/page.aspx?q=qvalue


Request.Url.AbsolutePath :
/virtual_dir/myrep/page.aspx


Request.Url.AbsoluteUri :
http://localhost:2000/virtual_dir/myrep/page.aspx?q=qvalue


Request.Url.Host :
localhost


Request.Url.Authority :
localhost:2000


Request.Url.LocalPath :
/virtual_dir/myrep/page.aspx


Request.Url.PathAndQuery :
/virtual_dir/myrep/page.aspx?q=qvalue


Request.Url.Port :
2000


Request.Url.Query :
?q=qvalue


Request.Url.Scheme :
http


Request.Url.Segments :
/



virtual_dir/



myrep/



page.aspx



]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a good article on the different properties:</p>
<p><a href="http://www.xcess.info/request_url_parameters_details_asp_net_aen.aspx">http://www.xcess.info/request_url_parameters_details_asp_net_aen.aspx</a></p>
<p><span style="font-size: x-small;"><strong><span style="font-size: small;">Request.Url</span><br />
<em>Full URL :</em> http://localhost:2000/virtual_dir/myrep/page.aspx?q=qvalue</strong></span></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="label_cem">Request.ApplicationPath :</td>
<td>/virtual_dir</td>
</tr>
<tr>
<td class="label_cem">Request.CurrentExecutionFilePath :</td>
<td>/virtual_dir/myrep/page.aspx</td>
</tr>
<tr>
<td class="label_cem">Request.FilePath :</td>
<td>/virtual_dir/myrep/page.aspx</td>
</tr>
<tr>
<td class="label_cem">Request.Path :</td>
<td>/virtual_dir/myrep/page.aspx</td>
</tr>
<tr>
<td class="label_cem">Request.PhysicalApplicationPath :</td>
<td>d:\Inetpub\wwwroot\Websitename\virtual_dir\</td>
</tr>
<tr>
<td class="label_cem">Request.QueryString :</td>
<td>/virtual_dir/myrep/page.aspx?q=qvalue</td>
</tr>
<tr>
<td class="label_cem">Request.Url.AbsolutePath :</td>
<td>/virtual_dir/myrep/page.aspx</td>
</tr>
<tr>
<td class="label_cem">Request.Url.AbsoluteUri :</td>
<td>http://localhost:2000/virtual_dir/myrep/page.aspx?q=qvalue</td>
</tr>
<tr>
<td class="label_cem">Request.Url.Host :</td>
<td>localhost</td>
</tr>
<tr>
<td class="label_cem">Request.Url.Authority :</td>
<td>localhost:2000</td>
</tr>
<tr>
<td class="label_cem">Request.Url.LocalPath :</td>
<td>/virtual_dir/myrep/page.aspx</td>
</tr>
<tr>
<td class="label_cem">Request.Url.PathAndQuery :</td>
<td>/virtual_dir/myrep/page.aspx?q=qvalue</td>
</tr>
<tr>
<td class="label_cem">Request.Url.Port :</td>
<td>2000</td>
</tr>
<tr>
<td class="label_cem">Request.Url.Query :</td>
<td>?q=qvalue</td>
</tr>
<tr>
<td class="label_cem">Request.Url.Scheme :</td>
<td>http</td>
</tr>
<tr>
<td class="label_cem">Request.Url.Segments :</td>
<td>/</td>
</tr>
<tr>
<td class="label_cem"></td>
<td>virtual_dir/</td>
</tr>
<tr>
<td class="label_cem"></td>
<td>myrep/</td>
</tr>
<tr>
<td class="label_cem"></td>
<td>page.aspx</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://ozzieperez.net/blog/?feed=rss2&amp;p=287</wfw:commentRss>
		</item>
		<item>
		<title>jQuery Modal Quick Example</title>
		<link>http://ozzieperez.net/blog/?p=281</link>
		<comments>http://ozzieperez.net/blog/?p=281#comments</comments>
		<pubDate>Fri, 12 Mar 2010 14:26:09 +0000</pubDate>
		<dc:creator>Ozzie Perez</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://ozzieperez.net/blog/?p=281</guid>
		<description><![CDATA[&#60;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&#62;
&#60;html xmlns="http://www.w3.org/1999/xhtml" &#62;
&#60;head&#62;
    &#60;title&#62;Untitled Page&#60;/title&#62;
    &#60;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"&#62;&#60;/script&#62;
    &#60;script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"&#62;&#60;/script&#62;
    &#60;link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.0/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" /&#62;   

    &#60;script type="text/javascript"&#62;

        $(document).ready(function() {

    [...]]]></description>
			<content:encoded><![CDATA[<pre class="csharpcode"><span class="kwrd">&lt;!</span><span class="html">DOCTYPE</span> <span class="attr">html</span> <span class="attr">PUBLIC</span> <span class="kwrd">"-//W3C//DTD XHTML 1.0 Transitional//EN"</span> <span class="kwrd">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">html</span> <span class="attr">xmlns</span><span class="kwrd">="http://www.w3.org/1999/xhtml"</span> <span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">head</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">title</span><span class="kwrd">&gt;</span>Untitled Page<span class="kwrd">&lt;/</span><span class="html">title</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">script</span> <span class="attr">src</span><span class="kwrd">="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"</span> <span class="attr">type</span><span class="kwrd">="text/javascript"</span><span class="kwrd">&gt;&lt;/</span><span class="html">script</span><span class="kwrd">&gt;</span>
    &lt;script src=<span class="str">"http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"</span> type=<span class="str">"text/javascript"</span>&gt;&lt;/script&gt;
    &lt;link href=<span class="str">"http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.0/themes/base/jquery-ui.css"</span> rel=<span class="str">"stylesheet"</span> type=<span class="str">"text/css"</span> /&gt;   

    &lt;script type=<span class="str">"text/javascript"</span>&gt;

        $(document).ready(<span class="kwrd">function</span>() {

            $(<span class="str">"#dialog"</span>).dialog({
              autoOpen: <span class="kwrd">false</span>,
              modal: <span class="kwrd">true</span>,
              resizable:<span class="kwrd">false</span>,
              overlay: {
                  backgroundColor: <span class="str">'#000'</span>,
                  opacity: 0.5
              },
              buttons: {
                      <span class="str">"Cancel"</span>: <span class="kwrd">function</span>() {
                          $(<span class="kwrd">this</span>).dialog(<span class="str">"close"</span>);
                      },
                      <span class="str">"No"</span>: <span class="kwrd">function</span>() {
                          <span class="rem">//your javascript here</span>
                          $(<span class="kwrd">this</span>).dialog(<span class="str">"close"</span>);
                      },
                      <span class="str">"Yes"</span>: <span class="kwrd">function</span>() {
                          <span class="rem">//your javascript here</span>
                          window.location.href = <span class="str">"http://google.com"</span>; <span class="rem">//redirect example</span>
                      }
                  }
            });

            $(<span class="str">"#mybutton"</span>).click(<span class="kwrd">function</span>() {
              $(<span class="str">"#dialog"</span>).dialog(<span class="str">"open"</span>);
            });

      });

    <span class="kwrd">&lt;/</span><span class="html">script</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;/</span><span class="html">head</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">body</span><span class="kwrd">&gt;</span>

    <span class="kwrd">&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">="button"</span> <span class="attr">id</span><span class="kwrd">="mybutton"</span> <span class="attr">class</span><span class="kwrd">="myclass"</span> <span class="attr">value</span><span class="kwrd">="Click Me"</span> <span class="kwrd">/&gt;</span>

    <span class="kwrd">&lt;</span><span class="html">div</span> <span class="attr">id</span><span class="kwrd">="dialog"</span> <span class="attr">title</span><span class="kwrd">="Hola Ivy!"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">p</span><span class="kwrd">&gt;</span>
            Are you sure?
       <span class="kwrd">&lt;/</span><span class="html">p</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">div</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;/</span><span class="html">body</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">html</span><span class="kwrd">&gt;</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://ozzieperez.net/blog/?feed=rss2&amp;p=281</wfw:commentRss>
		</item>
		<item>
		<title>Adding an IP address to your server&#8217;s NIC in Windows Server 2008</title>
		<link>http://ozzieperez.net/blog/?p=279</link>
		<comments>http://ozzieperez.net/blog/?p=279#comments</comments>
		<pubDate>Thu, 11 Mar 2010 22:41:19 +0000</pubDate>
		<dc:creator>Ozzie Perez</dc:creator>
		
		<category><![CDATA[Whatever]]></category>

		<guid isPermaLink="false">http://ozzieperez.net/blog/?p=279</guid>
		<description><![CDATA[Assuming you have the IP and the subnet mask, you can add it with the following steps:

Open up you command prompt (cmd.exe)
type &#8216;netsh interface ipv4 &#8216;
type:  add address &#8220;Local Area Connection&#8221; [ip address] [subnet mask] 

That&#8217;s it.
]]></description>
			<content:encoded><![CDATA[<p>Assuming you have the IP and the subnet mask, you can add it with the following steps:</p>
<ul>
<li>Open up you command prompt (cmd.exe)</li>
<li>type &#8216;<em>netsh interface ipv4 </em>&#8216;</li>
<li>type:  <em>add address &#8220;Local Area Connection&#8221; [ip address] [subnet mask] </em></li>
</ul>
<p>That&#8217;s it.</p>
]]></content:encoded>
			<wfw:commentRss>http://ozzieperez.net/blog/?feed=rss2&amp;p=279</wfw:commentRss>
		</item>
		<item>
		<title>Generate PDF files using C# and FO.Net</title>
		<link>http://ozzieperez.net/blog/?p=267</link>
		<comments>http://ozzieperez.net/blog/?p=267#comments</comments>
		<pubDate>Wed, 10 Mar 2010 13:55:49 +0000</pubDate>
		<dc:creator>Ozzie Perez</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://ozzieperez.net/blog/?p=267</guid>
		<description><![CDATA[Given that you have an XSL-FO template ready to go, it&#8217;s pretty straight-forward to generate a PDF using FO.Net.
It&#8217;s not easy to create an XSL-FO from scratch, and I wouldn&#8217;t care to. There are programs that can convert your HTML into XSL-FO, though they usually cost a lot of money. You can create one on [...]]]></description>
			<content:encoded><![CDATA[<p>Given that you have an XSL-FO template ready to go, it&#8217;s pretty straight-forward to generate a PDF using <a href="http://www.codeplex.com/fonet">FO.Net</a>.</p>
<p>It&#8217;s not easy to create an XSL-FO from scratch, and I wouldn&#8217;t care to. There are programs that can convert your HTML into XSL-FO, though they usually cost a lot of money. You can create one on the cheap using <a href="http://html2fo.sourceforge.net/">HTML2FO</a> though. The page shows the HTML tags that it supports. Run the application on the commandline and pass two parameters like this:</p>
<p><strong><code>HTML2FO.exe  <em>&lt;inputHtmlFile&gt;.html  &lt;outputFileName&gt;.fo</em></code></strong></p>
<p>You can then use that output file to render a PDF using Fo.Net. I created a wrapper that takes in an XSL-FO file and an XML file and returns a PDF.</p>
<h3><!-- code formatted by http://manoli.net/csharpformat/ --><strong>FonetButler.cs</strong><br />
<!--<br />
.csharpcode, .csharpcode pre<br />
{<br />
font-size: small;<br />
color: black;<br />
font-family: Consolas, "Courier New", Courier, Monospace;<br />
background-color: #ffffff;<br />
/*white-space: pre;*/<br />
}</p>
<p>.csharpcode pre { margin: 0em; }</p>
<p>.csharpcode .rem { color: #008000; }</p>
<p>.csharpcode .kwrd { color: #0000ff; }</p>
<p>.csharpcode .str { color: #006080; }</p>
<p>.csharpcode .op { color: #0000c0; }</p>
<p>.csharpcode .preproc { color: #cc6633; }</p>
<p>.csharpcode .asp { background-color: #ffff00; }</p>
<p>.csharpcode .html { color: #800000; }</p>
<p>.csharpcode .attr { color: #ff0000; }</p>
<p>.csharpcode .alt<br />
{<br />
background-color: #f4f4f4;<br />
width: 100%;<br />
margin: 0em;<br />
}</p>
<p>.csharpcode .lnum { color: #606060; }<br />
--></h3>
<pre class="csharpcode"><span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.Linq;
<span class="kwrd">using</span> System.Text;
<span class="kwrd">using</span> System.IO;
<span class="kwrd">using</span> Fonet;
<span class="kwrd">using</span> Fonet.Pdf;
<span class="kwrd">using</span> Fonet.Render;
<span class="kwrd">using</span> System.Xml;
<span class="kwrd">using</span> System.Xml.XPath;
<span class="kwrd">using</span> System.Xml.Xsl;
<span class="kwrd">using</span> System.Xml.Linq;

<span class="kwrd">namespace</span> FonetButler{
    <span class="kwrd">public</span> <span class="kwrd">class</span> PDF
    {
        <span class="kwrd">public</span> <span class="kwrd">static</span> MemoryStream Render(XElement XmlData, <span class="kwrd">string</span> XslFoPath)
        {
            <span class="rem">//get the xsl transform</span>
            MemoryStream transformed = Transform(XmlData, XslFoPath);

            <span class="rem">//allocate memory for the pdf</span>
            MemoryStream pdffile = <span class="kwrd">new</span> MemoryStream();

            <span class="rem">//create the pdf</span>
            FonetDriver driver = FonetDriver.Make();
            driver.Render(transformed, pdffile);

            <span class="rem">//return the pdf stream</span>
            <span class="kwrd">return</span> <span class="kwrd">new</span> MemoryStream(pdffile.ToArray());
        }

        <span class="kwrd">public</span> <span class="kwrd">static</span> MemoryStream Render(<span class="kwrd">string</span> XmlDataPath, <span class="kwrd">string</span> XslFoPath)
        {
            <span class="rem">//get the xsl transform</span>
            MemoryStream transformed = Transform(XmlDataPath, XslFoPath);

            <span class="rem">//allocate memory for the pdf</span>
            MemoryStream pdffile = <span class="kwrd">new</span> MemoryStream();

            <span class="rem">//create the pdf</span>
            FonetDriver driver = FonetDriver.Make();
            driver.Render(transformed, pdffile);

            <span class="rem">//return the pdf stream</span>
            <span class="kwrd">return</span> <span class="kwrd">new</span> MemoryStream(pdffile.ToArray());
        }

        <span class="kwrd">public</span> <span class="kwrd">static</span> MemoryStream Render(XElement XmlData, Stream XslFoStream)
        {
            <span class="rem">//get the xsl transform</span>
            MemoryStream transformed = Transform(XmlData, XslFoStream);

            <span class="rem">//allocate memory for the pdf</span>
            MemoryStream pdffile = <span class="kwrd">new</span> MemoryStream();

            <span class="rem">//create the pdf</span>
            FonetDriver driver = FonetDriver.Make();
            driver.Render(transformed, pdffile);

            <span class="rem">//return the pdf stream</span>
            <span class="kwrd">return</span> <span class="kwrd">new</span> MemoryStream(pdffile.ToArray());
        }

        <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Render(XElement XmlData, Stream XslFoStream, <span class="kwrd">string</span> OutputFilePath)
        {
            <span class="rem">//get the xsl transform</span>
            MemoryStream transformed = Transform(XmlData, XslFoStream);

            <span class="rem">//allocate memory for the pdf</span>
            MemoryStream pdffile = <span class="kwrd">new</span> MemoryStream();

            <span class="rem">//create the pdf</span>
            FonetDriver driver = FonetDriver.Make();
            driver.Render(transformed, pdffile);

            <span class="rem">//reopen the stream</span>
            pdffile = <span class="kwrd">new</span> MemoryStream(pdffile.ToArray());

            <span class="rem">//create the file</span>
            FileStream f = <span class="kwrd">new</span> FileStream(OutputFilePath, FileMode.Create, FileAccess.ReadWrite);
            f.Write(pdffile.ToArray(), 0, (<span class="kwrd">int</span>)pdffile.Length);
            f.Close();
        }

        <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Render(<span class="kwrd">string</span> XmlDataPath, <span class="kwrd">string</span> XslFoPath, <span class="kwrd">string</span> OutputFilePath)
        {
            <span class="rem">//get the xsl transform</span>
            MemoryStream transformed = Transform(XmlDataPath, XslFoPath);

            <span class="rem">//allocate memory for the pdf</span>
            MemoryStream pdffile = <span class="kwrd">new</span> MemoryStream();

            <span class="rem">//create the pdf</span>
            FonetDriver driver = FonetDriver.Make();
            driver.Render(transformed, pdffile);

            <span class="rem">//reopen the stream</span>
            pdffile = <span class="kwrd">new</span> MemoryStream(pdffile.ToArray());

            <span class="rem">//create the file</span>
            FileStream f = <span class="kwrd">new</span> FileStream(OutputFilePath, FileMode.Create, FileAccess.ReadWrite);
            f.Write(pdffile.ToArray(), 0, (<span class="kwrd">int</span>)pdffile.Length);
            f.Close();
        }

        <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> Render(XElement XmlData, <span class="kwrd">string</span> XslFoPath, <span class="kwrd">string</span> OutputFilePath)
        {
            <span class="rem">//get the xsl transform</span>
            MemoryStream transformed = Transform(XmlData, XslFoPath);

            <span class="rem">//allocate memory for the pdf</span>
            MemoryStream pdffile = <span class="kwrd">new</span> MemoryStream();

            <span class="rem">//create the pdf</span>
            FonetDriver driver = FonetDriver.Make();
            driver.Render(transformed, pdffile);

            <span class="rem">//reopen the stream</span>
            pdffile = <span class="kwrd">new</span> MemoryStream(pdffile.ToArray());

            <span class="rem">//create the file</span>
            FileStream f = <span class="kwrd">new</span> FileStream(OutputFilePath, FileMode.Create, FileAccess.ReadWrite);
            f.Write(pdffile.ToArray(), 0, (<span class="kwrd">int</span>)pdffile.Length);
            f.Close();
        }

        <span class="kwrd">private</span> <span class="kwrd">static</span> MemoryStream Transform(XElement XmlData, Stream XslFo)
        {
            XmlWriter writer = <span class="kwrd">null</span>;
            <span class="kwrd">try</span>
            {
                <span class="rem">//load the xsl-fo </span>
                XslCompiledTransform xslTrans = <span class="kwrd">new</span> XslCompiledTransform();
                xslTrans.Load(XmlReader.Create(XslFo));

                <span class="rem">//create the output stream</span>
                MemoryStream result = <span class="kwrd">new</span> MemoryStream();
                writer = XmlWriter.Create(result, <span class="kwrd">null</span>);

                <span class="rem">//create the xml reader for the data</span>
                XmlReader data = XmlData.CreateReader();

                <span class="rem">//do the actual transform of xml</span>
                xslTrans.Transform(data, <span class="kwrd">null</span>, writer);

                writer.Close();

                <span class="kwrd">return</span> <span class="kwrd">new</span> MemoryStream(result.ToArray());
            }
            <span class="kwrd">catch</span> (Exception e)
            {
                <span class="kwrd">if</span> (writer != <span class="kwrd">null</span>) writer.Close();
                <span class="kwrd">throw</span> e;
            }
        }

        <span class="kwrd">private</span> <span class="kwrd">static</span> MemoryStream Transform(<span class="kwrd">string</span> XmlDataPath, <span class="kwrd">string</span> XslFoPath)
        {
            XmlWriter writer = <span class="kwrd">null</span>;
            <span class="kwrd">try</span>
            {
                <span class="rem">//load the Xml doc</span>
                XPathDocument myXPathDoc = <span class="kwrd">new</span> XPathDocument(XmlDataPath);

                <span class="rem">//load the Xsl</span>
                XslCompiledTransform xslTrans = <span class="kwrd">new</span> XslCompiledTransform();
                xslTrans.Load(XmlDataPath);

                <span class="rem">//create the output stream</span>
                MemoryStream result = <span class="kwrd">new</span> MemoryStream();
                writer = XmlWriter.Create(result, <span class="kwrd">null</span>);

                <span class="rem">//do the actual transform of Xml</span>
                xslTrans.Transform(myXPathDoc, <span class="kwrd">null</span>, writer);

                writer.Close();

                <span class="kwrd">return</span> <span class="kwrd">new</span> MemoryStream(result.ToArray());
            }
            <span class="kwrd">catch</span> (Exception e)
            {
                <span class="kwrd">if</span> (writer != <span class="kwrd">null</span>) writer.Close();
                <span class="kwrd">throw</span> e;
            }
        }

        <span class="kwrd">private</span> <span class="kwrd">static</span> MemoryStream Transform(XElement XmlData, <span class="kwrd">string</span> XslFoPath)
        {
            XmlWriter writer = <span class="kwrd">null</span>;
            <span class="kwrd">try</span>
            {
                <span class="rem">//load the xsl</span>
                XslCompiledTransform xslTrans = <span class="kwrd">new</span> XslCompiledTransform();
                xslTrans.Load(XslFoPath);

                <span class="rem">//create the output stream</span>
                MemoryStream result = <span class="kwrd">new</span> MemoryStream();
                writer = XmlWriter.Create(result, <span class="kwrd">null</span>);

                <span class="rem">//create the xml reader for the data</span>
                XmlReader data = XmlData.CreateReader();

                <span class="rem">//do the actual transform of xml</span>
                xslTrans.Transform(data, <span class="kwrd">null</span>, writer);

                writer.Close();

                <span class="kwrd">return</span> <span class="kwrd">new</span> MemoryStream(result.ToArray());
            }
            <span class="kwrd">catch</span> (Exception e)
            {
                <span class="kwrd">if</span> (writer != <span class="kwrd">null</span>) writer.Close();
                <span class="kwrd">throw</span> e;
            }
        }
    }
}</pre>
<h3><strong>Sample Code</strong></h3>
<p><strong>Creating a physical PDF in classic ASP.Net:</strong><br />
<!--<br />
.csharpcode, .csharpcode pre<br />
{<br />
font-size: small;<br />
color: black;<br />
font-family: Consolas, "Courier New", Courier, Monospace;<br />
background-color: #ffffff;<br />
/*white-space: pre;*/<br />
}</p>
<p>.csharpcode pre { margin: 0em; }</p>
<p>.csharpcode .rem { color: #008000; }</p>
<p>.csharpcode .kwrd { color: #0000ff; }</p>
<p>.csharpcode .str { color: #006080; }</p>
<p>.csharpcode .op { color: #0000c0; }</p>
<p>.csharpcode .preproc { color: #cc6633; }</p>
<p>.csharpcode .asp { background-color: #ffff00; }</p>
<p>.csharpcode .html { color: #800000; }</p>
<p>.csharpcode .attr { color: #ff0000; }</p>
<p>.csharpcode .alt<br />
{<br />
background-color: #f4f4f4;<br />
width: 100%;<br />
margin: 0em;<br />
}</p>
<p>.csharpcode .lnum { color: #606060; }<br />
--></p>
<pre class="csharpcode"><span class="kwrd">protected</span> <span class="kwrd">void</span> Page_Load(<span class="kwrd">object</span> sender, System.EventArgs e)
{
    <span class="rem">//a physical xml file</span>
    XElement xmldata = XElement.Load(Server.MapPath(<span class="str">"~/Content/XML/Application.xml"</span>));

    <span class="rem">//a physical xsl file</span>
    <span class="kwrd">string</span> xslfo = Server.MapPath(<span class="str">"~/Content/XML/Application.xslt"</span>);

    <span class="rem">//the path for the physical file</span>
    <span class="kwrd">string</span> outputPath = Server.MapPath(<span class="str">"~/Content/XML/Application.pdf"</span>);

    <span class="rem">//create the pdf</span>
    FonetButler.PDF.Render(xmldata, xslfo, outputPath);
}</pre>
<p><strong>Generate a PDF in memory in classic ASP.Net:</strong></p>
<pre class="csharpcode"><span class="kwrd">protected</span> <span class="kwrd">void</span> Page_Load(<span class="kwrd">object</span> sender, System.EventArgs e)
{
    <span class="rem">//a physical xml file</span>
    XElement xmldata = XElement.Load(Server.MapPath(<span class="str">"~/Content/XML/Application.xml"</span>));

    <span class="rem">//a physical xsl file</span>
    <span class="kwrd">string</span> xslfo = Server.MapPath(<span class="str">"~/Content/XML/Application.xslt"</span>);

    <span class="rem">//create the pdf file stream</span>
    MemoryStream pdf = FonetButler.PDF.Render(xmldata, xslfo);

    <span class="rem">//prepare output stream</span>
    Response.ContentType = <span class="str">"application/pdf"</span>;
    Response.AddHeader(<span class="str">"content-disposition"</span>, <span class="str">"attachment;filename=Application.pdf"</span>);
    Response.Buffer = <span class="kwrd">true</span>;
    Response.Clear();
    Response.OutputStream.Write(pdf.ToArray(), 0, (<span class="kwrd">int</span>)pdf.Length);
    Response.OutputStream.Flush();
    Response.End();
}</pre>
<p><strong>Create a physical PDF in MVC:</strong><br />
<!--<br />
.csharpcode, .csharpcode pre<br />
{<br />
font-size: small;<br />
color: black;<br />
font-family: Consolas, "Courier New", Courier, Monospace;<br />
background-color: #ffffff;<br />
/*white-space: pre;*/<br />
}</p>
<p>.csharpcode pre { margin: 0em; }</p>
<p>.csharpcode .rem { color: #008000; }</p>
<p>.csharpcode .kwrd { color: #0000ff; }</p>
<p>.csharpcode .str { color: #006080; }</p>
<p>.csharpcode .op { color: #0000c0; }</p>
<p>.csharpcode .preproc { color: #cc6633; }</p>
<p>.csharpcode .asp { background-color: #ffff00; }</p>
<p>.csharpcode .html { color: #800000; }</p>
<p>.csharpcode .attr { color: #ff0000; }</p>
<p>.csharpcode .alt<br />
{<br />
background-color: #f4f4f4;<br />
width: 100%;<br />
margin: 0em;<br />
}</p>
<p>.csharpcode .lnum { color: #606060; }<br />
--></p>
<pre class="csharpcode"><span class="kwrd">public</span> ViewResult CreatePdf()
{
    <span class="rem">//xml file</span>
    XElement xmldata = XElement.Load(Server.MapPath(<span class="str">"~/Content/XML/Application.xml"</span>));

    <span class="rem">//xsl file</span>
    <span class="kwrd">string</span> xslfo = Server.MapPath(<span class="str">"~/Content/XML/Application.xslt"</span>);

    <span class="rem">//the path for the physical file</span>
    <span class="kwrd">string</span> outputPath = Server.MapPath(<span class="str">"~/Content/XML/Application.pdf"</span>);

    <span class="rem">//the pdf file stream</span>
    FonetButler.PDF.Render(xmldata, xslfo, outputPath);

    <span class="kwrd">return</span> View();
}</pre>
<p><strong>Generating a PDF in memory using MVC:</strong><br />
<!--<br />
.csharpcode, .csharpcode pre<br />
{<br />
font-size: small;<br />
color: black;<br />
font-family: Consolas, "Courier New", Courier, Monospace;<br />
background-color: #ffffff;<br />
/*white-space: pre;*/<br />
}</p>
<p>.csharpcode pre { margin: 0em; }</p>
<p>.csharpcode .rem { color: #008000; }</p>
<p>.csharpcode .kwrd { color: #0000ff; }</p>
<p>.csharpcode .str { color: #006080; }</p>
<p>.csharpcode .op { color: #0000c0; }</p>
<p>.csharpcode .preproc { color: #cc6633; }</p>
<p>.csharpcode .asp { background-color: #ffff00; }</p>
<p>.csharpcode .html { color: #800000; }</p>
<p>.csharpcode .attr { color: #ff0000; }</p>
<p>.csharpcode .alt<br />
{<br />
background-color: #f4f4f4;<br />
width: 100%;<br />
margin: 0em;<br />
}</p>
<p>.csharpcode .lnum { color: #606060; }<br />
--></p>
<pre class="csharpcode"><span class="kwrd">public</span> FileStreamResult ServePdf()
{
    <span class="rem">//xml file</span>
    XElement xmldata = XElement.Load(Server.MapPath(<span class="str">"~/Content/XML/Application.xml"</span>));

    <span class="rem">//xsl file</span>
    <span class="kwrd">string</span> xslfo = Server.MapPath(<span class="str">"~/Content/XML/Application.xslt"</span>);

    <span class="rem">//the pdf file stream</span>
    MemoryStream pdf = FonetButler.PDF.Render(xmldata, xslfo);

    <span class="kwrd">return</span> <span class="kwrd">new</span> FileStreamResult(pdf, <span class="str">"application/pdf"</span>);
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://ozzieperez.net/blog/?feed=rss2&amp;p=267</wfw:commentRss>
		</item>
		<item>
		<title>XML from SQL using Correlated Subqueries</title>
		<link>http://ozzieperez.net/blog/?p=259</link>
		<comments>http://ozzieperez.net/blog/?p=259#comments</comments>
		<pubDate>Wed, 10 Mar 2010 03:26:58 +0000</pubDate>
		<dc:creator>Ozzie Perez</dc:creator>
		
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://ozzieperez.net/blog/?p=259</guid>
		<description><![CDATA[It&#8217;s really easy to get an XML object from an SQL database and structure the elements in anyway you like. If you&#8217;re familiar with creating SELECT statements, you&#8217;ll be a pro with this cool way of creating XML objects to feed your application or whatever else.
So, you have your plain vanilla select query:
SELECT column1, column2 [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s really easy to get an XML object from an SQL database and structure the elements in anyway you like. If you&#8217;re familiar with creating SELECT statements, you&#8217;ll be a pro with this cool way of creating XML objects to feed your application or whatever else.</p>
<p>So, you have your plain vanilla select query:</p>
<p><strong><code>SELECT column1, column2 FROM table1 AS t1</code></strong></p>
<p>Now just replace <em>column2 </em> with another SELECT statement that has a WHERE clause relating it to the parent SELECT statement and you&#8217;ve got yourself a <a href="http://msdn.microsoft.com/en-us/library/ms187638.aspx">correlated subquery</a>.</p>
<p><strong><code>SELECT column1, (SELECT * FROM table2 AS t2 WHERE t1.key=t2.key) FROM table1 AS t1</code></strong></p>
<p>Now, it&#8217;s easy to turn this into XML by adding this at the end of each SELECT statement:</p>
<p><strong><code>FOR XML PATH ('myElementName'), TYPE</code></strong></p>
<p>Here&#8217;s my example using the <a href="http://msftdbprodsamples.codeplex.com/releases/view/37109">AdventureWorksLT2008</a> database:<br />
<!--<br />
.csharpcode, .csharpcode pre<br />
{<br />
font-size: small;<br />
color: black;<br />
font-family: Consolas, "Courier New", Courier, Monospace;<br />
background-color: #ffffff;<br />
/*white-space: pre;*/<br />
}</p>
<p>.csharpcode pre { margin: 0em; }</p>
<p>.csharpcode .rem { color: #008000; }</p>
<p>.csharpcode .kwrd { color: #0000ff; }</p>
<p>.csharpcode .str { color: #006080; }</p>
<p>.csharpcode .op { color: #0000c0; }</p>
<p>.csharpcode .preproc { color: #cc6633; }</p>
<p>.csharpcode .asp { background-color: #ffff00; }</p>
<p>.csharpcode .html { color: #800000; }</p>
<p>.csharpcode .attr { color: #ff0000; }</p>
<p>.csharpcode .alt<br />
{<br />
background-color: #f4f4f4;<br />
width: 100%;<br />
margin: 0em;<br />
}</p>
<p>.csharpcode .lnum { color: #606060; }<br />
--></p>
<pre class="csharpcode"><strong>DECLARE @SalesOrderNumber AS varchar(10) = <span class="str">'SO71774'</span>;

SELECT OrderDate, SalesOrderNumber, AccountNumber, SubTotal, TotalDue
    ,-- Order Details
    (SELECT p.Name, p.ProductNumber, p.ListPrice, OrderQty, LineTotal
        FROM SalesLT.SalesOrderDetail AS sod
            INNER JOIN SalesLT.Product p ON p.ProductID=sod.ProductID
        WHERE sod.SalesOrderID=soh.SalesOrderID
        FOR XML PATH (<span class="str">'Product'</span>), TYPE, ROOT(<span class="str">'Products'</span>))
    ,-- Customer Information
    (SELECT  FirstName, MiddleName, LastName, EmailAddress
        FROM SalesLT.Customer AS c
        WHERE c.CustomerID=soh.CustomerID
        FOR XML PATH (<span class="str">'Customer'</span>), TYPE)
    ,-- Shipping Address
    (SELECT  AddressLine1, City, StateProvince, CountryRegion, PostalCode
        FROM SalesLT.Address AS a
        WHERE a.AddressID=soh.ShipToAddressID
        FOR XML PATH (<span class="str">'ShippingAddress'</span>), TYPE)
FROM SalesLT.SalesOrderHeader soh
WHERE soh.SalesOrderNumber=@SalesOrderNumber
FOR XML PATH(<span class="str">'SalesOrder'</span>), ROOT(<span class="str">'root'</span>)
</strong></pre>
<p>Running this query gives you the following output:<br />
<!--<br />
.csharpcode, .csharpcode pre<br />
{<br />
font-size: small;<br />
color: black;<br />
font-family: Consolas, "Courier New", Courier, Monospace;<br />
background-color: #ffffff;<br />
/*white-space: pre;*/<br />
}</p>
<p>.csharpcode pre { margin: 0em; }</p>
<p>.csharpcode .rem { color: #008000; }</p>
<p>.csharpcode .kwrd { color: #0000ff; }</p>
<p>.csharpcode .str { color: #006080; }</p>
<p>.csharpcode .op { color: #0000c0; }</p>
<p>.csharpcode .preproc { color: #cc6633; }</p>
<p>.csharpcode .asp { background-color: #ffff00; }</p>
<p>.csharpcode .html { color: #800000; }</p>
<p>.csharpcode .attr { color: #ff0000; }</p>
<p>.csharpcode .alt<br />
{<br />
background-color: #f4f4f4;<br />
width: 100%;<br />
margin: 0em;<br />
}<br />
.csharpcode .lnum { color: #606060; }<br />
--></p>
<pre class="csharpcode"><strong><span class="kwrd">&lt;</span><span class="html">root</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">SalesOrder</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">OrderDate</span><span class="kwrd">&gt;</span>2004-06-01T00:00:00<span class="kwrd">&lt;/</span><span class="html">OrderDate</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">SalesOrderNumber</span><span class="kwrd">&gt;</span>SO71774<span class="kwrd">&lt;/</span><span class="html">SalesOrderNumber</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">AccountNumber</span><span class="kwrd">&gt;</span>10-4020-000609<span class="kwrd">&lt;/</span><span class="html">AccountNumber</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">SubTotal</span><span class="kwrd">&gt;</span>880.3484<span class="kwrd">&lt;/</span><span class="html">SubTotal</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">TotalDue</span><span class="kwrd">&gt;</span>972.7850<span class="kwrd">&lt;/</span><span class="html">TotalDue</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">Products</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">Product</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">Name</span><span class="kwrd">&gt;</span>ML Road Frame-W - Yellow, 48<span class="kwrd">&lt;/</span><span class="html">Name</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ProductNumber</span><span class="kwrd">&gt;</span>FR-R72Y-48<span class="kwrd">&lt;/</span><span class="html">ProductNumber</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ListPrice</span><span class="kwrd">&gt;</span>594.8300<span class="kwrd">&lt;/</span><span class="html">ListPrice</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">OrderQty</span><span class="kwrd">&gt;</span>1<span class="kwrd">&lt;/</span><span class="html">OrderQty</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">UnitPriceDiscount</span><span class="kwrd">&gt;</span>0.0000<span class="kwrd">&lt;/</span><span class="html">UnitPriceDiscount</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">LineTotal</span><span class="kwrd">&gt;</span>356.898000<span class="kwrd">&lt;/</span><span class="html">LineTotal</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;/</span><span class="html">Product</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">Product</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">Name</span><span class="kwrd">&gt;</span>ML Road Frame-W - Yellow, 38<span class="kwrd">&lt;/</span><span class="html">Name</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ProductNumber</span><span class="kwrd">&gt;</span>FR-R72Y-38<span class="kwrd">&lt;/</span><span class="html">ProductNumber</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ListPrice</span><span class="kwrd">&gt;</span>594.8300<span class="kwrd">&lt;/</span><span class="html">ListPrice</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">OrderQty</span><span class="kwrd">&gt;</span>1<span class="kwrd">&lt;/</span><span class="html">OrderQty</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">UnitPriceDiscount</span><span class="kwrd">&gt;</span>0.0000<span class="kwrd">&lt;/</span><span class="html">UnitPriceDiscount</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">LineTotal</span><span class="kwrd">&gt;</span>356.898000<span class="kwrd">&lt;/</span><span class="html">LineTotal</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;/</span><span class="html">Product</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">Products</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">Customer</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">FirstName</span><span class="kwrd">&gt;</span>David<span class="kwrd">&lt;/</span><span class="html">FirstName</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">LastName</span><span class="kwrd">&gt;</span>Hodgson<span class="kwrd">&lt;/</span><span class="html">LastName</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">EmailAddress</span><span class="kwrd">&gt;</span>david16@adventure-works.com<span class="kwrd">&lt;/</span><span class="html">EmailAddress</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">Customer</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">ShippingAddress</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">AddressLine1</span><span class="kwrd">&gt;</span>99700 Bell Road<span class="kwrd">&lt;/</span><span class="html">AddressLine1</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">City</span><span class="kwrd">&gt;</span>Auburn<span class="kwrd">&lt;/</span><span class="html">City</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">StateProvince</span><span class="kwrd">&gt;</span>California<span class="kwrd">&lt;/</span><span class="html">StateProvince</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">CountryRegion</span><span class="kwrd">&gt;</span>United States<span class="kwrd">&lt;/</span><span class="html">CountryRegion</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">PostalCode</span><span class="kwrd">&gt;</span>95603<span class="kwrd">&lt;/</span><span class="html">PostalCode</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">ShippingAddress</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">SalesOrder</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">root</span><span class="kwrd">&gt;</span></strong></pre>
<p>You can then package this into a stored procedure, passing it the OrderNumber, and get a nicely formatted XML to use to generate PDFs or whatever else.</p>
<p>Cheers</p>
]]></content:encoded>
			<wfw:commentRss>http://ozzieperez.net/blog/?feed=rss2&amp;p=259</wfw:commentRss>
		</item>
		<item>
		<title>Creating a PDF with iTextSharp and ASP.Net MVC 2</title>
		<link>http://ozzieperez.net/blog/?p=255</link>
		<comments>http://ozzieperez.net/blog/?p=255#comments</comments>
		<pubDate>Tue, 02 Mar 2010 22:23:29 +0000</pubDate>
		<dc:creator>Ozzie Perez</dc:creator>
		
		<category><![CDATA[ASP.Net]]></category>

		<guid isPermaLink="false">http://ozzieperez.net/blog/?p=255</guid>
		<description><![CDATA[Here&#8217;s a simple example to create a PDF on the fly and provide it as a streaming download, rather than creating a physical file:


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a simple example to create a PDF on the fly and provide it as a streaming download, rather than creating a physical file:<br />
<!-- code formatted by http://manoli.net/csharpformat/ --></p>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}</p>
<p>.csharpcode pre { margin: 0em; }</p>
<p>.csharpcode .rem { color: #008000; }</p>
<p>.csharpcode .kwrd { color: #0000ff; }</p>
<p>.csharpcode .str { color: #006080; }</p>
<p>.csharpcode .op { color: #0000c0; }</p>
<p>.csharpcode .preproc { color: #cc6633; }</p>
<p>.csharpcode .asp { background-color: #ffff00; }</p>
<p>.csharpcode .html { color: #800000; }</p>
<p>.csharpcode .attr { color: #ff0000; }</p>
<p>.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}</p>
<p>.csharpcode .lnum { color: #606060; }
</style>
<pre class="csharpcode">
<span class="kwrd">public</span> FileStreamResult About()
{
    <span class="rem">//mem buffer</span>
    MemoryStream ms = <span class="kwrd">new</span> MemoryStream();

    <span class="rem">//the document</span>
    Document document = <span class="kwrd">new</span> Document();

    <span class="rem">//the writer</span>
    PdfWriter.GetInstance(document, ms);<span class="rem">//fs);</span>

    <span class="rem">//open the document</span>
    document.Open();

    <span class="rem">//add header image</span>
    <span class="rem">//Image headerlogo = Image.GetInstance("C:\\Temp\\citylogo.png");</span>
    <span class="rem">//document.Add(headerlogo);</span>

    <span class="rem">//create the fonts</span>
    BaseFont timesNormal = BaseFont.CreateFont(BaseFont.TIMES_ROMAN,
                                               BaseFont.CP1252,
                                               BaseFont.NOT_EMBEDDED);
    Font fontNormal = <span class="kwrd">new</span> Font(timesNormal, 10, Font.NORMAL);
    Font fontH1 = <span class="kwrd">new</span> Font(timesNormal, 16, Font.NORMAL);

    <span class="rem">//add a paragraph</span>
    document.Add(<span class="kwrd">new</span> Paragraph(<span class="str">"Instructions"</span>, fontH1));
    document.Add(<span class="kwrd">new</span> Paragraph(<span class="str">@"Lorem ipsum dolor sit amet, consectetur adipisicing
                                elit, sed do eiusmod tempor incididunt ut labore et
                                dolore magna aliqua. Ut enim ad minim."</span>, fontNormal));

    document.Add(<span class="kwrd">new</span> Paragraph(<span class="str">"\n"</span>)); <span class="rem">//better way to do a newline?</span>

    <span class="rem">//add a table</span>
    PdfPTable table = <span class="kwrd">new</span> PdfPTable(3);
    PdfPCell cell = <span class="kwrd">new</span> PdfPCell(<span class="kwrd">new</span> Phrase(<span class="str">"Header spanning 3 columns"</span>));
    cell.Colspan = 3;
    cell.HorizontalAlignment = 1; <span class="rem">//0=Left, 1=Centre, 2=Right</span>
    table.AddCell(cell);

    table.AddCell(<span class="str">"Row 1 Col 1"</span>);
    table.AddCell(<span class="str">"Row 1 Col 2"</span>);
    table.AddCell(<span class="str">"Row 1 Col 3"</span>);
    table.AddCell(<span class="str">"Row 2 Col 1"</span>);
    table.AddCell(<span class="str">"Row 2 Col 2"</span>);
    table.AddCell(<span class="str">"Row 2 Col 3"</span>);

    document.Add(table);

    <span class="rem">//close the document</span>
    document.Close();

    <span class="rem">//prepare output stream</span>
    Response.ContentType = <span class="str">"application/pdf"</span>;
    Response.AddHeader(<span class="str">"content-disposition"</span>, <span class="str">"attachment;filename=MyPdfName.pdf"</span>);
    Response.Buffer = <span class="kwrd">true</span>;
    Response.Clear();
    Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
    Response.OutputStream.Flush();
    Response.End();

    <span class="kwrd">return</span> <span class="kwrd">new</span> FileStreamResult(Response.OutputStream,<span class="str">"application/pdf"</span>);
}</pre>
<p>You&#8217;ll need to download the <a href="http://sourceforge.net/projects/itextsharp/files/">iTextSharp </a>DLL and give reference to it in your project.</p>
<p>And that&#8217;s the way the cookie crumbles.</p>
]]></content:encoded>
			<wfw:commentRss>http://ozzieperez.net/blog/?feed=rss2&amp;p=255</wfw:commentRss>
		</item>
		<item>
		<title>DB Hits Performance Booster Tip</title>
		<link>http://ozzieperez.net/blog/?p=251</link>
		<comments>http://ozzieperez.net/blog/?p=251#comments</comments>
		<pubDate>Thu, 22 Oct 2009 16:48:13 +0000</pubDate>
		<dc:creator>Ozzie Perez</dc:creator>
		
		<category><![CDATA[ASP.Net]]></category>

		<category><![CDATA[Database]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[SP]]></category>

		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://ozzieperez.net/blog/?p=251</guid>
		<description><![CDATA[Using XML to pass data for an Stored Procedure to handle using some logic, can save a lot of database hits and greatly improve the performance of your application.
Here&#8217;s an article describing a simple implementation:
http://www.c-sharpcorner.com/UploadFile/skumaar_mca/XMLDmlOperation07292009123939PM/XMLDmlOperation.aspx
]]></description>
			<content:encoded><![CDATA[<p>Using XML to pass data for an Stored Procedure to handle using some logic, can save a lot of database hits and greatly improve the performance of your application.</p>
<p>Here&#8217;s an article describing a simple implementation:<br />
http://www.c-sharpcorner.com/UploadFile/skumaar_mca/XMLDmlOperation07292009123939PM/XMLDmlOperation.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://ozzieperez.net/blog/?feed=rss2&amp;p=251</wfw:commentRss>
		</item>
		<item>
		<title>For Keeping Up-To-Date</title>
		<link>http://ozzieperez.net/blog/?p=243</link>
		<comments>http://ozzieperez.net/blog/?p=243#comments</comments>
		<pubDate>Tue, 29 Sep 2009 17:48:24 +0000</pubDate>
		<dc:creator>Ozzie Perez</dc:creator>
		
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://ozzieperez.net/blog/?p=243</guid>
		<description><![CDATA[News
		http://www.infoworld.com/d/developer-world/news
		http://slashdot.org/
		http://dotnetslackers.com/
		http://www.dotnetcurry.com/
		http://dotnetkicks.com/
		Blogs
		http://www.hanselman.com/blog/
		http://blog.wekeroad.com/
		http://weblogs.asp.net/scottgu/
		http://haacked.com/
		http://devlicio.us/blogs/
		References
		http://dotnetperls.com/
		Podcasts
		http://www.asp.net/learn/podcasts/
		http://www.hanselminutes.com/
		Videos
		http://channel9.msdn.com/
		http://channel8.msdn.com
		http://on10.net/
		http://www.visitmix.com/
		http://edge.technet.com/
]]></description>
			<content:encoded><![CDATA[<p><strong>News</strong><br />
		<a href="http://www.infoworld.com/d/developer-world/news">http://www.infoworld.com/d/developer-world/news</a><br />
		<a href="http://slashdot.org/">http://slashdot.org/</a><br />
		<a href="http://dotnetslackers.com/">http://dotnetslackers.com/</a><br />
		<a href="http://www.dotnetcurry.com/">http://www.dotnetcurry.com/</a><br />
		<a href="http://dotnetkicks.com/">http://dotnetkicks.com/</a><br />
		<strong>Blogs</strong><br />
		<a href="http://www.hanselman.com/blog/">http://www.hanselman.com/blog/</a><br />
		<a href="http://blog.wekeroad.com/">http://blog.wekeroad.com/</a><br />
		<a href="http://weblogs.asp.net/scottgu/">http://weblogs.asp.net/scottgu/</a><br />
		<a href="http://haacked.com/">http://haacked.com/</a><br />
		<a href="http://devlicio.us/blogs/">http://devlicio.us/blogs/</a><br />
		<strong>References</strong><br />
		<a href="http://dotnetperls.com/">http://dotnetperls.com/</a><br />
		<strong>Podcasts</strong><br />
		<a href="http://www.asp.net/learn/podcasts/">http://www.asp.net/learn/podcasts/</a><br />
		<a href="http://www.hanselminutes.com/">http://www.hanselminutes.com/</a><br />
		<strong>Videos</strong><br />
		<a href="http://channel9.msdn.com/">http://channel9.msdn.com/</a><br />
		<a href="http://channel8.msdn.com">http://channel8.msdn.com</a><br />
		<a href="http://on10.net/">http://on10.net/</a><br />
		<a href="http://www.visitmix.com/">http://www.visitmix.com/</a><br />
		<a href="http://edge.technet.com/">http://edge.technet.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ozzieperez.net/blog/?feed=rss2&amp;p=243</wfw:commentRss>
		</item>
	</channel>
</rss>

