<?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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nefaria.com &#187; Programming / Scripting</title>
	<atom:link href="http://nefaria.com/tag/programming-scripting/feed/" rel="self" type="application/rss+xml" />
	<link>http://nefaria.com</link>
	<description>☠ ☠ ☠ ☠ ☠ ☠</description>
	<lastBuildDate>Wed, 31 Aug 2011 16:12:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>new jQuery stuff!</title>
		<link>http://nefaria.com/2011/08/new-jquery-stuff/</link>
		<comments>http://nefaria.com/2011/08/new-jquery-stuff/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 17:08:46 +0000</pubDate>
		<dc:creator>musashi</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[I.T.]]></category>
		<category><![CDATA[Programming / Scripting]]></category>

		<guid isPermaLink="false">http://nefaria.com/?p=1020</guid>
		<description><![CDATA[Check it out: http://nefaria.com/project_index/jqueryfilebrowser/ Enjoy!]]></description>
			<content:encoded><![CDATA[<p>Check it out: <a href="http://nefaria.com/project_index/jqueryfilebrowser/">http://nefaria.com/project_index/jqueryfilebrowser/</a></p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://nefaria.com/2011/08/new-jquery-stuff/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jqueryFileTree connector script for python cgi</title>
		<link>http://nefaria.com/2010/08/jqueryfiletree-connector-script-for-python-cgi/</link>
		<comments>http://nefaria.com/2010/08/jqueryfiletree-connector-script-for-python-cgi/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 15:49:12 +0000</pubDate>
		<dc:creator>musashi</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[I.T.]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programming / Scripting]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://nefaria.com/?p=934</guid>
		<description><![CDATA[If you use jquery and haven&#8217;t messed with the jqueryFileTree plugin, I&#8217;d highly recommend you do so. It&#8217;s pretty neat, and there are connector scripts already written in various languages for use with this plugin. However, there wasn&#8217;t one for python cgi (there was one for django however). So, I wrote my own! Try it [...]]]></description>
			<content:encoded><![CDATA[<p>If you use jquery and haven&#8217;t messed with the <a href="http://abeautifulsite.net/blog/2008/03/jquery-file-tree/">jqueryFileTree</a> plugin, I&#8217;d highly recommend you do so. It&#8217;s pretty neat, and there are <a href="http://abeautifulsite.net/blog/2008/03/jquery-file-tree/#connectors">connector scripts</a> already written in various languages for use with this plugin. However, there wasn&#8217;t one for python cgi (there was one for django however). So, I wrote my own! Try it out:</p>
<div class="code_block">
<font color="#8080ff">#!/usr/bin/python</font></p>
<p><font color="#8080ff">#&nbsp;jqueryFileTree connector script for python cgi</font><br />
<font color="#8080ff">#&nbsp;Version: 1.0 / 10 August 2010</font><br />
<font color="#8080ff">#&nbsp;Author: Charles Hamilton / musashi@nefaria.com</font><br />
<font color="#8080ff">#&nbsp;Released under the GNU GPLv3</font><br />
<font color="#8080ff">#&nbsp;Modifications and improvements are welcome</font></p>
<p><font color="#ff40ff">import</font>&nbsp;os, cgi, cgitb, urllib, re<br />
cgitb.enable() <br />
form = cgi.FieldStorage()</p>
<p><font color="#ffff00">print</font>&nbsp;&#8217;<font color="#ff6060">Content-Type: text/html</font><font color="#ff40ff">\n\n</font>&#8216;<br />
<font color="#ffff00">print</font>&nbsp;&#8217;<font color="#ff6060">&lt;ul class=&quot;jqueryFileTree&quot; style=&quot;display: none;&quot;&gt;</font>&#8216;</p>
<p>path = urllib.unquote(form['<font color="#ff6060">dir</font>'].value)</p>
<p>dirs = []<br />
files = []</p>
<p>filelist = sorted(os.listdir(path))</p>
<p><font color="#ffff00">for</font>&nbsp;object <font color="#ffff00">in</font>&nbsp;filelist:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;os.path.isfile(path + &#8216;<font color="#ff6060">/</font>&#8216;&nbsp;+ object):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext = os.path.splitext(object)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files.append(&#8216;<font color="#ff6060">&lt;li class=&quot;file ext_</font>&#8216;&nbsp;+ re.sub(&#8216;<font color="#ff6060">\.</font>&#8216;, &#8221;, ext[1]) + &#8216;<font color="#ff6060">&quot;&gt;&lt;a href=&quot;#&quot; rel=&quot;</font>&#8216;+ path + object + &#8216;<font color="#ff6060">&quot;&gt;</font>&#8216;+ object + &#8216;<font color="#ff6060">&lt;/a&gt;&lt;/li&gt;</font>&#8216;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">elif</font>&nbsp;os.path.isdir(path + &#8216;<font color="#ff6060">/</font>&#8216;&nbsp;+ object):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dirs.append(&#8216;<font color="#ff6060">&lt;li class=&quot;directory collapsed&quot;&gt;&lt;a href=&quot;#&quot; rel=&quot;</font>&#8216;+ path + object +&#8217;<font color="#ff6060">/&quot;&gt;</font>&#8216;&nbsp;+ object + &#8216;<font color="#ff6060">&lt;/a&gt;&lt;/li&gt;</font>&#8216;)</p>
<p><font color="#ffff00">for</font>&nbsp;d <font color="#ffff00">in</font>&nbsp;dirs:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;d</p>
<p><font color="#ffff00">for</font>&nbsp;f <font color="#ffff00">in</font>&nbsp;files:<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;f</p>
<p><font color="#ffff00">print</font>&nbsp;&#8217;<font color="#ff6060">&lt;/ul&gt;</font>&#8216;<br />
</font>
</div>
]]></content:encoded>
			<wfw:commentRss>http://nefaria.com/2010/08/jqueryfiletree-connector-script-for-python-cgi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Python + Reportlab: example #1</title>
		<link>http://nefaria.com/2010/08/python-reportlab-example-1/</link>
		<comments>http://nefaria.com/2010/08/python-reportlab-example-1/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 14:57:06 +0000</pubDate>
		<dc:creator>musashi</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[I.T.]]></category>
		<category><![CDATA[Programming / Scripting]]></category>

		<guid isPermaLink="false">http://nefaria.com/?p=922</guid>
		<description><![CDATA[So I&#8217;ve been using reportlab lately and I have to say, it&#8217;s pretty neat. This post will (hopefully) be the first of many to follow. It&#8217;s just a simple example that shows how to take input from a web form and insert it into a PDF. First, the code: &#160;1 #!/usr/bin/python &#160;2 &#160;3 import&#160;cgi, sys [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been using <a href="http://www.reportlab.com/software/opensource/">reportlab</a> lately and I have to say, it&#8217;s pretty neat. This post will (hopefully) be the first of many to follow. It&#8217;s just a simple example that shows how to take input from a web form and insert it into a PDF. First, the code:</p>
<div class="code_block">
<font color="#ffff00">&nbsp;1 </font><font color="#8080ff">#!/usr/bin/python</font><br />
<font color="#ffff00">&nbsp;2 </font><br />
<font color="#ffff00">&nbsp;3 </font><font color="#ff40ff">import</font>&nbsp;cgi, sys<br />
<font color="#ffff00">&nbsp;4 </font><br />
<font color="#ffff00">&nbsp;5 </font>form = cgi.FieldStorage()<br />
<font color="#ffff00">&nbsp;6 </font><br />
<font color="#ffff00">&nbsp;7 </font><font color="#ffff00">if</font>&nbsp;<font color="#ffff00">not</font>&nbsp;&quot;<font color="#ff6060">name</font>&quot;&nbsp;<font color="#ffff00">in</font>&nbsp;form:<br />
<font color="#ffff00">&nbsp;8 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;&quot;&quot;<font color="#ff6060">Content-Type: text/html</font><font color="#ff40ff">\n\n</font><br />
<font color="#ffff00">&nbsp;9 </font><font color="#ff6060">&lt;html&gt;</font><br />
<font color="#ffff00">10 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;</font><br />
<font color="#ffff00">11 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Reportlab Example&lt;/title&gt;</font><br />
<font color="#ffff00">12 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;</font><br />
<font color="#ffff00">13 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;</font><br />
<font color="#ffff00">14 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form action=&quot;index2.cgi&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;</font><br />
<font color="#ffff00">15 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;fieldset&gt;</font><br />
<font color="#ffff00">16 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;legend&gt;Personal Info:&lt;/legend&gt;</font><br />
<font color="#ffff00">17 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name: &lt;input type=&quot;text&quot; name=&quot;name&quot;&gt;&lt;br /&gt;</font><br />
<font color="#ffff00">18 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Photo: &lt;input type=&quot;file&quot; name=&quot;photo&quot;&gt;&lt;br /&gt;</font><br />
<font color="#ffff00">19 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&quot;submit&quot;&gt;</font><br />
<font color="#ffff00">20 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/fieldset&gt;</font><br />
<font color="#ffff00">21 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;</font><br />
<font color="#ffff00">22 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;</font><br />
<font color="#ffff00">23 </font><font color="#ff6060">&lt;/head&gt;</font>&quot;&quot;&quot;<br />
<font color="#ffff00">24 </font><br />
<font color="#ffff00">25 </font><font color="#ffff00">else</font>:<br />
<font color="#ffff00">26 </font><br />
<font color="#ffff00">27 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.platypus <font color="#ff40ff">import</font>&nbsp;*<br />
<font color="#ffff00">28 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib.styles <font color="#ff40ff">import</font>&nbsp;getSampleStyleSheet<br />
<font color="#ffff00">29 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib.units <font color="#ff40ff">import</font>&nbsp;inch<br />
<font color="#ffff00">30 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib <font color="#ff40ff">import</font>&nbsp;colors<br />
<font color="#ffff00">31 </font>&nbsp;&nbsp;&nbsp;&nbsp;doc = SimpleDocTemplate(sys.stdout)<br />
<font color="#ffff00">32 </font>&nbsp;&nbsp;&nbsp;&nbsp;styles = getSampleStyleSheet()<br />
<font color="#ffff00">33 </font>&nbsp;&nbsp;&nbsp;&nbsp;content = []<br />
<font color="#ffff00">34 </font>&nbsp;&nbsp;&nbsp;&nbsp;<br />
<font color="#ffff00">35 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;form['<font color="#ff6060">photo</font>'].filename:<br />
<font color="#ffff00">36 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image = Image(form['<font color="#ff6060">photo</font>'].file)<br />
<font color="#ffff00">37 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.drawHeight = 2*inch*image.drawHeight / image.drawWidth<br />
<font color="#ffff00">38 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.drawWidth = 2*inch<br />
<font color="#ffff00">39 </font><br />
<font color="#ffff00">40 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;form['<font color="#ff6060">name</font>'].value:<br />
<font color="#ffff00">41 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text1 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading1</font>'])<br />
<font color="#ffff00">42 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text2 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading2</font>'])<br />
<font color="#ffff00">43 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text3 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading3</font>'])<br />
<font color="#ffff00">44 </font><br />
<font color="#ffff00">45 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text1)<br />
<font color="#ffff00">46 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text2)<br />
<font color="#ffff00">47 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text3)<br />
<font color="#ffff00">48 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(image)<br />
<font color="#ffff00">49 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;<font color="#ff6060">Content-Type: application/pdf</font>&quot;<br />
<font color="#ffff00">50 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;<font color="#ff6060">Content-Disposition: attachment; filename=example.pdf</font><font color="#ff40ff">\n\n</font>&quot;<br />
<font color="#ffff00">51 </font>&nbsp;&nbsp;&nbsp;&nbsp;doc.build(content)<br />
</font>
</div>
<p>Now the explanation:</p>
<p>Lines #1 &#8211; #5 handle specifying the interpreter, importing modules, and initializing the &#8220;FieldStorage&#8221; dictionary (as the variable &#8216;form&#8217;).</p>
<div class="code_block">
<font color="#ffff00">&nbsp;1 </font><font color="#8080ff">#!/usr/bin/python</font><br />
<font color="#ffff00">&nbsp;2 </font><br />
<font color="#ffff00">&nbsp;3 </font><font color="#ff40ff">import</font>&nbsp;cgi, sys<br />
<font color="#ffff00">&nbsp;4 </font><br />
<font color="#ffff00">&nbsp;5 </font>form = cgi.FieldStorage()
</div>
<p>Line #7 tests whether the form has been submitted by checking to see if the &#8216;name&#8217; field has been filled out. There&#8217;s many better ways to test for form submission, but for the purposes of our example, this will work just fine.</p>
<div class="code_block">
<font color="#ffff00">&nbsp;7 </font><font color="#ffff00">if</font>&nbsp;<font color="#ffff00">not</font>&nbsp;&quot;<font color="#ff6060">name</font>&quot;&nbsp;<font color="#ffff00">in</font>&nbsp;form:
</div>
<p>Lines #8 &#8211; #23 print the form</p>
<div class="code_block">
<font color="#ffff00">&nbsp;8 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;&quot;&quot;<font color="#ff6060">Content-Type: text/html</font><font color="#ff40ff">\n\n</font><br />
<font color="#ffff00">&nbsp;9 </font><font color="#ff6060">&lt;html&gt;</font><br />
<font color="#ffff00">10 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;</font><br />
<font color="#ffff00">11 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Reportlab Example&lt;/title&gt;</font><br />
<font color="#ffff00">12 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;</font><br />
<font color="#ffff00">13 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;</font><br />
<font color="#ffff00">14 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form action=&quot;index2.cgi&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;</font><br />
<font color="#ffff00">15 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;fieldset&gt;</font><br />
<font color="#ffff00">16 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;legend&gt;Personal Info:&lt;/legend&gt;</font><br />
<font color="#ffff00">17 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name: &lt;input type=&quot;text&quot; name=&quot;name&quot;&gt;&lt;br /&gt;</font><br />
<font color="#ffff00">18 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Photo: &lt;input type=&quot;file&quot; name=&quot;photo&quot;&gt;&lt;br /&gt;</font><br />
<font color="#ffff00">19 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&quot;submit&quot;&gt;</font><br />
<font color="#ffff00">20 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/fieldset&gt;</font><br />
<font color="#ffff00">21 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;</font><br />
<font color="#ffff00">22 </font><font color="#ff6060">&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;</font><br />
<font color="#ffff00">23 </font><font color="#ff6060">&lt;/head&gt;</font>&quot;&quot;&quot;
</div>
<p>Lines #26 &#8211; #29 import some more modules (i.e., reportlab related stuff).</p>
<div class="code_block">
<font color="#ffff00">26 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.platypus <font color="#ff40ff">import</font>&nbsp;*<br />
<font color="#ffff00">27 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib.styles <font color="#ff40ff">import</font>&nbsp;getSampleStyleSheet<br />
<font color="#ffff00">28 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib.units <font color="#ff40ff">import</font>&nbsp;inch<br />
<font color="#ffff00">29 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff40ff">from</font>&nbsp;reportlab.lib <font color="#ff40ff">import</font>&nbsp;colors
</div>
<p>Now line #30 is important, this is where we decide where we want to write the output. We can either save the output to a file, or we can dump it to stdout (i.e., back to the web browser). In this example, we&#8217;re going to send the output back to the web browser.</p>
<div class="code_block">
<font color="#ffff00">30 </font>&nbsp;&nbsp;&nbsp;&nbsp;doc = SimpleDocTemplate(sys.stdout)
</div>
<p>Line #31 handles getting the style sheet that we&#8217;re going to use to format our text.</p>
<div class="code_block">
<font color="#ffff00">31 </font>&nbsp;&nbsp;&nbsp;&nbsp;styles = getSampleStyleSheet()
</div>
<p>In line #32, we initialize the &#8216;content&#8217; dictionary &#8212; this is where we&#8217;re going to keep the elements of our PDF until we&#8217;re ready to write it to stdout.</p>
<div class="code_block">
<font color="#ffff00">32 </font>&nbsp;&nbsp;&nbsp;&nbsp;content = []
</div>
<p>In lines #34 &#8211; #37, we test for the &#8216;photo&#8217; field &#8212; if it has been submitted, we create an Image object out of it. We&#8217;re assuming that the user is going to submit a photo, but in reality, the user could submit anything so some further &#8220;hardening&#8221; of this form would be required in order to ensure that the only things that actually get submitted are image files.</p>
<div class="code_block">
<p><font color="#ffff00">34 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;form['<font color="#ff6060">photo</font>'].filename:<br />
<font color="#ffff00">35 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image = Image(form['<font color="#ff6060">photo</font>'].file)<br />
<font color="#ffff00">36 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.drawHeight = 2*inch*image.drawHeight / image.drawWidth<br />
<font color="#ffff00">37 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.drawWidth = 2*inch
</div>
<p>Lines #39 &#8211; #42 test to see if the &#8216;name&#8217; field has been submitted; if it has, it creates some text objects to insert into our PDF.</p>
<div class="code_block">
<font color="#ffff00">39 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">if</font>&nbsp;form['<font color="#ff6060">name</font>'].value:<br />
<font color="#ffff00">40 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text1 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading1</font>'])<br />
<font color="#ffff00">41 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text2 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading2</font>'])<br />
<font color="#ffff00">42 </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text3 = Paragraph(form['<font color="#ff6060">name</font>'].value, styles['<font color="#ff6060">Heading3</font>'])
</div>
<p>Lines #44 &#8211; #47 append all the objects that we want to appear in our PDF, to the &#8216;content&#8217; dictionary we created earlier.</p>
<div class="code_block">
<font color="#ffff00">44 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text1)<br />
<font color="#ffff00">45 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text2)<br />
<font color="#ffff00">46 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(text3)<br />
<font color="#ffff00">47 </font>&nbsp;&nbsp;&nbsp;&nbsp;content.append(image)
</div>
<p>Lines #48 &#8211; #49 send the appropriate headers to the web browser, before we send our completed PDF file.</p>
<div class="code_block">
<font color="#ffff00">48 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;<font color="#ff6060">Content-Type: application/pdf</font>&quot;<br />
<font color="#ffff00">49 </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ffff00">print</font>&nbsp;&quot;<font color="#ff6060">Content-Disposition: attachment; filename=example.pdf</font><font color="#ff40ff">\n\n</font>&quot;
</div>
<p>And finally, line #50 builds our PDF and sends the output to stdout.</p>
<div class="code_block">
<font color="#ffff00">50 </font>&nbsp;&nbsp;&nbsp;&nbsp;doc.build(content)
</div>
<p>Test it out; you should end up with a PDF that looks something like this:</p>
<p><a class="shutterset_" href='http://nefaria.com/wp-content/gallery/miscellaneous-media/reportlab_example1_img1.png' title=''><img src='http://nefaria.com/wp-content/gallery/miscellaneous-media/thumbs/thumbs_reportlab_example1_img1.png' alt='reportlab_example1_img1' class='ngg-singlepic ngg-center' /></a></p>
<p>Of course, this example doesn&#8217;t even scratch the surface of what you can do with reportlab. Hopefully I&#8217;ll post some more examples later on <img src='http://nefaria.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://nefaria.com/2010/08/python-reportlab-example-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autoresponse 1.6.3 (bugfix) Released</title>
		<link>http://nefaria.com/2009/06/autoresponse-163-bugfix-released/</link>
		<comments>http://nefaria.com/2009/06/autoresponse-163-bugfix-released/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 15:22:08 +0000</pubDate>
		<dc:creator>musashi</dc:creator>
				<category><![CDATA[Autoresponse]]></category>
		<category><![CDATA[I.T.]]></category>
		<category><![CDATA[Programming / Scripting]]></category>

		<guid isPermaLink="false">http://nefaria.com/?p=557</guid>
		<description><![CDATA[Autoresponse 1.6.3 has been released. This is a bugfix release that fixed an issue with “case sensitive” e-mail addresses. Basically, UsEr@domain.tld or USER@DOMAIN.TLD — both valid addresses, were not able to set an autoresponse message for user@domain.tld (&#8230;after the user authenticated with the server via SASL of course). This is no longer an issue thanks [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nefaria.com/project_index/autoresponse/" target="_blank">Autoresponse 1.6.3</a> has been released. This is a bugfix release that fixed an issue with “case sensitive” e-mail addresses. Basically, UsEr@domain.tld or USER@DOMAIN.TLD — both valid addresses, were not able to set an autoresponse message for user@domain.tld (&#8230;after the user authenticated with the server via SASL of course). This is no longer an issue thanks to this release. </p>
]]></content:encoded>
			<wfw:commentRss>http://nefaria.com/2009/06/autoresponse-163-bugfix-released/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Autoresponse on HowToForge</title>
		<link>http://nefaria.com/2009/04/autoresponse-on-howtoforge/</link>
		<comments>http://nefaria.com/2009/04/autoresponse-on-howtoforge/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 12:32:37 +0000</pubDate>
		<dc:creator>musashi</dc:creator>
				<category><![CDATA[Autoresponse]]></category>
		<category><![CDATA[I.T.]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[HowToForge]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[Programming / Scripting]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://nefaria.com/?p=341</guid>
		<description><![CDATA[Autoresponse now has a tutorial on HowToForge! Be sure to check it out. I also suggest signing up because there is a wealth of information on there, and with a paid subscription you can download any tutorial as a PDF (other formats are available as well) without the ads, graphics, and other unrelated items&#8230; it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nefaria.com/?page_id=7">Autoresponse</a> now has a tutorial on <a href="http://www.howtoforge.com/how-to-set-up-a-postfix-autoresponder-with-autoresponse">HowToForge</a>! Be sure to check it out. I also suggest signing up because there is a wealth of information on <a href="http://www.howtoforge.com">there</a>, and with a paid subscription you can download any tutorial as a PDF (other formats are available as well) without the ads, graphics, and other unrelated items&#8230; it&#8217;s well worth it.</p>
]]></content:encoded>
			<wfw:commentRss>http://nefaria.com/2009/04/autoresponse-on-howtoforge/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

