<?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>Karl Heinz Kremer&#039;s Ramblings &#187; Photos</title>
	<atom:link href="http://www.khk.net/wordpress/category/photos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.khk.net/wordpress</link>
	<description>Stuff, stuff and more stuff</description>
	<lastBuildDate>Mon, 15 Mar 2010 17:35:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Rye Bread</title>
		<link>http://www.khk.net/wordpress/2010/03/08/rye-bread/</link>
		<comments>http://www.khk.net/wordpress/2010/03/08/rye-bread/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 21:01:34 +0000</pubDate>
		<dc:creator>khk</dc:creator>
				<category><![CDATA[Cooking]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[baking]]></category>
		<category><![CDATA[bread]]></category>
		<category><![CDATA[rye]]></category>
		<category><![CDATA[whole wheat]]></category>

		<guid isPermaLink="false">http://www.khk.net/wordpress/?p=616</guid>
		<description><![CDATA[
			
				
			
		
For a couple of years now, I&#8217;ve been looking for the perfect rye bread recipe. I know, &#8220;perfect&#8221; is a dangerous term to use, but I think I found a recipe that makes beautiful and tasty bread. 
This recipe started out as Daniel Leader&#8217;s Czech Country Bread from his book Local Breads: Sourdough and Whole-Grain [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2010%2F03%2F08%2Frye-bread%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2010%2F03%2F08%2Frye-bread%2F&amp;source=khkremer&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>For a couple of years now, I&#8217;ve been looking for the perfect rye bread recipe. I know, &#8220;perfect&#8221; is a dangerous term to use, but I think I found a recipe that makes beautiful and tasty bread. </p>
<p>This recipe started out as Daniel Leader&#8217;s <a href="http://ostwestwind.twoday.net/stories/4266882/">Czech Country Bread</a> from his book <a href="http://www.amazon.com/gp/product/0393050556?ie=UTF8&#038;tag=spechtshomepa-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0393050556">Local Breads: Sourdough and Whole-Grain Recipes from Europe&#8217;s Best Artisan Bakers</a><img src="http://www.assoc-amazon.com/e/ir?t=spechtshomepa-20&#038;l=as2&#038;o=1&#038;a=0393050556" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />. I like whole grains in my bread, so I experimented with adding different kinds of whole grains &#8211; starting with replacing the white rye with whole grain rye, but eventually I ended up with replacing half of the bread flour with white whole wheat flour.  </p>
<div style="text-align:center;"><a href="http://www.flickr.com/photos/68335338@N00/4435165793" title="View 'Rye Bread' on Flickr.com"><img alt="Rye Bread" src="http://farm5.static.flickr.com/4022/4435165793_1188de57d9.jpg" class="flickr"/></a></div>
<p>150g refreshed whole grain rye sourdough starter<br />
300g water<br />
100g <a href="http://www.kingarthurflour.com/shop/items/king-arthur-white-rye-flour-3-lb">white rye flour</a><br />
200g <a href="http://www.kingarthurflour.com/shop/items/king-arthur-100-organic-white-whole-wheat-flour-2-lb">white whole wheat flour</a><br />
200g unbleached bread flour<br />
1 tsp yeast<br />
1 1/2 tsp sea salt<br />
1 tbsp <a href="http://www.kingarthurflour.com/shop/items/vital-wheat-gluten-16-oz">wheat gluten</a><br />
1 tbsp <a href="http://www.kingarthurflour.com/shop/items/diastatic-malt-powder-16-oz">diastatic malt powder</a></p>
<p>Use a stand mixer to knead all the ingredients into dough (about 8-10 minutes on slow).<br />
Cover the dough and let it rest for about two hours (or until doubled in size).<br />
Give the dough a quick knead and form a loaf.<br />
Cover the dough again and let rise for about 1 1/2 hours. <br />
About one hour into the second rise place a pizza stone in oven on middle rack and a cast iron pan at the bottom of the oven and preheat to 475F.<br />
Sprinkle whole wheat flour on a peel and place the loaf on it.<br />
Score loaf with a very sharp knife.<br />
Place loaf on pizza stone.<br />
Add a cup of ice cubes into the cast iron pan close the door.<br />
Reduce temperature to 425F.<br />
Bake for 45 minutes.<br />
Let the bread cool completely before cutting into it. Yes, I understand that&#8217;s hard to do, but it&#8217;s important. If you want to eat freshly baked (still hot) bread, make baguettes. There is noting better than a fresh piece of bread with some good butter. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.khk.net/wordpress/2010/03/08/rye-bread/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Strawberry Muffins</title>
		<link>http://www.khk.net/wordpress/2009/05/17/strawberry-muffins/</link>
		<comments>http://www.khk.net/wordpress/2009/05/17/strawberry-muffins/#comments</comments>
		<pubDate>Sun, 17 May 2009 20:30:26 +0000</pubDate>
		<dc:creator>khk</dc:creator>
				<category><![CDATA[Cooking]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[baking]]></category>
		<category><![CDATA[healthy]]></category>
		<category><![CDATA[muffin]]></category>
		<category><![CDATA[strawberry]]></category>
		<category><![CDATA[whole wheat flour]]></category>
		<category><![CDATA[yogurt]]></category>

		<guid isPermaLink="false">http://khk.net/wordpress/?p=407</guid>
		<description><![CDATA[
			
				
			
		
Who would have thought that a recipe from a yogurt lid could actually be that delicious&#8230;
Stonyfield Farm is running a campaign to convince people to replace (unhealthy) ingredients with low fat yogurt. To illustrate that, they include a recipe for &#8220;Strawberry Muffins that Melt in Your Mouth&#8221;. Sounds good. I had some extra strawberries that [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F05%2F17%2Fstrawberry-muffins%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F05%2F17%2Fstrawberry-muffins%2F&amp;source=khkremer&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Who would have thought that a recipe from a yogurt lid could actually be that delicious&#8230;</p>
<p><a href="http://stonyfield.com/">Stonyfield Farm</a> is running a campaign to convince people to replace (unhealthy) ingredients with low fat yogurt. To illustrate that, they include a recipe for &#8220;Strawberry Muffins that Melt in Your Mouth&#8221;. Sounds good. I had some extra strawberries that were in desperate need for a recipe.</p>
<p>They look and taste delicious.</p>
<p><a title="View 'StrawberryMuffin-001' on Flickr.com" href="http://www.flickr.com/photos/68335338@N00/3540216816"></a></p>
<p><a title="View 'StrawberryMuffin-001' on Flickr.com" href="http://www.flickr.com/photos/68335338@N00/3540216816"></a></p>
<p><a title="View 'StrawberryMuffin-001' on Flickr.com" href="http://www.flickr.com/photos/68335338@N00/3540216816"></p>
<div style="text-align:center;"><img class="flickr" src="http://farm4.static.flickr.com/3559/3540216816_2eabd53b08.jpg" alt="StrawberryMuffin-001" /></div>
<p></a></p>
<p>Â </p>
<p>Â </p>
<p><a title="View 'StrawberryMuffin-001' on Flickr.com" href="http://www.flickr.com/photos/68335338@N00/3540216816"></a></p>
<p>Â </p>
<p>I usually freeze most of a batch and then have muffins for a few weeks (more like days).</p>
<p>You can find the <a href="http://recipes.stonyfield.com/recipes.cfm?action=details:recipeID=126">recipe on their web site too</a> &#8211; no need to buy some yogurt (just in case you are <a title="Homemade Yogurt" href="http://khk.net/wordpress/2008/05/19/yogurt/">making your own</a>), even though their yogurt is the best I&#8217;ve found this side of the Atlantic.<br />
<!-- Technorati Tags Start --></p>
<p>Technorati Tags:<br />
<a rel="tag" href="http://technorati.com/tag/baking">baking</a>, <a rel="tag" href="http://technorati.com/tag/cooking">cooking</a>, <a rel="tag" href="http://technorati.com/tag/muffin">muffin</a>, <a rel="tag" href="http://technorati.com/tag/yogurt">yogurt</a>, <a rel="tag" href="http://technorati.com/tag/healthy">healthy</a>, <a rel="tag" href="http://technorati.com/tag/strawberry">strawberry</a></p>
<p><!-- Technorati Tags End --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.khk.net/wordpress/2009/05/17/strawberry-muffins/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My Twitter Tools</title>
		<link>http://www.khk.net/wordpress/2009/05/09/my-twitter-tools/</link>
		<comments>http://www.khk.net/wordpress/2009/05/09/my-twitter-tools/#comments</comments>
		<pubDate>Sat, 09 May 2009 17:43:42 +0000</pubDate>
		<dc:creator>khk</dc:creator>
				<category><![CDATA[Photos]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[3rd party client]]></category>
		<category><![CDATA[Greesemonkey]]></category>
		<category><![CDATA[MrTweet]]></category>
		<category><![CDATA[nambu]]></category>
		<category><![CDATA[Seesmic Desktop]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[Topify]]></category>
		<category><![CDATA[tweepler]]></category>
		<category><![CDATA[tweetdeck]]></category>
		<category><![CDATA[Tweetie]]></category>
		<category><![CDATA[Twitter Grader]]></category>

		<guid isPermaLink="false">http://khk.net/wordpress/?p=356</guid>
		<description><![CDATA[
			
				
			
		
I&#8217;ve been on Twitter for a while now, and over time I used a lot of different tools to make working with the twitterverse a bit easier. This post is not about the tools I&#8217;ve written, but the tools I use.
 


3rd Party Clients
Once you get past a handful of people you follow, taming the [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F05%2F09%2Fmy-twitter-tools%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F05%2F09%2Fmy-twitter-tools%2F&amp;source=khkremer&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;ve been on Twitter <a href="http://khk.net/wordpress/2009/03/28/digging-deep-into-history-my-first-tweet/">for a while now</a>, and over time I used a lot of different tools to make working with the twitterverse a bit easier. This post is not about the tools I&#8217;ve written, but the tools I use.</p>
<p><a title="View 'Drops' on Flickr.com" href="http://www.flickr.com/photos/68335338@N00/3517089016"> </a></p>
<div style="text-align:center;"><a title="View 'Drops' on Flickr.com" href="http://www.flickr.com/photos/68335338@N00/3517089016"><img class="flickr" src="http://farm4.static.flickr.com/3370/3517089016_00435a887a.jpg" alt="Drops" /></a></div>
<p><span id="more-356"></span></p>
<h3>3rd Party Clients</h3>
<p>Once you get past a handful of people you follow, taming the flood of tweets in your timeline becomes a fulltime job&#8230; or a 24/7 time waster. Very early on, I realized that I would need a Twitter client that allows me to create groups. This means that I divide the people I follow up into at least three groups:</p>
<ul>
<li>friends and family &#8211; the people I don&#8217;t want to miss a single tweet from</li>
<li>the 2nd line of friends and people who have interesting things to say &#8211; but I wont panic if I miss a couple of tweets from them</li>
<li>the &#8220;others&#8221; &#8211; these are the tweets I resort to when I&#8217;m really bored&#8230;</li>
</ul>
<p>I first looked at <a href="http://www.tweetdeck.com">Tweetdeck</a>, and for a while that seemed like the right solution, but I&#8217;ve been running into more and more problems with it. It&#8217;s a memory and performance hog. Also, when I have to restart it, I lose important tweets.</p>
<p>Then <a href="http://desktop.seesmic.com">Seesmic Desktop</a> came along. It&#8217;s &#8211; just like Tweetdeck &#8211; an Adobe AIR application, but is bit more gentle with your system&#8217;s memory. However, I don&#8217;t like the way I need to configure groups. It&#8217;s one user at a time.</p>
<p>I really like <a href="http://www.atebits.com/tweetie-mac/">Tweetie for the Mac</a> &#8211; if it just would support  groups, that would be my number one 3rd party Twitter client. No other client makes it as simple to see an ongoing conversation &#8211; just double-click on a tweet, and Tweetie will display it.</p>
<p>Right now I&#8217;m using <a href="http://www.nambu.com/">Nambu</a>. It&#8217;s not perfect, but  until Tweetie comes with group support, I&#8217;ll probably stick with it.</p>
<p>When I&#8217;m using the Twitter web interface, I use Firefox with Greasemonkey installed &#8211; that allows me to use &#8220;<a href="http://userscripts.org/scripts/show/40617">Troys Twitter Script</a>&#8220;. It does a lot of things that makes the web interface much more usable:</p>
<ul>
<li>show a conversation</li>
<li>expand short URLs</li>
<li>rudimentary group support</li>
<li>embedded images and YouTube videos</li>
<li>name completion</li>
<li>&#8230;</li>
</ul>
<h3>Twitter On The Go</h3>
<p>I  use the original <a href="http://www.atebits.com/tweetie-iphone/">Tweetie</a> &#8211; the one for the iPhone when I&#8217;m not at my &#8220;big&#8221; computer.</p>
<h3>Web-based Twitter Tools</h3>
<p>When you google &#8220;Twitter Tools&#8221;, you find list of the best 10 or 100 or 1000 tools&#8230; I&#8217;ve tried a few, and most of them have some entertainment potential (hey, who does not want to know their <a href="http://twitter.grader.com/">Twitter Grade</a>?!? But how often to you need to really check if your grade went up or down a bit. Ask your followers about how good a tweeter you are.</p>
<p>I use a couple of tools that I think are valuable.</p>
<p><a href="http://topify.com/">Topify</a> makes it easy to follow or block new followers, and to send and receive DM&#8217;s via email. Go to their web site and watch the video, it&#8217;s good stuff. To make things easier, new-follower emails from Topify contain the MrTweet information about a user. This allows me to usually make a quick decision about following somebody back, or not.</p>
<p>Even though Topify helps me to follow back interesting users, I still have a bunch of older followers to take care of. <a href="http://tweepler.com/">Tweepler</a> helps me to just go down a list of followers, and, based on data &#8211; like number of followers, following and how many tweets per day &#8211; I can then decide if I want to follow back.</p>
<p>If you want to export your followers or followees, use <a href="http://friendorfollow.com/">FriendOrFollow</a> &#8211; it can export all the important information about users in a CSV file that can be imported into Excel, and then you can sort it by whatever criteria you find useful.</p>
<p>I&#8217;ve already mentioned <a href="http://mrtweet.com/khkremer">MrTweet</a> as part of the Topify follower emails. I also use it occasionally to get a better idea of who somebody is on Twitter. MrTweet can also recommend a user based on recommendations by others. If you like my tweets, recommend me on MrTweet&#8230;</p>
<p>So, that&#8217;s it. If you have any tools you want to share, please do so in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.khk.net/wordpress/2009/05/09/my-twitter-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Homemade Pizza</title>
		<link>http://www.khk.net/wordpress/2009/04/27/homemade-pizza/</link>
		<comments>http://www.khk.net/wordpress/2009/04/27/homemade-pizza/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 02:39:00 +0000</pubDate>
		<dc:creator>khk</dc:creator>
				<category><![CDATA[Cooking]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[baking]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[italian food]]></category>
		<category><![CDATA[pizza]]></category>
		<category><![CDATA[recipe]]></category>
		<category><![CDATA[sauce]]></category>

		<guid isPermaLink="false">http://khk.net/wordpress/?p=336</guid>
		<description><![CDATA[
			
				
			
		
There is only one way to make pizza, and that&#8217;s the Italian way&#8230; 
Pizza is three things: a crust, sauce and toppings. And all these things are pretty easy make &#8211; even from scratch. And just to save some time, we&#8217;ll skip the homemade mozzarella and use store bought. 



Let&#8217;s start with the crust, the [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F04%2F27%2Fhomemade-pizza%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F04%2F27%2Fhomemade-pizza%2F&amp;source=khkremer&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>There is only one way to make pizza, and that&#8217;s the Italian way&#8230; </p>
<p>Pizza is three things: a crust, sauce and toppings. And all these things are pretty easy make &#8211; even from scratch. And just to save some time, we&#8217;ll skip the <a href="http://khk.net/wordpress/2008/05/01/homemade-mozzarella/">homemade mozzarella</a> and use store bought. </p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3493703697" title="View 'pizza-013' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3409/3493703697_050d2fa6bb.jpg" alt="pizza-013" class="flickr" /></div>
<p></a></p>
<p>Let&#8217;s start with the crust, the dough needs to rest for a few hours, that gives us enough time to work on the sauce and the toppings.</p>
<p><span id="more-336"></span></p>
<p><H3>Pizza Dough</H3><br />
As I said, we are doing this from scratch, so no pre-made dough from the grocery store. Here is what we need:</p>
<ul>
<li>2 cups bread flour</li>
<li>1 pckt rapid rise yeast (about 2 tsp)</li>
<li>1/4 tsp salt</li>
<li>1 tsp sugar</li>
<li>2 tbs olive oil</li>
<li>about 1/2 cup warm water</li>
</ul>
<p>I use my Kitchenaid mixer to prepare the dough. It can be done manually, but it&#8217;s a lot of kneading to form the gluten. Add all the dry ingredients to the mixing bowl and mix with the dough hook for a few seconds. Add the olive oil. Slowly add the water. Don&#8217;t add all of the water at first, leave a few tablespoons and watch the dough. If the dough does not come together after about two minutes, add a tablespoon at a time and let the dough mix for about one minute. Mix for about 10 minutes. The dough should form a ball. Cover the dough ball with oil and let rest in a covered bowl for about three hours or overnight in the fridge. </p>
<p><H3>Sauce</H3><br />
It&#8217;s not complicated to make good sauce from scratch. You could just buy a jar, but in just a few minutes, and with only a few ingredients, it&#8217;s no problem to come up with some fantastic tomato sauce.</p>
<ul>
<li>2 tbs olive oil</li>
<li>1 chopped onion</li>
<li>1 garlic glove</li>
<li>1/4 cup white wine</li>
<li>1 can of pureed or diced tomatoes</li>
<li>1 can of tomato paste</li>
<li>1/4 tsp salt</li>
<li>pepper</li>
<li>1/4 tsp dried oregano</li>
</ul>
<p>Head a sauce pan with the olive and add the chopped onion and salt. Saute over medium heat until the onion is translucent. Add the chopped garlic (or use a garlic press). After about a minute, add the white wine and wait until almost all of it is evaporated. Add the pureed or diced tomatoes and the tomato paste, add a some freshly ground black pepper and oregano. Let the sauce cook over low heat for at least 15 minutes. </p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3494516414" title="View 'pizza-001' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3576/3494516414_040c51dc23_m.jpg" alt="pizza-001" class="flickr" /></div>
<p></a></p>
<p><H3>Thin and Flat</H3></p>
<p>Preheat the oven with a pizza stone to 550F (if your oven does not go that high, crank it up as high as possible). Make sure that the pizza stone has enough time to get hot enough. </p>
<p>Now comes the most complicated step in the process: Forming the crust. Sprinkle your work surface with flour and place the dough on it, flatten the dough ball/heap/mountain and sprinkle more flour on top of the dough. </p>
<p>Press the dough into as large a disk as you can without ripping holes into it &#8211; use more flour if necessary. Then slowly stretch it out while rotating the disk.</p>
<p>When done, sprinkle corn meal on the peel and transfer the dough to the peel.</p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3493699197" title="View 'pizza-002' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3545/3493699197_0783b83593_m.jpg" alt="pizza-002" class="flickr" /></div>
<p></a></p>
<p><H3>Toppings</H3></p>
<ul>
<li>1/4 lbs prosciutto, sliced very thin</li>
<li>2 cremini mushrooms</li>
<li>marinated artichoke hearts cut into smaller pieces</li>
<li>fresh mozzarella, diced</li>
</ul>
<p>I always remove most of the fat from the prosciutto &#8211; makes for a healthier pizza.</p>
<p>Start out by ladling some of the sauce on the crust and spread it out. Don&#8217;t drench the crust, try to get away with as little sauce as possible while still covering the dough.</p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3494517362" title="View 'pizza-003' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3378/3494517362_805578ff6d_m.jpg" alt="pizza-003" class="flickr" /></div>
<p></a> </p>
<p>Then add the toppings, starting with prosciutto</p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3494517854" title="View 'pizza-004' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3586/3494517854_2d7884783a_m.jpg" alt="pizza-004" class="flickr" /></div>
<p></a></p>
<p>followed by the artichoke hearts</p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3493700819" title="View 'pizza-005' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3592/3493700819_7076df950c_m.jpg" alt="pizza-005" class="flickr" /></div>
<p></a></p>
<p>and the cheese</p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3493701241" title="View 'pizza-006' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3376/3493701241_9a10b588db_m.jpg" alt="pizza-006" class="flickr" /></div>
<p></a></p>
<p>and the mushrooms</p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3493701641" title="View 'pizza-007' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3300/3493701641_654bf3e605_m.jpg" alt="pizza-007" class="flickr" /></div>
<p></a></p>
<p>and finally sprinkle oregano over the pizza. </p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3494519676" title="View 'pizza-008' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3412/3494519676_235e14bc1f_m.jpg" alt="pizza-008" class="flickr" /></div>
<p></a></p>
<p>Bake for about eight minutes, slightly longer when the oven is not as hot. </p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3494520434" title="View 'pizza-010' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3631/3494520434_bb6cf349fd_m.jpg" alt="pizza-010" class="flickr" /></div>
<p></a></p>
<p>The cheese should have some brown spots, and be bubbly when removed from the oven.</p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3493703049" title="View 'pizza-011' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3538/3493703049_63dc39d744.jpg" alt="pizza-011" class="flickr" /></div>
<p></a></p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.khk.net/wordpress/2009/04/27/homemade-pizza/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Acrobat Plug-Ins</title>
		<link>http://www.khk.net/wordpress/2009/04/14/acrobat-plug-ins/</link>
		<comments>http://www.khk.net/wordpress/2009/04/14/acrobat-plug-ins/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 00:40:12 +0000</pubDate>
		<dc:creator>khk</dc:creator>
				<category><![CDATA[Acrobat]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[acrobat plug-in]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[plug-in]]></category>

		<guid isPermaLink="false">http://khk.net/wordpress/?p=326</guid>
		<description><![CDATA[
			
				
			
		
If you&#8217;ve seen my resume &#8211; or talked to me lately, you know that I create Acrobat plug-ins for a living. When people hear that, they usually think something like &#8220;Don&#8217;t forget to pick up the dry cleaning&#8221; or &#8220;I need to bring my cat to the vet for the rabies shot&#8221;&#8230; Yes, I understand, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F04%2F14%2Facrobat-plug-ins%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F04%2F14%2Facrobat-plug-ins%2F&amp;source=khkremer&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>If you&#8217;ve seen my <a href="http://khk.net/wordpress/resume/">resume</a> &#8211; or talked to me lately, you know that I create Acrobat plug-ins for a living. When people hear that, they usually think something like &#8220;Don&#8217;t forget to pick up the dry cleaning&#8221; or &#8220;I need to bring my cat to the vet for the rabies shot&#8221;&#8230; Yes, I understand, this may not be the most exciting topic, but probably only because you don&#8217;t know enough about what these &#8220;plug-ins&#8221; are, so let me explain.</p>
<p><a title="View 'Conservatory-038' on Flickr.com" href="http://www.flickr.com/photos/68335338@N00/3440056708"></p>
<div style="text-align:center;"><img class="flickr" src="http://farm4.static.flickr.com/3584/3440056708_32cec4e199.jpg" alt="Conservatory-038" /></div>
<p></a></p>
<p><a title="View 'Conservatory-038' on Flickr.com" href="http://www.flickr.com/photos/68335338@N00/3440056708"></a></p>
<p>Â </p>
<p>Adobe Acrobat is a very powerful tool, more powerful that most users actually realize. I wont go into any details about how powerful exactly &#8211; at least not today. Lets just say that it has something for everybody. However, you may need something in addition to what Adobe provides, something that still is in the general area of PDF. Adobe may not have considered your needs because either the target market for &#8220;your&#8221; feature is too small, or to far out there&#8230; Or you are so far ahead of everybody else that they have not even thought about that feature yet.</p>
<p>Adobe did however do a very interesting thing: They created an interface that allows 3rd party developers to create solutions based on Adobe Acrobat &#8211; using plug-ins. It is a very powerful interface, and hence not something that you can pick up in an afternoon. There are several thousand pages of API documentation that one needs to understand before a plug-in should be written.</p>
<p>A plug-in is &#8211; from a technical point of view &#8211; a module or library that gets loaded dynamically at runtime. Acrobat will scan it&#8217;s plug-ins directory and will load any modules it finds. Once loaded, such a plug-in can extend Acrobat by e.g. adding menu items, toolbuttons, or event handlers (e.g. a function that gets executed whenever a documents gets loaded).</p>
<p><a title="View 'Conservatory-013' on Flickr.com" href="http://www.flickr.com/photos/68335338@N00/3439227641"></p>
<div style="text-align:center;"><img class="flickr" src="http://farm4.static.flickr.com/3577/3439227641_2f7148f1cf.jpg" alt="Conservatory-013" /></div>
<p></a></p>
<p><a title="View 'Conservatory-013' on Flickr.com" href="http://www.flickr.com/photos/68335338@N00/3439227641"></a></p>
<p>Â </p>
<p>Interestingly enough, the plug-ins directory of a fresh Adobe Acrobat installation is not empty&#8230; A lot of Acrobat&#8217;s functionality is actually implemented as plug-ins. You can verify that on a Windows system by temporarily disabling all plug-ins by holding down the Shift key when bringing up Acrobat. That will load the application without any plug-ins. When you compare the toolbar or the menu bar with a fully loaded application, you&#8217;ll see what portion of the Acrobat core functionality is actually implemented in plug-ins.</p>
<p>The plug-in interface has different abstraction levels (COS, PDE, AV, &#8230;). If there is enough interest, I will provide information about how to navigate that API, and how to structure a plug-in.</p>
<p>The Acrobat SDK is available for free from Adobe&#8217;s <a href="http://www.adobe.com/devnet/acrobat/">Acrobat Development Center</a>.</p>
<p>Here are a few examples of commercially available plug-ins that I&#8217;ve used:</p>
<ul>
<li><em>Enfocus PitStop Professional:</em><br />
This is a preflight tool.</li>
<li><em>Quite Imposing Plus:</em><br />
The best PDF based imposition tool that I am aware of.</li>
<li><em>Enfocus Browser:</em><br />
Allows to review and change the internal structure of a PDF file.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.khk.net/wordpress/2009/04/14/acrobat-plug-ins/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Gutting a PDF</title>
		<link>http://www.khk.net/wordpress/2009/04/08/gutting-a-pdf/</link>
		<comments>http://www.khk.net/wordpress/2009/04/08/gutting-a-pdf/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 15:23:31 +0000</pubDate>
		<dc:creator>khk</dc:creator>
				<category><![CDATA[PDF]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[cos]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[fish]]></category>
		<category><![CDATA[itext]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[meta data]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xmp]]></category>

		<guid isPermaLink="false">http://khk.net/wordpress/?p=314</guid>
		<description><![CDATA[
			
				
			
		
OK, I have to admit, the title is just for show   I don&#8217;t really want to gut a PDF &#8211; that would mean to kill it, and PDFs are pretty useful, so we should treat them well&#8230;



What I&#8217;m after is to extract arbitrary information from a PDF file &#8211; information that may not [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F04%2F08%2Fgutting-a-pdf%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F04%2F08%2Fgutting-a-pdf%2F&amp;source=khkremer&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>OK, I have to admit, the title is just for show <img src='http://www.khk.net/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I don&#8217;t really want to gut a PDF &#8211; that would mean to kill it, and PDFs are pretty useful, so we should treat them well&#8230;</p>
<p><a href="http://www.flickr.com/photos/68335338@N00/2651668890" title="View 'He's Dead, Jim!' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3146/2651668890_89bd1c3971.jpg" alt="He's Dead, Jim!" class="flickr" /></div>
<p></a></p>
<p>What I&#8217;m after is to extract arbitrary information from a PDF file &#8211; information that may not be accessible in any other way. Some 3rd party Acrobat plug-ins save information in a PDF file so that once the document is opened again, the plug-in &#8220;knows&#8221; that the current file was already processed, or that a user interface window can be populated with the previously saved settings, or &#8230; There are many reasons why that could come in handy. </p>
<p>If you take a look at the <a href="http://www.adobe.com/devnet/pdf/pdf_reference.html">PDF Reference document</a>, you can find all the information necessary to understand how data can be saved in a PDF file. Adobe does allow 3rd party developers to store information in a PDF file as long as it is clear that the data is private. The developer can make sure that nobody else reads that information by accident by using a four letter developer prefix for all such data. </p>
<p>I&#8217;ve mentioned before that there are tools that allow us to look at the structure of a PDF file (e.g. the Enfocus Browser, or with Acrobat&#8217;s own Preflight tool). For now let&#8217;s assume that the data we are interested in is actually saved in the PDF&#8217;s metadata stream &#8211; if you don&#8217;t know what that means, please go back to the PDF Reference document. </p>
<p>[more after the jump]  <span id="more-314"></span>For this example, let&#8217;s try something simple that just illustrates the process and the tools we need. With that knowledge and background, it is easy to perform more sophisticated tasks with PDF files. </p>
<p>Every newer PDF files does not only contain the meta data in form of the document info dictionary, but also as XMP meta data &#8211; this is a XML based format. Let&#8217;s try to extract that XML data stream from a PDF file. </p>
<p>Because I don&#8217;t want to hide the interesting parts of the solution by infrastructure, I am hardcoding the PDF filename and the text output file name, I&#8217;m also assuming that the iText library JAR file is in the same directory as the source code. </p>
<p>Here is the complete program, I&#8217;ll go through the different sections once we&#8217;ve compiled and executed it:<br />
<pre><pre>
/* based on some sample code from iText library */

import java.io.*;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfDictionary;
import com.lowagie.text.pdf.PdfName;
import com.lowagie.text.pdf.PdfStream;
import com.lowagie.text.pdf.PRStream;

public class MetaData {

&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {

&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;Trying to extract XML metadata&quot;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PdfReader reader = new PdfReader(&quot;first.pdf&quot;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PdfDictionary dict = reader.getCatalog();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PdfDictionary metaData = dict.getAsStream(new PdfName(&quot;Metadata&quot;));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (metaData == null)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;Cannot get metaData&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (metaData.isStream())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream f = new FileOutputStream(&quot;metaData.txt&quot;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[] data = PdfReader.getStreamBytes((PRStream) metaData);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.write(data);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.close();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;Metadata is not a stream object&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (Exception de) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de.printStackTrace();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
}
</pre></pre></p>
<p>Let&#8217;s assume that the source code is in a file named MetaData.java, to compile and run the program, we would need to execute the following commands:<br />
<pre><pre>
javac MetaData.java
java MetaData
</pre></pre></p>
<p>Before you execute the program, make sure that there is a PDF file named &#8220;first.pdf&#8221; in the same directory as the program and the iText library. </p>
<p><H3>How Does It Work?</H3><br />
At first we need to import a bunch of &#8220;stuff&#8221; &#8211; we need the Java IO system, and then a few classes from the iText library:<br />
<pre><pre>
import java.io.*;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfDictionary;
import com.lowagie.text.pdf.PdfName;
import com.lowagie.text.pdf.PdfStream;
import com.lowagie.text.pdf.PRStream;
</pre></pre></p>
<p>In the next few lines, we define our class and declare our main function. Also, the whole iText related code is in one try/catch block. For a real application, you want to create smaller try/catch blocks so that you can recover from problems.<br />
<pre><pre>
public class MetaData {

&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {

&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;Trying to extract XML metadata&quot;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {
</pre></pre></p>
<p>Now we are ready to create a new PdfReader object &#8211; this is how iText accesses the data in a PDF file. From that PdfReader object we can then get the &#8220;Catalog&#8221; which is the root object of all COS objects that are used in this dococument:<br />
<pre><pre>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PdfReader reader = new PdfReader(&quot;first.pdf&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PdfDictionary dict = reader.getCatalog();
</pre></pre></p>
<p>The meta data is stored as a stream (if you don&#8217;t know what that is, read up on it in the PDF spec) as a direct child of the Catalog dictionary (again, if you don&#8217;t know what that is, read up on it). This means that we can access it without any further navigating through the COS objects. For a real project, chances are that you have to go a few more levels deep into the COS structure. The PdfDictionary object has a method to get a stream:<br />
<pre><pre>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PdfDictionary metaData = dict.getAsStream(new PdfName(&quot;Metadata&quot;));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (metaData == null)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;Cannot get metaData&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
</pre></pre></p>
<p>When it comes to software, I&#8217;m not a very trusting person, so I want to make sure that we are indeed dealing with a stream and nothing else. Therefore I will call the isStream() method to find out if that&#8217;s the case. If we are dealing with a stream, I&#8217;m creating a new FileOutputStream (a text file that will receive the XML data), and then I am reading the actual COS stream data and writing it to the output file. iText will take care of any filters that were applied to the stream data (e.g. compression), so I don&#8217;t have to deal with that directly.<br />
<pre><pre>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (metaData.isStream())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream f = new FileOutputStream(&quot;metaData.txt&quot;);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[] data = PdfReader.getStreamBytes((PRStream) metaData);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.write(data);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.close();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;Metadata is not a stream object&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
</pre></pre></p>
<p>That&#8217;s it. Now we just need to make sure that we do have  catch block for our exception handler:<br />
<pre><pre>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch (Exception de) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; de.printStackTrace();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
}

</pre></pre></p>
<p>Instead of saving the XML meta data to a file, we could have used a Java based XML parser and extracted data from it. </p>
<p>The same technique can also be used to read other data from a PDF file (e.g. names, numbers, &#8230;).</p>
<p>Let me know if you have more questions about either iText, or how to access information in a PDF file with it. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.khk.net/wordpress/2009/04/08/gutting-a-pdf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Moo Business Cards</title>
		<link>http://www.khk.net/wordpress/2009/03/29/my-moo-business-cards/</link>
		<comments>http://www.khk.net/wordpress/2009/03/29/my-moo-business-cards/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 22:09:32 +0000</pubDate>
		<dc:creator>khk</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Photos]]></category>

		<guid isPermaLink="false">http://khk.net/wordpress/?p=302</guid>
		<description><![CDATA[
			
				
			
		
I needed business cards. The usual recommendation is to go with one of the free offers (e.g. VistaPrint or HP), but that&#8217;s not me&#8230; 
I wanted cards that would not only show off some of my more creative side, but also cards that would stick out &#8211; figuratively and literally. 
In the past, I&#8217;ve had [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F03%2F29%2Fmy-moo-business-cards%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2009%2F03%2F29%2Fmy-moo-business-cards%2F&amp;source=khkremer&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>I needed business cards. The usual recommendation is to go with one of the free offers (e.g. <a href="http://www.vistaprint.com">VistaPrint</a> or <a href="http://www.marketsplash.com">HP</a>), but that&#8217;s not me&#8230; </p>
<p>I wanted cards that would not only show off some of my more creative side, but also cards that would stick out &#8211; figuratively and literally. </p>
<p>In the past, I&#8217;ve had the <a href="http://www.moo.com/products/minicards.php">Moo mini cards</a>, but they don&#8217;t make for good business cards because of the restricted space on them. I needed to fit more information on a card. Moo also makes <a href="http://www.moo.com/products/business_cards.php">business cards</a> so I started to collect a few images that I wanted on the backs of my cards, and worked on the design. </p>
<p>When I received the cards in the mail, I was impressed with the print, but also the paper quality. The cards stick out for two reasons: They look great, and they are of a different size than the regular US business cards: They are a little wider, but not as tall (I use them in portrait orientation). </p>
<p>Take a look:<br />
<a href="http://www.flickr.com/photos/68335338@N00/3396645056" title="View 'Moo Business Cards' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3424/3396645056_2c1fd6df4c.jpg" alt="Moo Business Cards" class="flickr" /></div>
<p></a></p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3396645524" title="View 'Moo Business Cards' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3639/3396645524_8d808bec02.jpg" alt="Moo Business Cards" class="flickr" /></div>
<p></a></p>
<p>Because I don&#8217;t want late night calls from people I don&#8217;t know, I&#8217;ve removed part of my phone numbers, and my street address. The actual cards of course do contain that information. </p>
<p><a href="http://www.flickr.com/photos/68335338@N00/3396645918" title="View 'Moo Business Cards' on Flickr.com">
<div style="text-align:center;"><img src="http://farm4.static.flickr.com/3617/3396645918_cca8d854b4.jpg" alt="Moo Business Cards" class="flickr" /></div>
<p></a></p>
<p>All the images that I&#8217;ve used are in my <a href="http://www.flickr.com/photos/khkremer/sets/72157604168213555/">Moo set on Flickr</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.khk.net/wordpress/2009/03/29/my-moo-business-cards/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>What is it with Cats and Remote Controls?</title>
		<link>http://www.khk.net/wordpress/2008/11/01/what-is-it-with-cats-and-remote-controls/</link>
		<comments>http://www.khk.net/wordpress/2008/11/01/what-is-it-with-cats-and-remote-controls/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 03:59:24 +0000</pubDate>
		<dc:creator>khk</dc:creator>
				<category><![CDATA[Funny]]></category>
		<category><![CDATA[Photos]]></category>

		<guid isPermaLink="false">http://khk.net/wordpress/?p=194</guid>
		<description><![CDATA[
			
				
			
		
Whenever I cannot find my remote, I have to look under the cat&#8230;

]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2008%2F11%2F01%2Fwhat-is-it-with-cats-and-remote-controls%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2008%2F11%2F01%2Fwhat-is-it-with-cats-and-remote-controls%2F&amp;source=khkremer&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Whenever I cannot find my remote, I have to look under the cat&#8230;<br />
<a href="http://www.flickr.com/photos/68335338@N00/2993564049" title="View 'Cat and Remote Control' on Flickr.com"><img src="http://farm4.static.flickr.com/3023/2993564049_ca97c2e62f.jpg" alt="Cat and Remote Control" class="flickr" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.khk.net/wordpress/2008/11/01/what-is-it-with-cats-and-remote-controls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Niagara Falls</title>
		<link>http://www.khk.net/wordpress/2008/09/22/niagara-falls/</link>
		<comments>http://www.khk.net/wordpress/2008/09/22/niagara-falls/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 10:10:11 +0000</pubDate>
		<dc:creator>khk</dc:creator>
				<category><![CDATA[Photos]]></category>

		<guid isPermaLink="false">http://khk.net/wordpress/?p=185</guid>
		<description><![CDATA[
			
				
			
		


]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2008%2F09%2F22%2Fniagara-falls%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2008%2F09%2F22%2Fniagara-falls%2F&amp;source=khkremer&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://www.flickr.com/photos/68335338@N00/2865478683" title="View 'Niagara Falls' on Flickr.com"><img src="http://farm4.static.flickr.com/3281/2865478683_2c0ec2db7d.jpg" alt="Niagara Falls" class="flickr" /></a></p>
<p><a href="http://www.flickr.com/photos/68335338@N00/2865477895" title="View 'Butterfly' on Flickr.com"><img src="http://farm4.static.flickr.com/3089/2865477895_811934a13f.jpg" alt="Butterfly" class="flickr" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.khk.net/wordpress/2008/09/22/niagara-falls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seabreeze</title>
		<link>http://www.khk.net/wordpress/2008/09/20/seabreeze/</link>
		<comments>http://www.khk.net/wordpress/2008/09/20/seabreeze/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 12:54:37 +0000</pubDate>
		<dc:creator>khk</dc:creator>
				<category><![CDATA[Photos]]></category>

		<guid isPermaLink="false">http://khk.net/wordpress/?p=176</guid>
		<description><![CDATA[
			
				
			
		



]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2008%2F09%2F20%2Fseabreeze%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.khk.net%2Fwordpress%2F2008%2F09%2F20%2Fseabreeze%2F&amp;source=khkremer&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://www.flickr.com/photos/68335338@N00/2865476753" title="View 'Carousel Organ' on Flickr.com"><img src="http://static.flickr.com/3128/2865476753_59d6c5ed24.jpg" alt="Carousel Organ" class="flickr" /></a><br />
<a href="http://www.flickr.com/photos/68335338@N00/2866306760" title="View 'Music Express' on Flickr.com"><img src="http://static.flickr.com/3183/2866306760_71a94be997.jpg" alt="Music Express" class="flickr" /></a><br />
<a href="http://www.flickr.com/photos/68335338@N00/2867158655" title="View 'Tube' on Flickr.com"><img src="http://farm4.static.flickr.com/3032/2867158655_ec92835b70.jpg" alt="Tube" border="0" class="flickr" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.khk.net/wordpress/2008/09/20/seabreeze/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
