<?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>Quick PDF Library Blog &#187; Tips &amp; Tutorials</title>
	<atom:link href="http://www.quickpdflibrary.com/blog/category/tips-and-tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.quickpdflibrary.com/blog</link>
	<description>News, tips and information about the Quick PDF Library</description>
	<lastBuildDate>Thu, 02 Feb 2012 21:49:02 +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>Shared Content Streams and Quick PDF Library</title>
		<link>http://www.quickpdflibrary.com/blog/2012/02/shared-content-streams-and-quick-pdf-library/</link>
		<comments>http://www.quickpdflibrary.com/blog/2012/02/shared-content-streams-and-quick-pdf-library/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 11:59:34 +0000</pubDate>
		<dc:creator>Rowan</dc:creator>
				<category><![CDATA[Quick PDF Library]]></category>
		<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[content streams]]></category>
		<category><![CDATA[RemoveSharedContentStreams]]></category>
		<category><![CDATA[shared content streams]]></category>

		<guid isPermaLink="false">http://www.quickpdflibrary.com/blog/?p=673</guid>
		<description><![CDATA[A lot of PDF tools expect all the pages of a PDF to have individual content streams. But it&#8217;s technically possible for two or more pages to reference the exact same content stream, either entirely or even pieces of content stream parts. 10 0 obj &#60;&#60; /Type /Page /Contents [ 11 0 R 12 0 [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of PDF tools expect all the pages of a PDF to have individual content streams.</p>
<p>But it&#8217;s technically possible for two or more pages to reference the exact same content stream, either entirely or even pieces of content stream parts.</p>
<p>10 0 obj<br />
&lt;&lt;<br />
/Type /Page<br />
/Contents [ <span style="color: #ff6600;">11 0 R</span> 12 0 R ]<br />
&gt;&gt;</p>
<p>15 0 obj<br />
&lt;&lt;<br />
/Type /Page<br />
/Contents [ 18 0 R <span style="color: #ff6600;">11 0 R</span> ]<br />
&gt;</p>
<p>In this example, the page defined by object 10 has two content stream parts, stored in objects 11 and 12. The page in object 15 also has two content stream parts, but the second part is the same object 11 used by the first page – this is a shared content stream.</p>
<p>If a PDF is structured that way, any changes to one page will also appear on the other page with the shared content stream.</p>
<p>The PDF specification doesn&#8217;t forbid this at all and Adobe Acrobat and Adobe Reader both seem happy with files like this. It&#8217;s quite a useful trick. In fact Quick PDF Library&#8217;s ClonePages function uses this exact technique to allow many pages to share a single content stream without increasing the size of the file.</p>
<p>Some PDF software might not be able to read files structured like this, and most PDF tools will have unpredictable results when doing things like extracting or deleting pages.</p>
<p>When deleting a page from a PDF, it makes sense to delete the content streams that describe the page and not just the page dictionary otherwise there would be unused data in the output PDF, wasted space. Quick PDF Library&#8217;s DeletePages function does exactly that, it clears all the content stream parts (sets them to an empty string) and then deletes the page dictionary.</p>
<p>So if a page shares content streams with other pages, and is then deleted with DeletePages, the other pages will be affected too.</p>
<p>The RemoveSharedContentStreams function cycles through all the pages in the document building up a list of stream objects in the /Contents array. If any shared content streams are found they are left intact for one page and copies are made for any other pages using that same content.</p>
<p>This process might take a long time on PDFs with thousands of pages.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quickpdflibrary.com/blog/2012/02/shared-content-streams-and-quick-pdf-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick PDF Library 8 API Changes</title>
		<link>http://www.quickpdflibrary.com/blog/2011/09/quick-pdf-library-8-api-changes/</link>
		<comments>http://www.quickpdflibrary.com/blog/2011/09/quick-pdf-library-8-api-changes/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 13:58:54 +0000</pubDate>
		<dc:creator>Rowan</dc:creator>
				<category><![CDATA[Quick PDF Library]]></category>
		<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[quick-pdf]]></category>
		<category><![CDATA[upgrade instructions]]></category>
		<category><![CDATA[version 8]]></category>

		<guid isPermaLink="false">http://www.quickpdflibrary.com/blog/?p=589</guid>
		<description><![CDATA[Quick PDF Library 8 is a major new version of Quick PDF Library and contains a few changes to the API that were necessary to provide native support for Unicode and to improve the way secured PDF files are handled by the library. We also took this opportunity to rename some functions which used terms [...]]]></description>
			<content:encoded><![CDATA[<p>Quick PDF Library 8 is a major new version of Quick PDF Library and contains a few changes to the API that were necessary to provide native support for Unicode and to improve the way secured PDF files are handled by the library. We also took this opportunity to rename some functions which used terms that conflicted with terms used by Acrobat.</p>
<p>This document contains a list of items that developers looking to upgrade to Quick PDF Library 8 should pay attention to. Changes to code may be required in order for your projects to compile using the new version.</p>
<h3 class="c0"><a name="h.b300t2z4dcnd"></a><span class="c11">1. Changed functions definitions</span></h3>
<ul class="c15">
<li class="c2 c0"><span>The </span><span class="c3">LoadFromFile</span><span>, </span><span class="c3">LoadFromString</span><span>, </span><span class="c3">LoadFromVariant</span><span> and </span><span class="c3">LoadFromStream</span><span> functions now have a </span><span class="c3">Password</span><span> parameter. Note functionality changes below.</span></li>
<li class="c2 c0"><span>The </span><span class="c3">ExtractFilePages</span><span> and </span><span class="c3">GetFileMetadata</span><span> functions now have a </span><span class="c3">Password</span><span> parameter.</span></li>
<li class="c2 c0"><span>All functions that previously returned or accepted 8-bit character strings (either UTF-8 encoded, WinAnsi encoding or unspecified encoding) now use UTF-16 Unicode strings.</span></li>
<li class="c0 c2"><span>Certain functions continue to accept or return 8-bit data, others have been renamed to more easily facilitate working with binary data.</span></li>
<li class="c2 c0"><span>All the text drawing functions (such as </span><span class="c3">DrawText</span><span>, </span><span class="c3">DrawHTMLText</span><span>) allow the text to be specified using UTF-16 Unicode strings. The fonts automatically convert the text string’s Unicode characters to the appropriate encoding for storing in the content stream.</span></li>
</ul>
<h3 class="c0"><a name="h.b300t2z4dcnd"></a><span class="c11">2. </span><span class="c11">Renamed functions</span></h3>
<ul class="c15">
<li class="c2 c0"><span>The fullowing functions have been renamed due to the changes from 8-bit to 16-bit strings. The change results in two new functions to replace each original function:</span></li>
</ul>
<table style="margin-left: auto; margin-right: auto;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="c12">
<p class="c0"><span class="c3">GetObjectSource</span></p>
</td>
<td class="c5">
<p class="c0"><span>GetObjectToString (Delphi and DLL)</span></p>
<p class="c0"><span>GetObjectToVariant (ActiveX)</span></p>
</td>
</tr>
<tr>
<td class="c12">
<p class="c0"><span class="c3">SetObjectSource</span></p>
</td>
<td class="c5">
<p class="c0"><span>SetObjectFromString (Delphi and DLL)</span></p>
<p class="c0"><span>SetObjectFromVariant (ActiveX)</span></p>
</td>
</tr>
<tr>
<td class="c12">
<p class="c0"><span class="c3">GetPageContent</span></p>
</td>
<td class="c5">
<p class="c0"><span>GetPageContentToString (Delphi and DLL)</span></p>
<p class="c0"><span>GetPageContentToVariant (ActiveX)</span></p>
<p class="c0"><span>* Note functionality changes listed below</span></p>
</td>
</tr>
<tr>
<td class="c12">
<p class="c0"><span class="c3">SetPageContent</span></p>
</td>
<td class="c5">
<p class="c0"><span>SetPageContentFromString (Delphi and DLL)</span></p>
<p class="c0"><span>SetPageContentFromVariant (ActiveX)</span></p>
<p class="c0"><span>* Note functionality changes listed below</span></p>
</td>
</tr>
<tr>
<td class="c12">
<p class="c0"><span class="c3">DAGetPageContent</span></p>
</td>
<td class="c5">
<p class="c0"><span>DAGetPageContentToString (Delphi and DLL)</span></p>
<p class="c0"><span>DAGetPageContentToVariant (ActiveX)</span></p>
</td>
</tr>
<tr>
<td class="c12">
<p class="c0"><span class="c3">DAGetObjectSource</span></p>
</td>
<td class="c5">
<p class="c0"><span>DAGetObjectToString (Delphi and DLL)</span></p>
<p class="c0"><span>DAGetObjectToVariant (ActiveX)</span></p>
</td>
</tr>
<tr>
<td class="c12">
<p class="c0"><span class="c3">ExtractFilePageContent</span></p>
</td>
<td class="c5">
<p class="c0"><span>ExtractFilePageContentToString (Delphi and DLL)</span></p>
<p class="c0"><span>ExtractFilePageContentToVariant (ActiveX)</span></p>
</td>
</tr>
</tbody>
</table>
<ul class="c15">
<li class="c0 c17"><span>In QPL v7 the term “layer” was used to describe a part of a page’s content stream. This conflicted with Adobe’s use of the term “layer” for the PDF feature known as optional content groups. To avoid confusion, all the layer functions have been renamed:</span></li>
</ul>
<table class="c10" style="margin-left: auto; margin-right: auto;" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="c12">
<p class="c0 c9"><span class="c3">SetLayerOptional</span></p>
</td>
<td class="c6">
<p class="c0 c9"><span>SetContentStreamOptional</span></p>
</td>
</tr>
<tr class="c1">
<td class="c12">
<p class="c0 c9"><span class="c3">LayerCount</span></p>
</td>
<td class="c6">
<p class="c0 c9"><span>ContentStreamCount</span></p>
</td>
</tr>
<tr class="c1">
<td class="c12">
<p class="c0 c9"><span class="c3">CombineLayers</span></p>
</td>
<td class="c6">
<p class="c0 c9"><span>CombineContentStreams</span></p>
</td>
</tr>
<tr class="c1">
<td class="c12">
<p class="c0 c9"><span class="c3">NewLayer</span></p>
</td>
<td class="c6">
<p class="c0 c9"><span>NewContentStream</span></p>
</td>
</tr>
<tr class="c1">
<td class="c12">
<p class="c0 c9"><span class="c3">SelectLayer</span></p>
</td>
<td class="c6">
<p class="c0 c9"><span>SelectContentStream</span></p>
</td>
</tr>
<tr class="c1">
<td class="c12">
<p class="c0 c9"><span class="c3">EditableLayer</span></p>
</td>
<td class="c6">
<p class="c0 c9"><span>EditableContentStream</span></p>
</td>
</tr>
<tr class="c1">
<td class="c12">
<p class="c0 c9"><span class="c3">MoveLayer</span></p>
</td>
<td class="c6">
<p class="c0 c9"><span>MoveContentStream</span></p>
</td>
</tr>
<tr class="c1">
<td class="c12">
<p class="c0 c9"><span class="c3">DeleteLayer</span></p>
</td>
<td class="c6">
<p class="c0 c9"><span>DeleteContentStream</span></p>
</td>
</tr>
<tr class="c1">
<td class="c12">
<p class="c0 c9"><span class="c3">LayerSafe</span></p>
</td>
<td class="c6">
<p class="c0 c9"><span>ContentStreamSafe</span></p>
</td>
</tr>
<tr class="c1">
<td class="c12">
<p class="c0 c9"><span class="c3">UseUnsafeLayers</span></p>
</td>
<td class="c6">
<p class="c0 c9"><span>UseUnsafeContentStreams</span></p>
</td>
</tr>
<tr class="c1">
<td class="c12">
<p class="c0 c9"><span class="c3">EncapsulateLayer</span></p>
</td>
<td class="c6">
<p class="c0 c9"><span>EncapsulateContentStream</span></p>
</td>
</tr>
<tr class="c1">
<td class="c12">
<p class="c0 c9"><span class="c3">RemoveSharedLayers</span></p>
</td>
<td class="c6">
<p class="c0"><span>RemoveSharedContentStreams</span></p>
</td>
</tr>
</tbody>
</table>
<h3 class="c0"><a name="h.b300t2z4dcnd"></a><span class="c11">3. New functions</span></h3>
<ul class="c15">
<li class="c2 c0"><span class="c3">GetContentStreamToString</span><span> and </span><span class="c3">GetContentStreamToVariant</span><span> have been added to replace the functionality previously provided by the </span><span class="c3">GetPageContent </span><span>function.</span></li>
<li class="c2 c0"><span class="c3">SetContentStreamFromString</span><span> and </span><span class="c3">SetContentStreamFromVariant</span><span> have been added to replace the functionality previously provided by the </span><span class="c3">SetPageContent </span><span>function.</span></li>
<li class="c2 c0"><span class="c3">SetTextExtractionOptions</span><span> was added to provide greater contrul over the text extraction functions.</span></li>
<li class="c2 c0"><span class="c3">CheckFileCompliance</span><span> was added to check for PDF/A compliance along with the </span><span class="c3">GetStringListCount</span><span>, </span><span class="c3">GetStringListItem</span><span> functions needed to retrieve the compliance test results.</span></li>
<li class="c2 c0"><span class="c3">SetPDFAMode</span><span> was added to allow the creation of new PDF/A-1b compliant documents.</span></li>
<li class="c2 c0"><span>Other new functions include </span><span class="c3">DrawPDF417Symbul</span><span>, </span><span class="c3">AddTrueTypeSubsettedFont</span><span>, </span><span class="c3">SetLineDashEx</span><span> and </span><span class="c3">SetRenderCropType</span><span>.</span></li>
</ul>
<h3 class="c0"><a name="h.b300t2z4dcnd"></a><span class="c11">4. Removed functions</span></h3>
<ul class="c15">
<li class="c2 c0"><span>The </span><span class="c3">SetAdvancePassword</span><span> and </span><span class="c3">SetPassword</span><span> functions have been removed. They are no longer necessary because the </span><span class="c3">LoadFrom*</span><span> functions now have an additional parameter for specifying the password.</span></li>
</ul>
<h3 class="c0"><a name="h.b300t2z4dcnd"></a><span class="c11">5. Changed functionality</span></h3>
<ul class="c15">
<li class="c2 c0"><span>When the </span><span class="c3">LoadFrom</span><span>* functions are used to open an encrypted document the objects will be automatically decrypted as necessary. Calls to </span><span class="c3">SetPassword</span><span>, </span><span class="c3">SetAdvancePassword</span><span> and </span><span class="c3">Decrypt</span><span> are no longer necessary to access any parts of an encrypted document. The </span><span class="c3">SaveTo</span><span>* functions can be used to save an encrypted document and the original encryption will remain in place with any new content automatically encrypted to the existing security settings.</span></li>
<li class="c2 c0"><span>The </span><span class="c3">LoadFrom</span><span>* functions now return 1 on success and 0 on failure. In QPL v7 these functions would return 2 if an encrypted document made use of object streams or cross reference streams. This is no longer necessary as these functions have a new password parameter. If the wrong password is given, the </span><span class="c3">LoadFrom</span><span>* functions will return 0 and the </span><span class="c3">LastErrorCode</span><span> function will return error code 404.</span></li>
<li class="c2 c0"><span>The </span><span class="c3">Encrypt</span><span> and </span><span class="c3">Decrypt</span><span> functions can still be used to add or remove security and full access to the document is possible even after encryption has been applied.</span></li>
<li class="c2 c0"><span>In QPL v7, the </span><span class="c3">GetPageContent </span><span>function returned only a portion of the page’s content stream. The replacement functions </span><span class="c3">GetPageContentToString</span><span> and </span><span class="c3">GetPageContentToVariant </span><span>now return the entire content stream of the selected page, not just an individual part.</span></li>
<li class="c2 c0"><span>Similarly, the </span><span class="c3">SetPageContentFromString</span><span> and </span><span class="c3">SetPageContentFromVariant</span><span> functions now set the entire content stream of the selected page, not just an individual part.</span></li>
<li class="c2 c0"><span>The </span><span class="c3">SecurityInfo</span><span> function returns the active encryption details even though encrypted object in documents are internally decrypted as needed.</span></li>
<li class="c2 c0"><span>XMP metadata is now added to new documents and maintained in existing documents. Calling functions like </span><span class="c3">SetInformation</span><span> will result in the XMP metadata being updated to keep that particular item in the document information dictionary in sync.</span></li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quickpdflibrary.com/blog/2011/09/quick-pdf-library-8-api-changes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Device context handles and signed/unsigned integers</title>
		<link>http://www.quickpdflibrary.com/blog/2011/06/device-context-handles-and-signedunsigned-integers/</link>
		<comments>http://www.quickpdflibrary.com/blog/2011/06/device-context-handles-and-signedunsigned-integers/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 15:01:00 +0000</pubDate>
		<dc:creator>Rowan</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Quick PDF Library]]></category>
		<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[32-bt integer]]></category>
		<category><![CDATA[DARenderPageToDC]]></category>
		<category><![CDATA[device context]]></category>
		<category><![CDATA[GetCanvasDC]]></category>
		<category><![CDATA[hdc]]></category>
		<category><![CDATA[pvoid]]></category>
		<category><![CDATA[RenderPageToDC]]></category>
		<category><![CDATA[signed integers]]></category>
		<category><![CDATA[unsigned integers]]></category>

		<guid isPermaLink="false">http://www.quickpdflibrary.com/blog/?p=548</guid>
		<description><![CDATA[For Quick PDF Library version 7.25 we changed the integer type of the device context handles returned by the GetCanvasDC function and accepted as parameters to the RenderPageToDC and DARenderPageToDC functions. The reason for this is that the Delphi VCL declares the HDC type as an unsigned 32-bit integer. The Windows graphics system does return [...]]]></description>
			<content:encoded><![CDATA[<p>For Quick PDF Library version 7.25 we changed the integer type of the device context handles returned by the <strong>GetCanvasDC</strong> function and accepted as parameters to the <strong>RenderPageToDC </strong>and <strong>DARenderPageToDC </strong>functions.</p>
<p>The reason for this is that the Delphi VCL declares the <strong>HDC </strong>type as an unsigned 32-bit integer.</p>
<p>The Windows graphics system does return values in the entire unsigned 32-bit range.</p>
<p>However, since making the change in 7.25 we have done further research and found some inconsistencies in various programming environments.</p>
<p>In particular, the Windows SDK defines a device context handle <strong>HDC </strong>as a <strong>PVOID </strong>which is a signed 32-bit integer.</p>
<p>The .NET Framework uses <strong>System.IntPtr</strong> which is also a signed 32-bit integer.</p>
<p>For 7.26 we will be making further changes to how device context handles are processed by Quick PDF Library to properly match different programming languages.</p>
<ul>
<li><strong>Delphi DCUs</strong> &#8211; Unsigned &#8211; Cardinal</li>
<li><strong>Delphi DLL</strong> &#8211; Unsigned &#8211; HDC</li>
<li><strong>C# ActiveX</strong> &#8211; Signed &#8211; System.IntPtr</li>
<li><strong>C# DLL</strong> &#8211; Signed &#8211; System.IntPtr</li>
<li><strong>C++ DLL</strong> &#8211; Signed &#8211; HDC</li>
<li><strong>C++ ActiveX</strong> &#8211; Signed &#8211; HDC</li>
<li><strong>VB.NET ActiveX</strong> &#8211; Signed &#8211; System.IntPtr</li>
<li><strong>VB.NET DLL</strong> &#8211; Signed &#8211; System.IntPtr</li>
<li><strong>PowerBuilder DLL</strong> &#8211; Signed -long</li>
<li><strong>PowerBASIC DLL</strong> &#8211; Unsigned &#8211; DWORD</li>
<li><strong>ActiveX Type Library</strong> &#8211; Signed &#8211; long</li>
</ul>
<p>The information in this article supersedes the information that we posted on this topic a couple of weeks ago (specifically two two blog posts: <a href="http://www.quickpdflibrary.com/blog/2011/06/unsigned-integers-and-device-context-functions/">Unsigned Integers and Device Context Functions</a> and <a href="http://www.quickpdflibrary.com/blog/2011/06/unsigned-integers-and-visual-basic/">Unsigned Integers And Visual Basic</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quickpdflibrary.com/blog/2011/06/device-context-handles-and-signedunsigned-integers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unsigned Integers and Device Context Functions</title>
		<link>http://www.quickpdflibrary.com/blog/2011/06/unsigned-integers-and-device-context-functions/</link>
		<comments>http://www.quickpdflibrary.com/blog/2011/06/unsigned-integers-and-device-context-functions/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 09:03:13 +0000</pubDate>
		<dc:creator>Rowan</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Quick PDF Library]]></category>
		<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[backwards compatibility]]></category>
		<category><![CDATA[DARenderPageToDC]]></category>
		<category><![CDATA[device context]]></category>
		<category><![CDATA[GetCanvasDC]]></category>
		<category><![CDATA[RenderPageToDC]]></category>
		<category><![CDATA[unsigned integers]]></category>

		<guid isPermaLink="false">http://www.quickpdflibrary.com/blog/?p=539</guid>
		<description><![CDATA[Update: the information in this post has been superseded by the information from this post: Device context handles and signed/unsigned integer. In version 7.25 of Quick PDF Library we made a change to the API which made the use of unsigned integers necessary. Unfortunately this change will break backwards compatibility for code that makes use [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update: the information in this post has been superseded by the information from this post: <a href="http://www.quickpdflibrary.com/blog/2011/06/device-context-handles-and-signedunsigned-integers/">Device context handles and signed/unsigned integer</a>.</strong></p>
<p>In version 7.25 of Quick PDF Library we made a change to the API which made the use of unsigned integers necessary.</p>
<p>Unfortunately this change will break backwards compatibility for code that makes use of the RenderPageToDC, DARenderPageToDC, and GetCanvasDC functions &#8212; the only functions which use unsigned integers.</p>
<p>This means that for the RenderPageToDC and DARenderPageToDC functions the DC parameter now requires an unsigned integer to be passed to it and that the GetCanvasDC function now returns an unsigned integer. <strong>You will need to update your code to reflect this change prior to being able to successfully compile using version 7.25.</strong></p>
<p>If you do not use any of these functions then you do not need to make any changes.</p>
<p>Most modern programming languages support unsigned integers, but there are a few older languages which do not. So for those languages we will attempt to come up with suitable workarounds &#8212; for example, as mentioned on <a href="http://www.quickpdflibrary.com/blog/2011/06/unsigned-integers-and-visual-basic/">this blog post a couple of days ago</a>, we have created a TLB file to be used with the ActiveX edition of our library and VB6 which resolves the issue of VB6 not supporting unsigned integers. Leave a comment if your programming language does not support unsigned integers.</p>
<p>We do apologize in advance for any inconvenience that this break in backwards compatibility causes. We do our utmost to avoid situations like this but sometimes breaking backwards compatibility is necessary for the future health of the library.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quickpdflibrary.com/blog/2011/06/unsigned-integers-and-device-context-functions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unsigned Integers And Visual Basic</title>
		<link>http://www.quickpdflibrary.com/blog/2011/06/unsigned-integers-and-visual-basic/</link>
		<comments>http://www.quickpdflibrary.com/blog/2011/06/unsigned-integers-and-visual-basic/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 16:51:21 +0000</pubDate>
		<dc:creator>Rowan</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Quick PDF Library]]></category>
		<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[activex]]></category>
		<category><![CDATA[DARenderPageToDC]]></category>
		<category><![CDATA[GetCanvasDC]]></category>
		<category><![CDATA[RenderPageToDC]]></category>
		<category><![CDATA[tlb]]></category>
		<category><![CDATA[unsigned integers]]></category>
		<category><![CDATA[vb]]></category>
		<category><![CDATA[vb6]]></category>
		<category><![CDATA[visual basic]]></category>

		<guid isPermaLink="false">http://www.quickpdflibrary.com/blog/?p=529</guid>
		<description><![CDATA[Update: the information in this post has been superseded by the information from this post: Device context handles and signed/unsigned integer. It is no longer required to use unsigned integers with the ActiveX edition, this is handled internally by the library. In version 7.25 of Quick PDF Library we made a change to the API [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update: the information in this post has been superseded by the information from this post: <a href="http://www.quickpdflibrary.com/blog/2011/06/device-context-handles-and-signedunsigned-integers/">Device context handles and signed/unsigned integer</a>. It is no longer required to use unsigned integers with the ActiveX edition, this is handled internally by the library.</strong></p>
<p>In version 7.25 of Quick PDF Library we made a change to the API which made the use of unsigned integers necessary. Unfortunately not all versions of programming languages support unsigned integers. In this particular case Visual Basic 6 and earlier versions do not support unsigned integers, while Visual Basic .NET and newer versions do.</p>
<p>Although VB6 was released over 10 years ago it still has a strong following and quite a few VB6 programmers use Quick PDF Library. This being the case we&#8217;ve come up with an easy workaround which will enable VB6 programmers to continue using all of the functions in Quick PDF Library.</p>
<p>We&#8217;re now providing a TLB file along with the ActiveX edition that handles the unsigned integers. The TLB file is only used at compile time so you won&#8217;t need to distribute it with your executable, but you will need to distribute the ActiveX as per usual.</p>
<p>The TLB file for Quick PDF Library 7.25 can be downloaded <a href="http://www.quickpdflibrary.com/downloads/files/QuickPDFAX0725VB.tlb">from here</a> and will be included in all future installers.</p>
<p>Instructions for using the TLB file:</p>
<ol>
<li>Register the ActiveX on your machine as per usual</li>
<li>Open your VB6 project</li>
<li>Go to Project &gt; References &gt; Browse&#8230;</li>
<li>Add the &#8216;QuickPDFAX0725VB.tlb&#8217; file</li>
<li>Compile</li>
</ol>
<p>As you are adding the TLB file as the reference it is not necessary to add the ActiveX file as a project reference because the TLB file interfaces with the ActiveX through the registry.</p>
<p><strong>Please note: if you do not use the GetCanvasDC, DARenderPageToDC or RenderPageToDC functions then you won&#8217;t run into any issues if you choose not to use the TLB file. The unsigned integers are currently only used with these functions.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.quickpdflibrary.com/blog/2011/06/unsigned-integers-and-visual-basic/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Use Perl with Quick PDF Library</title>
		<link>http://www.quickpdflibrary.com/blog/2011/05/use-perl-with-quick-pdf-library/</link>
		<comments>http://www.quickpdflibrary.com/blog/2011/05/use-perl-with-quick-pdf-library/#comments</comments>
		<pubDate>Mon, 30 May 2011 08:35:18 +0000</pubDate>
		<dc:creator>Rowan</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Quick PDF Library]]></category>
		<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[activex]]></category>
		<category><![CDATA[pdf library]]></category>
		<category><![CDATA[pdf sdk]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[perl pdf library]]></category>
		<category><![CDATA[quick-pdf]]></category>

		<guid isPermaLink="false">http://www.quickpdflibrary.com/blog/?p=518</guid>
		<description><![CDATA[We have just updated the samples page with a package of Perl samples to use with the ActiveX edition of Quick PDF Library. Perl will only work with Quick PDF Library on Windows, though we hope to provide a cross-platform solution in the future. If there are any other programming languages that you would like [...]]]></description>
			<content:encoded><![CDATA[<p>We have just updated the samples page with a package of <a href="http://www.quickpdflibrary.com/samples/index.php">Perl samples to use with the ActiveX edition of Quick PDF Library</a>.</p>
<p>Perl will only work with Quick PDF Library on Windows, though we hope to provide a cross-platform solution in the future.</p>
<p>If there are any other programming languages that you would like to see some samples for, leave a comment!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quickpdflibrary.com/blog/2011/05/use-perl-with-quick-pdf-library/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ARTS PDF Workshop Now 100% Free And Powered By Quick PDF Library</title>
		<link>http://www.quickpdflibrary.com/blog/2011/05/arts-pdf-workshop-now-100-free-and-powered-by-quick-pdf-library/</link>
		<comments>http://www.quickpdflibrary.com/blog/2011/05/arts-pdf-workshop-now-100-free-and-powered-by-quick-pdf-library/#comments</comments>
		<pubDate>Wed, 11 May 2011 09:07:17 +0000</pubDate>
		<dc:creator>Rowan</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[arts pdf]]></category>
		<category><![CDATA[arts pdf workshop]]></category>
		<category><![CDATA[debenu]]></category>

		<guid isPermaLink="false">http://www.quickpdflibrary.com/blog/?p=493</guid>
		<description><![CDATA[ARTS PDF Workshop, a Microsoft Excel add-on that lets you retrieve, manipulate, and print PDF information quickly and easily, has been upgraded to use Quick PDF Library as its core PDF engine. In addition the add-on is now also 100% free. ARTS PDF is a sister business division of Quick PDF, which are both owned by [...]]]></description>
			<content:encoded><![CDATA[<p>ARTS PDF Workshop, a Microsoft Excel add-on that lets you retrieve, manipulate, and print PDF information quickly and easily, has been upgraded to use Quick PDF Library as its core PDF engine. In addition the add-on is now also 100% free.</p>
<p>ARTS PDF is a sister business division of Quick PDF, which are both owned by <a href="http://www.debenu.com/">Debenu</a>.</p>
<p>ARTS PDF Workshop lets you view and update the properties of batches of PDF documents, including document info (title, author, subject and keywords), as well as document open options and security. It is a great tool for batch updating multiple PDF files at once.</p>
<p>The Excel add-on can be downloaded from the <a href="http://artspdf.com/arts_pdf_workshop.asp">ARTS PDF Workshop</a> page on <a href="http://www.artspdf.com">www.artspdf.com</a>.</p>
<div style="text-align:center;"><a href="http://artspdf.com/arts_pdf_workshop.asp"><img class="aligncenter size-full wp-image-501" title="ARTS PDF Workshop" src="http://www.quickpdflibrary.com/blog/wp-content/uploads/2011/05/s_workshop_dialog_settings.gif" alt="" width="202" height="219" /></a>
<div>
]]></content:encoded>
			<wfw:commentRss>http://www.quickpdflibrary.com/blog/2011/05/arts-pdf-workshop-now-100-free-and-powered-by-quick-pdf-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 2000 End-Of-Support</title>
		<link>http://www.quickpdflibrary.com/blog/2011/02/windows-2000-end-of-support/</link>
		<comments>http://www.quickpdflibrary.com/blog/2011/02/windows-2000-end-of-support/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 15:15:05 +0000</pubDate>
		<dc:creator>Rowan</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Quick PDF Library]]></category>
		<category><![CDATA[Quick PDF Library Lite]]></category>
		<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[end-of-support]]></category>
		<category><![CDATA[system requirements]]></category>
		<category><![CDATA[windows 2000]]></category>
		<category><![CDATA[windows 2000 professional]]></category>
		<category><![CDATA[windows 2000 server]]></category>

		<guid isPermaLink="false">http://www.quickpdflibrary.com/blog/?p=450</guid>
		<description><![CDATA[We&#8217;ve made the decision to end official support for Windows 2000 effective immediately as this operating system has reached the end of its livecycle and is no longer being supported by Microsoft. Please note that there are no Windows 2000 specific hacks in the Quick PDF Library code base, so we will not be &#8220;removing&#8221; support [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve made the decision to end official support for Windows 2000 effective immediately as this operating system has reached the end of its livecycle and is no longer being supported by Microsoft.</p>
<p>Please note that there are no Windows 2000 specific hacks in the Quick PDF Library code base, so we will not be &#8220;removing&#8221; support as such. All this decision really means in real-terms is that Windows 2000 is no longer listed as a supported operating system on our website.</p>
<p>A quick tip for anyone who is going to continue developing applications for Windows 2000 is that if you&#8217;re using Visual Studio 2010 with runtime 10.0 this may cause issues on Windows 2000. Specifically, this error message:</p>
<p><em>&#8220;The procedure entry point EncodePointer could not be located in the dynamic link library KERNEL32.DLL&#8221;</em></p>
<p>Head on back to Visual Studio 2008 with runtime 9.0 or earlier and this error message will disappear.</p>
<p>Sayonara Windows 2000, it was nice knowing you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quickpdflibrary.com/blog/2011/02/windows-2000-end-of-support/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>About PDF Files</title>
		<link>http://www.quickpdflibrary.com/blog/2011/02/about-pdf-files/</link>
		<comments>http://www.quickpdflibrary.com/blog/2011/02/about-pdf-files/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 09:20:07 +0000</pubDate>
		<dc:creator>Rowan</dc:creator>
				<category><![CDATA[Quick PDF Library]]></category>
		<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[about pdf]]></category>
		<category><![CDATA[pdf library]]></category>
		<category><![CDATA[pdf sdk]]></category>
		<category><![CDATA[pdf tips]]></category>
		<category><![CDATA[quick-pdf]]></category>
		<category><![CDATA[what is pdf]]></category>

		<guid isPermaLink="false">http://www.quickpdflibrary.com/blog/?p=445</guid>
		<description><![CDATA[The goal of PDF is to enable users to exchange and view electronic documents easily and reliably, independent of the environment in which they were created or the environment in which they are viewed or printed. PDF files can be thought of as self-contained composite documents made up of many instances of many things: page [...]]]></description>
			<content:encoded><![CDATA[<p>The goal of PDF is to enable users to exchange and view electronic documents easily and reliably, independent of the environment in which they were created or the environment in which they are viewed or printed.</p>
<p>PDF files can be thought of as self-contained composite documents made up of many instances of many things: page contents, images, graphics, fonts, colorspaces, metadata, annotations, links, digital signatures and more.</p>
<p>If you open up a PDF in a text editor you will notice that there are parts of it which make sense, but that the majority is unreadable to the human eye. That’s because much of the data in PDF files is stored inside binary streams, in which data has been encrypted or compressed. This binary data looks like garbage, but you can easily break your PDF just by adding a single character. It’s best not to edit PDF files directly in a text editor.</p>
<p style="text-align: center;"><a href="http://www.quickpdflibrary.com/blog/wp-content/uploads/2011/02/inside-a-pdf.png"><img class="size-full wp-image-446  aligncenter" title="PDF in a text editor" src="http://www.quickpdflibrary.com/blog/wp-content/uploads/2011/02/inside-a-pdf.png" alt="" width="527" height="486" /></a></p>
<div>Underneath the hood PDF files are made from unordered numbered objects which can refer to each other by number and are all linked together by a cross reference table which maps object numbers to very specific places within the file.</p>
<p>At a low level PDF combines three technologies:</p>
</div>
<div>
<ul id="internal-source-marker_0.230587838916108">
<li>A subset of the PostScript page description programming language, for generating the layout and graphics.</li>
<li>A font-embedding/replacement system to allow fonts to travel with the documents.</li>
<li>A structured storage system to bundle these elements and any associated content into a single file, with data compression where appropriate.</li>
</ul>
</div>
<div>As you can see, PDF files are quite complex and it makes a lot of sense (and saves a lot of time and money) to use products such as Quick PDF Library to keep those complexities out of your life.</p>
<p>However, if you are interested in studying the internals of PDF files further then these resources should be helpful:</p>
</div>
<div>
<ul id="internal-source-marker_0.230587838916108">
<li><a href="http://www.adobe.com/devnet/pdf/pdf_reference.html">PDF Reference and Adobe Extensions to the PDF Specification</a></li>
<li><a href="http://home.comcast.net/~jk05/presentations/PDFTutorials.html">PDF Tutorials from Jim King</a></li>
<li><a href="http://www.planetpdf.com/learning.asp">Planet PDF learning centers</a></li>
<li><a href="http://www.planetpdf.com/resource_centres.asp?ContentID=7195">Planet PDF Resource Centers</a></li>
<li><a href="http://forum.planetpdf.com/wb/default.asp">Planet PDF Forum</a></li>
<li><a href="http://qa.planetpdf.com/">Planet PDF Q/A</a></li>
<li><a href="http://www.prepressure.com/pdf">Prepressure.com PDF Tips</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.quickpdflibrary.com/blog/2011/02/about-pdf-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Basics: Getting Familiar with Quick PDF Library</title>
		<link>http://www.quickpdflibrary.com/blog/2011/02/the-basics-getting-familiar-with-quick-pdf-library/</link>
		<comments>http://www.quickpdflibrary.com/blog/2011/02/the-basics-getting-familiar-with-quick-pdf-library/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 14:34:00 +0000</pubDate>
		<dc:creator>Rowan</dc:creator>
				<category><![CDATA[Quick PDF Library]]></category>
		<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[getting-started]]></category>
		<category><![CDATA[pdf tips]]></category>
		<category><![CDATA[quick pdf tips]]></category>

		<guid isPermaLink="false">http://www.quickpdflibrary.com/blog/?p=432</guid>
		<description><![CDATA[Quick PDF Library is a big library and sometimes it can be a little daunting getting started, so we&#8217;ve put together a few basic tips to help you get up to speed quickly. We&#8217;ll enhance this document as we think of new tips. If you have any tips you&#8217;d like us to add to this [...]]]></description>
			<content:encoded><![CDATA[<p>Quick PDF Library is a big library and sometimes it can be a little daunting getting started, so we&#8217;ve put together a few basic tips to help you get up to speed quickly. We&#8217;ll enhance this document as we think of new tips. If you have any tips you&#8217;d like us to add to this document or questions about the intended use of certain features, please leave a comment.</p>
<h3>Unlock the library</h3>
<p>The <a href="http://www.quickpdflibrary.com/help/quickpdf/UnlockKey.php">UnlockKey</a> function needs to be called and the return value checked otherwise most other functions called later will fail. More <a href="http://help.quickpdflibrary.com/questions/294/unlock-quick-pdf-library-with-license-key">info here</a>.</p>
<h3>Check functions for return values</h3>
<p>Always check the return value of the important functions such as <a href="http://www.quickpdflibrary.com/help/quickpdf/LoadFromFile.php">LoadFromFile </a>because if this function fails the subsequent function calls will fail to. Every single function returns a value. Checking for return values is not a requirement, but it can be immensely useful in ensuring the robustness of your code and debugging.</p>
<p>If a function is not documented as having a return value then you can assume the a return value of one (1) indicates successful. Zero (0) or other values could indicate an error or it could be returning a valid handle or ID.</p>
<h3>Memory and direct access functions</h3>
<p>Function names that start with DA indicate that the function is a direct access function. Functions that do not have this pre-fix are memory functions. Direct access and memory functions cannot be used together. Combining them in your code will result in your code not working correctly. More <a href="http://help.quickpdflibrary.com/questions/143/why-cant-direct-access-and-standard-functions-be-used-together">info here</a>.</p>
<p>The DA functions are primarily used for PDF documents that are very large and contain thousands of pages. They are generally faster for these larger documents because the document does not need to be loaded into memory. For file sizes under 500 MB or under a few thousand pages the speed differences are negligible.</p>
<h3>Blank document automatically loaded</h3>
<p>When you initialise the library there is always a one page blank document in memory. It is selected and ready to use by default. This is due to the design of the library. There can never not be at least one document in memory, so if you try to delete that document using the <a href="http://www.quickpdflibrary.com/help/quickpdf/DeletePages.php">DeletePages</a> function, the library will automatically re-create a one page blank document.</p>
<p>The blank one page document uses a Letter page size which is 8.5 x 11 inches or 215.9 mm × 279.4 mm. The page size can be changed using the <a href="http://www.quickpdflibrary.com/help/quickpdf/SetPageSize.php">SetPageSize</a> function.</p>
<h3>New documents automatically selected</h3>
<p>Whether you load an existing document using the LoadFromFile function or create a new document using the NewDocument function, it will automatically be selected in memory and the documents ID can be retrieved using the SelectedDocument function.</p>
<h3>Multiple documents in memory permitted</h3>
<p>You can have more than one document in memory and can swap between them using the ID returned from calls such functions as <a href="http://www.quickpdflibrary.com/help/quickpdf/NewDocument.php">NewDocument</a> and <a href="http://www.quickpdflibrary.com/help/quickpdf/SelectedDocument.php">SelectedDocument</a>. You can also count all documents in memory using the <a href="http://www.quickpdflibrary.com/help/quickpdf/DocumentCount.php">DocumentCount </a>function and then retrieve each documents ID or filename using <a href="http://www.quickpdflibrary.com/help/quickpdf/GetDocumentID.php">GetDocumentID </a>or <a href="http://www.quickpdflibrary.com/help/quickpdf/GetDocumentFileName.php">GetDocumentFileName</a>. All of the document management related functions can be seen in the<a href="http://www.quickpdflibrary.com/help/quickpdf/DocumentManagement.php"> document management</a> section in the function reference.</p>
<h3>Origin point for drawing operations</h3>
<p>The origin has coordinates of 0,0 and is the starting point for finding all other points. The origin point for a page in a PDF typically starts at a page corner. The default origin for Quick PDF Library is the bottom left page corner.</p>
<p>Using the <a href="http://www.quickpdflibrary.com/help/quickpdf/SetOrigin.php">SetOrigin </a>function in Quick PDF Library you can change the point of origin to be any page corner (bottom left, top left, top right, bottom right).</p>
<p>By default calling QP.<a href="http://www.quickpdflibrary.com/help/quickpdf/DrawText.php">DrawText</a>(10, 10, &#8220;Test&#8221;) will result in the text being drawn at 10 points in from the left of the page and 10 points up from the bottom of the page, but if you call QP.SetOrigin(1) prior to DrawText then the text will be drawn at 10 points in from the left of the page and 10 points down from the top of the page because passing the value 1 to the Origin parameter for the SetOrigin function changes the origin to top left of the page.</p>
<p>The default point of origin in Adobe Acrobat was the bottom left page corner up until Acrobat 8, at which point Adobe switched the point of origin to the top left page corner. As mentioned above, you can set Quick PDF Library to use any page corner in a PDF.</p>
<h3>Measurement units</h3>
<p>In PDF the coordinate system is called <em>default user space</em>. The default for the size of the unit in default user space (1/72 inch) is approximately the same as a point, a unit widely used in the printing industry. It is not exactly the same, however; there is no universal definition of a point.</p>
<p>Using the <a href="http://www.quickpdflibrary.com/help/quickpdf/SetMeasurementUnits.php">SetMeasurementUnits </a>function you can change the units for all measurements given to and returned from the library. The available options are default user space, millimetres and inches.</p>
<h3>Unicode, UTF-8 and the DLL and Delphi Editions</h3>
<p>There are many different ways to encode Unicode characters. One way is to use strings with 16-bit characters. COM/ActiveX uses 16-bit characters, so adding Unicode support for the ActiveX edition of the library was easy.</p>
<p>For the Delphi and DLL editions, the strings have always been 8-bit characters. Unfortunately we can&#8217;t change the definition of functions as this would cause issues with backwards compatibility.</p>
<p>This means that when using the Delphi and DLL editions and working with Unicode characters, you need to encode your file names with UTF8 encoding, as mentioned in the function reference. Make sure that you pay attention to each function description as it will specifically mention if you need to encode or decode the input or output.</p>
<p>Different languages will have different functions to do the UTF8 encoding.</p>
<h3>Standard Fonts</h3>
<p>The PDF specification outlines 14 fonts that should always be available in all PDF viewers. These 14 fonts are called standard fonts and can be added to your PDF using the <a href="http://www.quickpdflibrary.com/help/quickpdf/AddStandardFont.php">AddStandardFont </a>function.</p>
<h3>Font embedding, subset font embedding and no font embedding</h3>
<h3><span style="font-size: 13px; font-weight: normal;">There are three key ways that fonts can be handled in PDF files. They are:</span></h3>
<p><strong>Full Font Embedding = Larger file size</strong><br />
Recipient doesn&#8217;t need the same font to view or edit the file</p>
<p><strong>Subset Font Embedding = Smaller file size</strong><br />
Recipient doesn&#8217;t need the same font to view but does need the same font installed in order to edit the file</p>
<p><strong>No Font Embedding = Smallest file size</strong><br />
Recipient needs to have same fonts installed</p>
<p>Each option has its merits. As long as option 1 or 2 above when you are building your PDF files, then you can be sure that when your PDF is rendered or printed the font you&#8217;ve specified will be used. If you use option 3, then the PDF viewer will attempt to locate the specified font on the local machine but if it cannot be found then it will use a substitute font during the viewing/printing process.</p>
<p>When a PDF is displayed on your screen it is rendered in exactly the same fashion as it would be prior to being printed.</p>
<p>Quick PDF Library can only fully embed or subset fonts during the PDF creation process. The <a href="http://www.quickpdflibrary.com/help/quickpdf/AddTrueTypeFont.php">AddTrueTypeFont </a>function can be used to add and embed a TrueType font in the document and the <a href="AddSubsettedFont">AddSubsettedFont </a>function can be used to embed a subset of a font in the document. The <a href="http://www.quickpdflibrary.com/help/quickpdf/AddCJKFont.php">AddCJKFont </a>function is also available for CJK fonts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.quickpdflibrary.com/blog/2011/02/the-basics-getting-familiar-with-quick-pdf-library/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

