Package org.apache.fop.pdf
Class PDFDocument
java.lang.Object
org.apache.fop.pdf.PDFDocument
Class representing a PDF document.
The document is built up by calling various methods and then finally
output to given filehandle using output method.
A PDF document consists of a series of numbered objects preceded by a
header and followed by an xref table and trailer. The xref table
allows for quick access to objects by listing their character
positions within the document. For this reason the PDF document must
keep track of the character position of each object. The document
also keeps direct track of the /Root, /Info and /Resources objects.
Modified by Mark Lillywhite, mark-fop@inomial.com. The changes
involve: ability to output pages one-at-a-time in a streaming
fashion (rather than storing them all for output at the end);
ability to write the /Pages object after writing the rest
of the document; ability to write to a stream and flush
the object list; enhanced trailer output; cleanups.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
the encoding to use when converting strings to PDF commandsprotected int
the character position of each objectprotected int
the counter for object numberingthe objects themselvesprotected boolean
protected long
the current character positionprotected List<PDFStructElem>
List of objects to write in the trailer -
Constructor Summary
ConstructorDescriptionPDFDocument
(String prod) Creates an empty PDF document.PDFDocument
(String prod, VersionController versionController) Creates an empty PDF document. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addDestination
(PDFDestination destination) Adds a destination to the document.addFormXObject
(PDFResourceContext res, PDFStream cont, PDFReference formres, String key) Add a form XObject to the PDF document.addImage
(PDFResourceContext res, PDFImage img) Add an image to the PDF document.void
Adds aPDFObject
to this document.void
Add trailer object.void
applyEncryption
(AbstractPDFStream stream) Apply the encryption filter to a PDFStream if encryption is enabled.void
void
enableAccessibility
(boolean enableAccessibility) static byte[]
Converts text to a byte array for writing to a PDF file.protected PDFDestination
findDestination
(PDFDestination compare) Finds a named destination.protected PDFFileSpec
findFileSpec
(PDFFileSpec compare) Finds a file spec.protected PDFFont
Finds a font.protected PDFFunction
findFunction
(PDFFunction compare) Looks through the registered functions to see if one that is equal to a reference object existsprotected PDFGoTo
Finds a goto.protected PDFGoToRemote
findGoToRemote
(PDFGoToRemote compare) Finds a goto remote.protected PDFGState
findGState
(PDFGState wanted, PDFGState current) Looks for an existing GState to useprotected PDFLaunch
findLaunch
(PDFLaunch compare) Finds a launch.protected PDFLink
Finds a link.protected PDFPattern
findPattern
(PDFPattern compare) Find a previous pattern.protected PDFShading
findShading
(PDFShading compare) Looks through the registered shadings to see if one that is equal to a reference object existsstatic void
flushTextBuffer
(StringBuilder textBuffer, OutputStream out) Flushes the given text buffer to an output stream with the right encoding and resets the text buffer.int
Returns the color space.Gets the list of named destinations.Returns the active Encryption object.Returns the factory for PDF objects.Returns thePDFFilter
s map used for filters in this document.Returns the font map for this document.Deprecated.Use getXObject instead (so forms are treated in the same way)getInfo()
Get thePDFInfo
object for this document.Get the root Outlines object.getPages()
Returns thePDFPages
object associated with the root object.Returns the PDF color space object.Returns the current PDF version.Get the /Resources object for the documentgetRoot()
Get thePDFRoot
object for this document.Get the Structural Tree Collection for this documentgetXObject
(String key) Get an XObject from the image map.boolean
Gets whether the document has named destinations.boolean
Indicates whether encryption is active for this PDF or not.boolean
boolean
boolean
makeStructTreeRoot
(PDFParentTree parentTree) Creates and returns a StructTreeRoot object.void
output
(OutputStream stream) Writes out the entire documentvoid
outputHeader
(OutputStream stream) Write the PDF header.static int
outputIndirectObject
(PDFObject object, OutputStream stream) Outputs the given object, wrapped by obj/endobj, to the given stream.void
outputTrailer
(OutputStream stream) Write the trailerregisterObject
(PDFObject obj) Registers aPDFObject
in this PDF document.void
registerStructureElement
(PDFStructElem structElem) Adds the given element to the structure tree.void
registerStructureElement
(PDFStructElem structElem, StandardStructureAttributes.Table.Scope scope) Assigns the given scope to the given element and adds it to the structure tree.void
setColorSpace
(int theColorspace) Set the color space.void
setCreationDate
(Date date) Sets the creation date of the document.void
setCreator
(String creator) Sets the creator of the document.void
setEncryption
(PDFEncryptionParams params) Enables PDF encryption.void
setFilterMap
(Map<String, List<String>> map) Sets the filter map to use for filters in this document.void
setFormXObjectEnabled
(boolean b) void
setLinearizationEnabled
(boolean b) void
setMergeFontsEnabled
(boolean mergeFontsEnabled) void
setPDFVersion
(Version version) Sets the PDF version of this document.void
setProducer
(String producer) Sets the producer of the document.protected int
streamIndirectObject
(PDFObject o, OutputStream stream) protected void
writeTrailer
(OutputStream stream, int first, int last, int size, long mainOffset, long startxref)
-
Field Details
-
ENCODING
the encoding to use when converting strings to PDF commands- See Also:
-
objectcount
protected int objectcountthe counter for object numbering -
position
protected long positionthe current character position -
indirectObjectOffsets
the character position of each object -
structureTreeElements
-
trailerObjects
List of objects to write in the trailer -
objects
the objects themselves -
gStateObjectCount
protected int gStateObjectCount -
pageObjs
-
outputStarted
protected boolean outputStarted
-
-
Constructor Details
-
PDFDocument
Creates an empty PDF document. The constructor creates a /Root and /Pages object to track the document but does not write these objects until the trailer is written. Note that the object ID of the pages object is determined now, and the xref table is updated later. This allows Pages to refer to their Parent before we write it out.- Parameters:
prod
- the name of the producer of this pdf document
-
PDFDocument
Creates an empty PDF document. The constructor creates a /Root and /Pages object to track the document but does not write these objects until the trailer is written. Note that the object ID of the pages object is determined now, and the xref table is updated later. This allows Pages to refer to their Parent before we write it out.- Parameters:
prod
- the name of the producer of this pdf documentversionController
- the version controller of this PDF document
-
-
Method Details
-
getPDFVersion
Returns the current PDF version.- Returns:
- returns the PDF version
-
setPDFVersion
Sets the PDF version of this document.- Parameters:
version
- the PDF version- Throws:
IllegalStateException
- if the version of this PDF is not allowed to change.
-
getPDFVersionString
- Returns:
- the String representing the current PDF version
-
getProfile
- Returns:
- the PDF profile currently active.
-
getFactory
Returns the factory for PDF objects.- Returns:
- the
PDFFactory
object
-
encode
Converts text to a byte array for writing to a PDF file.- Parameters:
text
- text to convert/encode- Returns:
- the resulting
byte
array
-
flushTextBuffer
Flushes the given text buffer to an output stream with the right encoding and resets the text buffer. This is used to efficiently switch between outputting text and binary content.- Parameters:
textBuffer
- the text bufferout
- the output stream to flush the text content to- Throws:
IOException
- if an I/O error occurs while writing to the output stream
-
setProducer
Sets the producer of the document.- Parameters:
producer
- string indicating application producing the PDF
-
setCreationDate
Sets the creation date of the document.- Parameters:
date
- Date to be stored as creation date in the PDF.
-
setCreator
Sets the creator of the document.- Parameters:
creator
- string indicating application creating the document
-
setFilterMap
Sets the filter map to use for filters in this document.- Parameters:
map
- the map of filter lists for each stream type
-
getFilterMap
Returns thePDFFilter
s map used for filters in this document.- Returns:
- the map of filters being used
-
getPages
Returns thePDFPages
object associated with the root object.- Returns:
- the
PDFPages
object
-
getRoot
Get thePDFRoot
object for this document.- Returns:
- the
PDFRoot
object
-
getStructureTreeElements
Get the Structural Tree Collection for this document- Returns:
-
makeStructTreeRoot
Creates and returns a StructTreeRoot object.- Parameters:
parentTree
- the value of the ParenTree entry- Returns:
- the structure tree root
-
registerStructureElement
Adds the given element to the structure tree. -
registerStructureElement
public void registerStructureElement(PDFStructElem structElem, StandardStructureAttributes.Table.Scope scope) Assigns the given scope to the given element and adds it to the structure tree. The scope may not be added if it's not compatible with this document's PDF version. -
getInfo
Get thePDFInfo
object for this document.- Returns:
- the
PDFInfo
object
-
registerObject
Registers aPDFObject
in this PDF document. The object is assigned a new object number. -
assignObjectNumber
- Parameters:
obj
-PDFObject
to assign a number to
-
addObject
Adds aPDFObject
to this document. The object MUST have an object number assigned.- Parameters:
obj
-PDFObject
to add
-
addTrailerObject
Add trailer object. Adds an object to the list of trailer objects.- Parameters:
obj
- the PDF object to add
-
applyEncryption
Apply the encryption filter to a PDFStream if encryption is enabled.- Parameters:
stream
- PDFStream to encrypt
-
setEncryption
Enables PDF encryption.- Parameters:
params
- The encryption parameters for the pdf file
-
isEncryptionActive
public boolean isEncryptionActive()Indicates whether encryption is active for this PDF or not.- Returns:
- boolean True if encryption is active
-
getEncryption
Returns the active Encryption object.- Returns:
- the Encryption object
-
findFunction
Looks through the registered functions to see if one that is equal to a reference object exists- Parameters:
compare
- reference object- Returns:
- the function if it was found, null otherwise
-
findShading
Looks through the registered shadings to see if one that is equal to a reference object exists- Parameters:
compare
- reference object- Returns:
- the shading if it was found, null otherwise
-
findPattern
Find a previous pattern. The problem with this is for tiling patterns the pattern data stream is stored and may use up memory, usually this would only be a small amount of data.- Parameters:
compare
- reference object- Returns:
- the shading if it was found, null otherwise
-
findFont
Finds a font.- Parameters:
fontname
- name of the font- Returns:
- PDFFont the requested font, null if it wasn't found
-
findDestination
Finds a named destination.- Parameters:
compare
- reference object to use as search template- Returns:
- the link if found, null otherwise
-
findLink
Finds a link.- Parameters:
compare
- reference object to use as search template- Returns:
- the link if found, null otherwise
-
findFileSpec
Finds a file spec.- Parameters:
compare
- reference object to use as search template- Returns:
- the file spec if found, null otherwise
-
findGoToRemote
Finds a goto remote.- Parameters:
compare
- reference object to use as search template- Returns:
- the goto remote if found, null otherwise
-
findGoTo
Finds a goto.- Parameters:
compare
- reference object to use as search template- Returns:
- the goto if found, null otherwise
-
findLaunch
Finds a launch.- Parameters:
compare
- reference object to use as search template- Returns:
- the launch if found, null otherwise
-
findGState
Looks for an existing GState to use- Parameters:
wanted
- requested featurescurrent
- currently active features- Returns:
- the GState if found, null otherwise
-
getPDFColorSpace
Returns the PDF color space object.- Returns:
- the color space
-
getColorSpace
public int getColorSpace()Returns the color space.- Returns:
- the color space
-
setColorSpace
public void setColorSpace(int theColorspace) Set the color space. This is used when creating gradients.- Parameters:
theColorspace
- the new color space
-
getFontMap
Returns the font map for this document.- Returns:
- the map of fonts used in this document
-
getImage
Deprecated.Use getXObject instead (so forms are treated in the same way)Get an image from the image map.- Parameters:
key
- the image key to look for- Returns:
- the image or PDFXObject for the key if found
-
getXObject
Get an XObject from the image map.- Parameters:
key
- the XObject key to look for- Returns:
- the PDFXObject for the key if found
-
addDestination
Adds a destination to the document.- Parameters:
destination
- the destination object
-
getDestinationList
Gets the list of named destinations.- Returns:
- the list of named destinations.
-
hasDestinations
public boolean hasDestinations()Gets whether the document has named destinations.- Returns:
- whether the document has named destinations.
-
addImage
Add an image to the PDF document. This adds an image to the PDF objects. If an image with the same key already exists it will return the oldPDFXObject
.- Parameters:
res
- the PDF resource context to add to, may be nullimg
- the PDF image to add- Returns:
- the PDF XObject that references the PDF image data
-
addFormXObject
public PDFFormXObject addFormXObject(PDFResourceContext res, PDFStream cont, PDFReference formres, String key) Add a form XObject to the PDF document. This adds a Form XObject to the PDF objects. If a Form XObject with the same key already exists it will return the oldPDFFormXObject
.- Parameters:
res
- the PDF resource context to add to, may be nullcont
- the PDF Stream contents of the Form XObjectformres
- a reference to the PDF Resources for the Form XObject datakey
- the key for the object- Returns:
- the PDF Form XObject that references the PDF data
-
getOutlineRoot
Get the root Outlines object. This method does not write the outline to the PDF document, it simply creates a reference for later.- Returns:
- the PDF Outline root object
-
getResources
Get the /Resources object for the document- Returns:
- the /Resources object
-
enableAccessibility
public void enableAccessibility(boolean enableAccessibility) -
resolveExtensionReference
-
output
Writes out the entire document- Parameters:
stream
- the OutputStream to output the document to- Throws:
IOException
- if there is an exception writing to the output stream
-
writeTrailer
protected void writeTrailer(OutputStream stream, int first, int last, int size, long mainOffset, long startxref) throws IOException - Throws:
IOException
-
streamIndirectObject
- Throws:
IOException
-
outputIndirectObject
Outputs the given object, wrapped by obj/endobj, to the given stream.- Parameters:
object
- an indirect object, as described in Section 3.2.9 of the PDF 1.5 Reference.stream
- the stream to which the object must be output- Throws:
IllegalArgumentException
- if the object is not an indirect objectIOException
-
outputHeader
Write the PDF header. This method must be called prior to formatting and outputting AreaTrees.- Parameters:
stream
- the OutputStream to write the header to- Throws:
IOException
- if there is an exception writing to the output stream
-
outputTrailer
Write the trailer- Parameters:
stream
- the OutputStream to write the trailer to- Throws:
IOException
- if there is an exception writing to the output stream
-
isMergeFontsEnabled
public boolean isMergeFontsEnabled() -
setMergeFontsEnabled
public void setMergeFontsEnabled(boolean mergeFontsEnabled) -
isLinearizationEnabled
public boolean isLinearizationEnabled() -
setLinearizationEnabled
public void setLinearizationEnabled(boolean b) -
isFormXObjectEnabled
public boolean isFormXObjectEnabled() -
setFormXObjectEnabled
public void setFormXObjectEnabled(boolean b)
-