Q: Can your Java PDF library, jPDFProcess, create linearized PDF documents / save existing PDF documents as linearized?
A: Yes, as of version 4.70, released in March 2012, jPDFProcess can create linearize PDF documents.
To linearize a PDF document with jPDFProcess, 2 simple lines of code do the trick:
PDFDocument myPDF= new PDFDocument(“file.pdf”);
What is PDF linearization and why are PDF documents linearized?
A linearized PDF, also called sometimes "Web Optimized" or "Fast Web View" enabled PDF, is a PDF file that has all the objects
ordered in a specific way and with a couple of additional special objects
added. The linearized PDF format is completely compatible with the regular pdf
format, and a viewer does not need to know anything about linearization to
process a linearized PDF .
The purpose of linearization is so that a viewer that does understand the linearization format can display the first page in the document as quickly as possible over a potentially slow network connection and then to subsequently jump to any other individual page requested by the user as quickly as possible, without ever having to download data that is only required for other pages.
A linearized PDF file starts with a linearization
dictionary, a cross reference table for all of the first page objects, a
special PDF stream object called the hint stream, and then all of
the objects needed to render the first page. After that all of the objects for
all the other pages appear in the file grouped by the page they belong to or,
if used by more than one page, in the shared object group. And finally any
objects not necessarily needed for page rendering appear followed by a cross
reference table for the non-first page objects.
The hint stream is a compact table that can tell a
linearization aware viewer which objects are required for any one page, and the
file offsets of each of those objects. That way the viewer need only download
the first part of the file up to the end of the hint stream, and then send
download requests for specific file segments to a web server to be able to
display any other page the user may wish to view (e.g. by following a link in
the bookmarks, etc.)