Sophie

Sophie

distrib > Mandriva > 2008.1 > i586 > by-pkgid > 927a1532fb070c51449654bb68b5bde2 > files > 385

itext-manual-2.0.8-0.0.2mdv2008.1.i586.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>iText Tutorial: Manipulating existing PDF documents</title><meta name="Description" content="How-to copy/manipulate existing PDF documents."><meta name="Keywords" content="PDF, JAVA, iText, examples, copy PDF, stamp, existing PDF"><link rel="stylesheet" href="./../../style.css" type="text/css"></head><body><a name="top" class="logo" href="http://www.lowagie.com/iText"><img src="http://www.lowagie.com/iText/images/logo.gif" border="0" alt="iText"></a><h1>Tutorial: iText by Example</h1><h2>Manipulating existing PDF documents</h2><div id="content"><div id="sidebar"><a class="toc" href="./../../index.html#general_copystamp">
							Table of Contents
						</a><div align="Center" class="small">Best viewed with:<br><script type="text/javascript"><!--
google_ad_client = "pub-0340380473790570";
google_ad_width = 180;
google_ad_height = 60;
google_ad_format = "180x60_as_rimg";
google_cpa_choice = "CAAQyaj8zwEaCIwcWMzeycafKMu293M";
//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div><div class="sidetitle">Sections:</div><ul><li><a href="#inaction">In the book</a></li><li><a href="#intro">Introduction</a></li><li><a href="#pdfwriter">PdfWriter</a></li><li><a href="#pdfstamper">PdfStamper</a></li><li><a href="#pdfcopy">PdfCopy</a></li></ul><br><br><div class="sidetitle">Examples:</div><div class="example"><a class="source" href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/TwoOnOne.java">TwoOnOne</a><br><div class="description">Combines 2 pages on 1</div><div class="small">Input:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ChapterSection.pdf">ChapterSection.pdf</a></li></ul><div class="small">Output:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/2on1.pdf">2on1.pdf</a></li></ul></div><div class="example"><a class="source" href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/AddWatermarkPageNumbers.java">AddWatermarkPageNumbers</a><br><div class="description">Adds pagenumbers and a watermark to an existing document</div><div class="small">Input:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ChapterSection.pdf">ChapterSection.pdf</a></li><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/SimpleAnnotations1.pdf">SimpleAnnotations1.pdf</a></li><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/watermark.jpg">watermark.jpg</a></li></ul><div class="small">Output:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/watermark_pagenumbers.pdf">watermark_pagenumbers.pdf</a></li></ul></div><div class="example"><a class="source" href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/Register.java">Register</a><br><div class="description">Fills in a form</div><div class="small">Input:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/SimpleRegistrationForm.pdf">SimpleRegistrationForm.pdf</a></li></ul><div class="small">Output:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/registered.pdf">registered.pdf</a></li><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/registered_flat.pdf">registered_flat.pdf</a></li></ul></div><div class="example"><a class="source" href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/EncryptorExample.java">EncryptorExample</a><br><div class="description">Encrypts an existing PDF file</div><div class="small">Extra jars needed:</div><ul><li>bcprov-jdk14-135.jar</li></ul><div class="small">Input:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ChapterSection.pdf">ChapterSection.pdf</a></li></ul><div class="small">Output:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/encrypted.pdf">encrypted.pdf</a></li></ul></div><div class="example"><a class="source" href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/Concatenate.java">Concatenate</a><br><div class="description">Concatenates existing PDF files</div><div class="small">Argument(s):</div><ul><li>ChapterSection.pdf</li><li>Destinations.pdf</li><li>SimpleAnnotations1.pdf</li><li>concatenated.pdf</li></ul><div class="small">Input:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ChapterSection.pdf">ChapterSection.pdf</a></li><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/Destinations.pdf">Destinations.pdf</a></li><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/SimpleAnnotations1.pdf">SimpleAnnotations1.pdf</a></li></ul><div class="small">Output:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/concatenated.pdf">concatenated.pdf</a></li></ul></div><div class="example"><a class="source" href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ConcatenateForms.java">ConcatenateForms</a><br><div class="description">Concatenates existing PDF files with forms</div><div class="small">Input:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/SimpleRegistrationForm.pdf">SimpleRegistrationForm.pdf</a></li><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/TextFields.pdf">TextFields.pdf</a></li><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ChapterSection.pdf">ChapterSection.pdf</a></li></ul><div class="small">Output:</div><ul><li><a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/concatenatedforms.pdf">concatenatedforms.pdf</a></li></ul></div><div class="example"><div class="small">ANT script (all examples):</div><ul><li><a href="./../../general/copystamp/build.xml">
					build.xml
				</a></li></ul></div></div><div id="main"><font color="#FF0000" size="+2">UNDER CONSTRUCTION</font><a name="inaction"></a><div class="title">In the book:</div><div xmlns="http://www.w3.org/1999/xhtml" xmlns:site="http://www.lowagie.com/iText/site">
		<p xmlns=""><a href="http://itext.ugent.be/itext-in-action/"><img src="http://itext.ugent.be/img/lowagie_3d.jpg" border="0" align="right"></a>
			The examples in this free online tutorial will help you getting started
			with iText. Note that most examples are two years old.
			Some of the examples may be obsolete. Also the theory that
			comes with the examples isn't always 100% accurate.
			If you want more recent examples or if you want to know more
			about the theoretical background of	PDF and iText, please consult the book
			<a href="http://itext.ugent.be/itext-in-action/">
				"iText in Action".
			</a>
			Note that the first and the third chapter of the book
			can be downloaded for free from <a href="http://www.manning.com/affiliate/idevaffiliate.php?id=223_53">http://manning.com/lowagie/</a></p><p>
			More specifically:
			<ul><li><a class="subtitle" href="http://itext.ugent.be/itext-in-action/chapter.php?chapter=2">
				Chapter 2:
			</a>PDF engine jump-start</li></ul></p>
		</div><a class="top" href="#top">Go to top of the page</a><a name="intro"></a><div class="title">Introduction:</div><div xmlns="http://www.w3.org/1999/xhtml">One of the most frequently asked questions on the mailing-list sounds like this:
<i>I have an existing PDF file and I want to change every occurence of the word 'competitor' with the word 'myself'.</i>
Or: <i>I have an existing PDF file and I want to underline every occurence of the word 'FREE'.</i>
If this is what you need, you can stop reading. This just isn't possible with iText.
iText can't convert a text in PDF to some other 'readable' document format such as
RTF, WORD or even plain text. You can't ask iText for the occurrance of a certain word in a document
or its position on a certain page.<br>
This being said, let's see what iText can do. Depending on what you want to achieve,
you are going to use one of the following objects to manipulate existing PDF documents:
<ul>
<li><a xmlns="" href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfWriter.html">PdfWriter:</a> generates a document from scratch,
but also supports importing pages from other PDF documents. There's one big downside: all interactive features
of the <a href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfImportedPage.html">PdfImportedPage</a> are lost in the process
(annotations, bookmarks, fields,...) if you use PdfWriter.</li>
<li xmlns="http://www.w3.org/1999/xhtml"><a xmlns="" href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfStamper.html">PdfStamper:</a> can manipulate the
content of one (1!) existing PDF document. For instance: add pagenumbers and a watermark,
fill and/or flatten formfields, sign or encrypt an existing PDF document,...</li>
<li xmlns="http://www.w3.org/1999/xhtml"><a xmlns="" href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfEncryptor.html">PdfEncryptor:</a> uses PdfStamper
to offer some userfriendly methods for encrypting an existing document.</li>
<li xmlns="http://www.w3.org/1999/xhtml"><a xmlns="" href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfCopy.html">PdfCopy:</a> can concatenate (a selection of) pages
from (one or) multiple existing PDF forms. Can adjust bookmarks, but possible loss of formfields.
PdfCopy doesn't allow new content!</li>
<li xmlns="http://www.w3.org/1999/xhtml"><a xmlns="" href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfCopyFields.html">PdfCopyFields:</a> concatenates
multiple PDF documents, keeping the fields (puts the fields of the different sourcefiles in one
Acroform).</li>
</ul>
Before we start with the examples, always remember that <b xmlns="http://www.w3.org/1999/xhtml">the outputfile must have a different name than the input file!!!</b>
If you open a file with PdfReader, you can't write to it with PdfWriter/PdfStamper/PdfCopy!
If you want to 'edit' an existing file, you need to use a temporary file and rename it afterwards.
</div><a class="top" href="#top">Go to top of the page</a><a xmlns="" name="pdfwriter"></a><div class="title">PdfWriter:</div><div xmlns="http://www.w3.org/1999/xhtml">If you want to create a document from scratch, you have to follow the 5 steps as
described in the <a xmlns="" href="./../..general/index.html#">Hello World</a> chapter.
In <a href="./../..general/index.html#step2">step 2</a>, you create
a PdfWriter object to which new content will be written. This new content can consist
of <a href="./../../index.html#part2">high-level objects</a> added
to a <a href="http://itext.ugent.be/library/api/com/lowagie/text/Document.html">Document</a>-object or it
can be <a href="./../../index.html#part4">direct content</a> added
to a <a href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfContentByte.html">PdfContentByte</a>-object.
<a href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfImportedPage.html">PdfImportedPage</a> is
an object that can be added as direct content. You get PdfImportedPage objects from
PdfReader:
<pre xmlns="http://www.w3.org/1999/xhtml" class="commandline">PdfReader reader = new PdfReader("existing.pdf");
PdfImportedPage page1 = writer.getImportedPage(reader, 1);
directcontent.addTemplate(page1, 1, 0, 0, 1, 0, 0);</pre>
Note that you can't change the content of a PdfImportedPage-object.
If you want to write extra content over or under the page, you need
to ask the PdfWriter object for a PdfContentByte object.
This is explained in the tutorial part on
<a xmlns="" href="./../../index.html#part4">direct content</a>,
so is the meaning of the <a href="./../../directcontent/coordinates/index.html#">parameters</a> of the <a href="./../../directcontent/index.html#templates">addTemplate</a> method.
In the example below, imported pages are scaled so that two pages in portrait fit on one page in landscape.
<div id="example">
					Example: java
					<a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/TwoOnOne.java">
						com.lowagie.examples.general.copystamp.TwoOnOne</a><br>Combines 2 pages on 1: see
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/2on1.pdf">2on1.pdf</a><br>
						External resources for this example:
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ChapterSection.pdf">ChapterSection.pdf</a><br></div>
</div><a class="top" href="#top">Go to top of the page</a><a name="pdfstamper"></a><div class="title">PdfStamper:</div><div xmlns="http://www.w3.org/1999/xhtml">If you want to change the contents of <i>one</i> existing PDF file
and add extra content such as watermarks, pagenumbers, extra headers,...
<a xmlns="" href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfStamper.html">PdfStamper</a>
is the object you need.
<pre xmlns="http://www.w3.org/1999/xhtml" class="commandline">PdfReader reader = new PdfReader("existing.pdf");
PdfStamper stamp = new PdfStamper(reader,
  new FileOutputStream("stamped.pdf"));
PdfContentByte under = stamp.getUnderContent(1);
// change the content beneath page 1
PdfContentByte over = stamp.getOverContent(1);
// change the content on top of page 1
stamp.close()</pre>
Again you will need to read the chapters on <a xmlns="" href="./../../index.html#part4">direct content</a>
in order to know how to add text, images, etc...
In the example below, we add a watermark under the existing text and the word 'DUPLICATE' on top of the text.
We also add an extra title page.
<div id="example">
					Example: java
					<a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/AddWatermarkPageNumbers.java">
						com.lowagie.examples.general.copystamp.AddWatermarkPageNumbers</a><br>Adds pagenumbers and a watermark to an existing document: see
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/watermark_pagenumbers.pdf">watermark_pagenumbers.pdf</a><br>
						External resources for this example:
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ChapterSection.pdf">ChapterSection.pdf</a> <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/SimpleAnnotations1.pdf">SimpleAnnotations1.pdf</a> <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/watermark.jpg">watermark.jpg</a><br></div>
PdfStamper is also the class you need if you want to fill in AcroForms.
Below, you'll find an example that fills in a simple form, once with and
once without formflattening. More examples will follow in the chapter on
<a href="./../../forms/fill/index.html#">formfilling</a>.
<div id="example">
					Example: java
					<a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/Register.java">
						com.lowagie.examples.general.copystamp.Register</a><br>Fills in a form: see
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/registered.pdf">registered.pdf</a> <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/registered_flat.pdf">registered_flat.pdf</a><br>
						External resources for this example:
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/SimpleRegistrationForm.pdf">SimpleRegistrationForm.pdf</a><br></div>
If you need to encrypt an existing document, you can do this with PdfStamper too,
but there is a helper class called <a href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfEncryptor.html">PdfEncryptor</a>
that offers some methods that are more userfriendly:
<pre xmlns="http://www.w3.org/1999/xhtml" class="commandline">PdfEncryptor.encrypt(reader,
  new FileOutputStream("encrypted.pdf"),
  "Hello".getBytes(),
  "World".getBytes(),
  PdfWriter.AllowPrinting | PdfWriter.AllowCopy,
  false)</pre>
In the example 'Hello' is set as the userpassword, you'll need it to open the document with Acrobat Reader.
'World' is the ownerpassword, you'll need it to read it with an application (for instance with <a xmlns="" href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfReader.html">PdfReader</a>).
The 4 parameter defines the permissions. This is done by <i xmlns="http://www.w3.org/1999/xhtml">or</i>-ing the following integers:
<ul>
<li>PdfWriter.AllowPrinting</li>
<li>PdfWriter.AllowModifyContents</li>
<li>PdfWriter.AllowCopy</li>
<li>PdfWriter.AllowModifyAnnotations</li>
<li>PdfWriter.AllowFillIn (128 bit only)</li>
<li>PdfWriter.AllowScreenReaders (128 bit only)</li>
<li>PdfWriter.AllowAssembly (128 bit only)</li>
<li>PdfWriter.AllowDegradedPrinting (128 bit only)</li>
</ul>
The boolean lets you choose between 40 bit encryption (false) or 128 bit encryption (true).
<div id="example">
					Example: java
					<a xmlns="" href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/EncryptorExample.java">
						com.lowagie.examples.general.copystamp.EncryptorExample</a><br>Encrypts an existing PDF file: see
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/encrypted.pdf">encrypted.pdf</a><br>
						External resources for this example:
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ChapterSection.pdf">ChapterSection.pdf</a><br>
						Extra jars needed in your CLASSPATH:
						 bcprov-jdk14-135.jar<br></div>
</div><a class="top" href="#top">Go to top of the page</a><a name="pdfcopy"></a><div class="title">PdfCopy:</div><div xmlns="http://www.w3.org/1999/xhtml">Allthough you could work around the PdfStamper's <i>one document only</i>
limitation by adding new pages, you'd better use <a xmlns="" href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfCopy.html">PdfCopy</a>
if you only want to copy (a selection of) pages from one or more PDF files into one resulting PDF.
And if you don't need to change the contents of one or more PDF files
(maybe just the bookmarks). The syntax of PdfCopy looks very similar to the
syntax of PdfWriter:
<pre xmlns="http://www.w3.org/1999/xhtml" class="commandline">PdfReader reader = new PdfReader("existing.pdf");
Document document = new Document(reader.getPageSizeWithRotation(1));
PdfCopy copy = new PdfCopy(document, new FileOutputStream(outFile));
document.open();
PdfImportedPage page = copy.getImportedPage(reader, i);
copy.addPage(page);
document.close();</pre>
The example can be used as a commandline tool to concatenate existing PDF files.
<div id="example">
					Example: java
					<a xmlns="" href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/Concatenate.java">
						com.lowagie.examples.general.copystamp.Concatenate</a> ChapterSection.pdf Destinations.pdf SimpleAnnotations1.pdf concatenated.pdf<br>Concatenates existing PDF files: see
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/concatenated.pdf">concatenated.pdf</a><br>
						External resources for this example:
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ChapterSection.pdf">ChapterSection.pdf</a> <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/Destinations.pdf">Destinations.pdf</a> <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/SimpleAnnotations1.pdf">SimpleAnnotations1.pdf</a><br></div>
There's one big problem with PdfCopy: it doesn't work well with files containing AcroForms.
If you want to concatenate existing PDF files with different AcroForms, you must use
the <a href="http://itext.ugent.be/library/api/com/lowagie/text/pdf/PdfCopyFields.html">PdfCopyFields</a> class.
All the documents are kept in memory unlike PdfCopy. The rules for the form field concatenation are the same as in Acrobat. 
Note that if you have fields with the same name they will me merged so, it's probably
a good idea to rename them if that's the case.
<div id="example">
					Example: java
					<a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ConcatenateForms.java">
						com.lowagie.examples.general.copystamp.ConcatenateForms</a><br>Concatenates existing PDF files with forms: see
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/concatenatedforms.pdf">concatenatedforms.pdf</a><br>
						External resources for this example:
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/SimpleRegistrationForm.pdf">SimpleRegistrationForm.pdf</a> <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/TextFields.pdf">TextFields.pdf</a> <a href="http://itext.ugent.be/library/com/lowagie/examples/general/copystamp/ChapterSection.pdf">ChapterSection.pdf</a><br></div></div><a class="top" href="#top">Go to top of the page</a><div id="footer" xmlns="http://www.w3.org/1999/xhtml">
			Page Updated: 2007/01/26 14:41:43
			Copyright &copy; 1999-2005
			Bruno Lowagie<br><a href="http://www.lowagie.com/iText/">iText</a> is a Free Java-Pdf library by Bruno Lowagie and Paulo Soares.
		</div></div></div><div class="commercial"><br><script type="text/javascript"><!--
google_ad_client = "pub-0340380473790570";
google_ad_width = 120;
google_ad_height = 600;
google_ad_format = "120x600_as";
google_ad_channel ="";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "1B09BD";
google_color_url = "100670";
google_color_text = "707070";
//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><br><br><div class="subtitle">Amazon books:</div><script type="text/javascript"><!--
document.write('<iframe src="http://rcm.amazon.com/e/cm?t=itisacatalofwebp&o=1&p=8&l=as1&asins=1932394796&fc1=000000&lc1=0000ff&bc1=&lt1=_blank&IS2=1&bg1=ffffff&f=ifr" width="120" height="240" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" align="Center"></iframe>');
//--></script><a xmlns="" href="http://www.amazon.co.uk/exec/obidos/ASIN/1932394796/catloogjecom-21" class="amazonlinks">
			amazon.co.uk-link
		</a><br><br><script type="text/javascript"><!--
document.write('<iframe src="http://rcm.amazon.com/e/cm?t=itisacatalofwebp&o=1&p=8&l=as1&asins=0321304748&fc1=000000&lc1=0000ff&bc1=&lt1=_blank&IS2=1&bg1=ffffff&f=ifr" width="120" height="240" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" align="Center"></iframe>');
//--></script><a href="http://www.amazon.co.uk/exec/obidos/ASIN/0321304748/catloogjecom-21" class="amazonlinks">
			amazon.co.uk-link
		</a><br><br><script type="text/javascript"><!--
document.write('<iframe src="http://rcm.amazon.com/e/cm?t=itisacatalofwebp&o=1&p=8&l=as1&asins=0321305310&fc1=000000&lc1=0000ff&bc1=&lt1=_blank&IS2=1&bg1=ffffff&f=ifr" width="120" height="240" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" align="Center"></iframe>');
//--></script><a href="http://www.amazon.co.uk/exec/obidos/ASIN/0321305310/catloogjecom-21" class="amazonlinks">
			amazon.co.uk-link
		</a><br><br><script type="text/javascript"><!--
document.write('<iframe src="http://rcm.amazon.com/e/cm?t=itisacatalofwebp&o=1&p=10&l=st1&mode=books&search=JAVA&=1&fc1=&lc1=&lt1=&bg1=&f=ifr" width="120" height="460" border="0" frameborder="0" style="border:none;" scrolling="no" marginwidth="0" marginheight="0"></iframe>');
//--></script><br><script type="text/javascript"><!--
document.write('<iframe src="http://rcm.amazon.com/e/cm?t=itisacatalofwebp&o=1&p=10&l=st1&mode=books&search=PDF&=1&fc1=&lc1=&lt1=&bg1=&f=ifr" width="120" height="460" border="0" frameborder="0" style="border:none;" scrolling="no" marginwidth="0" marginheight="0"></iframe>');
//--></script><br></div></body></html>