Using FOP with Java - Part 2
by Samuda Gupta
Introduction
Last month, we examined FOP and how to use it in context of
producing formatted output in formats such as PDF, PostScript
etc. The primary goal of producing documents in different
formats is to increase the exchangability. In this context, one
of the major issues would be to be able to print this document in
both real-time and off-line. This month, we will examine
different issues regarding printing the documents produced with
FOP.
Issues related to Print
One of the fundamental issues related to printing any document
is that the printer needs to interpret the binary data that it
receives and decode it correctly to produce a desired print
output. The piece of software that does this job for the printer
is called the printer driver. The driver is responsible for
translating any binary data to the printer in an understandable
format.
Because of this driver, most of the printers are capable of
understanding commonly used document standards such as Ms-Word
document, Excel document etc. However, for documents like PDF
etc, we need software like Adobe Acrobat Reader, which can
translate the PDF document to a printer readable format.
Thus, to successfully print any custom formatted document we
need either a pre-installed driver or application software
capable of translating the document to a printer readable
format.
FOP and Print problems
>We have
seen that it is easy to produce formatted outputs such as PDF using
FOP. However, printing the produced PDF document from within FOP may
be a bit more tricky. The issue is if we directly send the PDF
document binary to the printer, the printer will not be able to
decode it properly.
However, the situation is different with Postscript. Most modern
printers by default support PostScript format. So if you have a
Postscript enabled printer, you can send the
Postscript document to the printer straight away.
It is important to mention, that the problem of printing Postscript
or any such documents using FOP can be resolved and in the next
sections we will see more than one way of resolving them.
Printing Solution 1
The first question to ask is do you really need to store the
output from FOP as a document? What I mean is that it may be
good enough for you just to be able to print the document and
not storing it as PDF or PS or any other format. If that is the
case, there is a solution using the FO document format. Now,
many of you might recall from my previous article that FOP
produces an intermediate document format called FO document with
.fo extension. This FO document contains a XSL-FO definition of
the content to be printed or formatted to any other final
desired output format. In essence, XSL-FO contains the data and
the layout definition for the final output.
If you don’t need to physically produce a PDF or PS document,
then this XSL-FO document can do the printing job for you. Next,
we shall produce an example of a printing program using FOP.
This solution is based on the Java AWT Printing API. The Java
AWT provides two interfaces java.awt.Printable and
java.awt.Pageable. One can write a class implementing
these two interfaces, which is capable of handling the page
layout and page content for any printable object. Details of
discussion about Java AWT print is beyond the scope for this
article, but a nice tutorial can be found at the JavaBoutique website.
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.
|