- Add support font auto-detection (easier font configuration) including a font cache to speed up the auto-detection process.
- Refactoring of the configuration code: All Avalon configuration stuff is extracted into separate "Configurator" classes.
- Refactoring of the FOURIResolver.
Submitted by: Adrian Cumiskey <fop-dev.at.cumiskey.com>
Changes to the patch by jeremias during the review:
- Font cache simplified (Java object serialization instead of XML), functionality fixed and moved to the fonts.package.
- Relocated default cache file location to user directory.
- Fixed the font configuration for PDFDocumentGraphics2D/PDFTranscoder that got lost with the patch.
- Fixed a problem with having a non-file URL as font base URL.
- Simplified RendererContextInfo stuff to make it easier to understand.
- Fixed handling of Type 1 fonts in auto-detection.
- Reduced verbosity of font-related log output.
- Updated Jakarta Commons IO to version 1.3.1 (the patch depends on it)
- Various javadocs improvements
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@542237 13f79535-47bb-0310-9956-ffa450edef68
Add a configuration parameter (strict-configuration), enabled by default, which makes FOP throw an exception instead of logging an error when a problem occurs.
Invalid resource paths should be catched now. Fixes bug #40120.
Submitted by: Adrian Cumiskey (fop-dev AT cumiskey DOT com)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@507539 13f79535-47bb-0310-9956-ffa450edef68
Support for the rgb-icc() function and for a proprietary cmyk() function (for device CMYK colors only through the PDF renderer so far).
Submitted by: Peter Coppens <pc.subscriptions.at.gmail.com>
Patch slightly modified to comply with our Java conventions, plus some minor editing.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@474225 13f79535-47bb-0310-9956-ffa450edef68
Introduced "ignored namespaces" list on FopFactory. Attributes from ignored namespaces are not complained about. Not done for elements, yet.
Added support for foreign attributes (attributes in a non-FO namespace) on formatting objects, for example to specify additional (proprietary) hints for rendering i-f-o and e-g. First usage example is PCLRendererContext which the PCLGraphics2DAdapter uses to decide whether to paint natively using HP GL/2 or using a bitmap.
PCL Renderer revived: Basic framework constructed based on the old one. Still incomplete (no border painting, incomplete Graphics2D implementation, problems with reference orientation, no kerning etc.). The PCL Renderer implements PCL5 (monochrome) and HP GL/2. Work in progress!
Added UnitConv helper class which could also be useful elsewhere (Could be a candidate for Commons).
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@397806 13f79535-47bb-0310-9956-ffa450edef68
Bypass URI resolution for "data:" URLs (RFC 2397). If a large data URL is given to Apache XML Commons Resolver, it tries to construct a java.net.URL from it which takes forever and fails in the end when no protocol handler for "data" URLs is installed.
Merged Temp_API_Finalization branch back into FOP Trunk:
Finalized API according to the plan in the Wiki: http://wiki.apache.org/xmlgraphics-fop/ApiDesign
In addition to that:
Deprecated the rest of the Fop constructors.
Refactored the FopServlet a bit to make it more versatile and still easy to understand. The FopPrintServlet is now a subclass of FopServlet.
Some further cleanup on the way.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@389086 13f79535-47bb-0310-9956-ffa450edef68
No stacktrace when encountering problems while building a base URL. It's not necessary and draws too much attention. Instead added the URL to the log message that causes the problem.
Don't validate Base URLs anymore in FOUserAgent because that produces errors (because an URL cannot be built) if a symbolic URI is used which is later resolved through a URIResolver.
Improved support for relative URLs for accessing font resources.
ServletContextURIResolver can now use a base URI that starts with "servlet-context:".
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@388766 13f79535-47bb-0310-9956-ffa450edef68
Made the loading of user-specified hyphenation patterns usable again and plugged it into URI resolution.
Backwards-compatibility should be maintained.
PatternParser now uses JAXP to get the SAX parser.
Moved the hyphenation pattern cache into a separate class so I can easily plug it into FopFactory later instead of having static variables.
Added serialVersionUID to HyphenationTree. Necessary because the class signature changed.
FOURIResolver does not complain about "file not found" on the log anymore since this should be done by the caller. Until now, this resulted in two log messages about the same problem on the log. "File not found" is still reported but only on level "debug" which might be helpful when tracking down a problem, but at least it's not a "WARNING" anymore.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@387477 13f79535-47bb-0310-9956-ffa450edef68
Note: letter-spacing is still implemented as before. Fixing this cannot be done without looking at space resolution as a whole on inline level.
The Character area tree object is now deprecated. Normal Text objects should be used to keep renderers simpler.
Introduced FontResolver interface to remove the dependency of FOUserAgent into the font package.
Added kerning information to the base14 fonts, Helvetica and Times. By default it is not used to keep the status-quo. Enable base14 kerning through the FOUserAgent (FopFactory after the API finalization).
Restored the production of EPS images in PDF output as PostScript XObjects.
Restored functionality for a more compact format for the area tree renderer to save space.
LayoutEngineTester slightly changed to allow for configuration values from the XML file. For now, only enabling base14 kerning is supported.
Removed duplicate offset variable in SpaceArea.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@386327 13f79535-47bb-0310-9956-ffa450edef68
Added support for relative font config URLs (metrics-url and embed-url). These URLs are now resolved through the FOP config URI resolver. A new configuration item font-base has been added which defines the base URL to be used for resolution of the font URLs. If it is not given the normal FOP base URL is used. Unrelated to this feature the patch also contains a new image class (java 1.4 specific) for JPEG images. This is for renderers (e.g. AFP) which require access to the decoded JPEG.
NOTE: API changes in a backwards-incompatible way: FOUserAgent.setResolution() -> FOUserAgent.setSourceResolution() and FOUserAgent.setTargetResolution()
Resolution parameter to the user agent is split into:
- a source resolution used to determine the pixel size in SVG images and bitmap without resolution information
- a target resolution used to specify the output resolution of bitmap images generated by bitmap renderers and bitmaps generated by Batik for filter effects.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@357081 13f79535-47bb-0310-9956-ffa450edef68
Alternative set of rules for text indent calculation (start-indent and end-indent) which tries to mimic many commercial FO implementation that have chosen to break the specification in this aspect. I think I have found the behaviour for most cases. But I'm operating in reverse-engineering mode here and not all FO implementations behave in the same way!
This is an optional feature that has to be explicitely enabled through the user agent. Otherwise, FOP will behave like before.
In the FO tree tests a processing instruction is used to enable the feature/bug ;-) in the user agent so I can test both cases.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@354763 13f79535-47bb-0310-9956-ffa450edef68
Deprecated constructors Fop(int) and Fop(int, FOUserAgent).
Deprecated Fop.getVersion() in favor for Version.getVersion().
Changed every place the newly deprecated methods were called.
Ant task and TestConverter changed to fully use MIME types.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@332791 13f79535-47bb-0310-9956-ffa450edef68
Fop.java gets two new constructors: Fop(String) and Fop(String, FOUserAgent) where the String is the MIME type for the desired output format.
MimeConstants provides a comprehensive list of MIME types used in Fop.java.
Non-standard, FOP-specific MIME types changed to a uniform pattern: application/X-fop-awt-preview, application/X-fop-print and application/X-fop-areatree.
RendererFactory now supports manual registration and dynamic discovery of Renderers and FOEventHandlers by their MIME types. Instantitation is done using MIME types everywhere.
The RENDER_* constants are mapped to MIME types in Fop.java.
RendererFactory is now an instantiable class whose reference is held by FOUserAgent just like it is done for the XLMHandlers.
Renderers and FOEventHandlers now each have a *Maker class which is a kind of factory class which is used to register a Renderer/FOEventHandler and additionally serves to provide additional information about the thing, such as the MIME types it supports and if the implementation requires an OutputStream.
The command-line gets a new option: -out application/pdf myfile.pdf is the generic way to create an output file. If someone created a WordML output handler and provided the right service resource file he could specify "-out text/xml+msword out.xml". ".out list" lists all MIME types that are available for output.
Renderers can now potionally expose a Graphics2DAdapter which in concert with Graphics2DImagePainter can be used by FOP extensions to paint their content directly using a Graphics2D instance. That makes it possible to avoid a detour via SVG/Batik in certain cases.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@332549 13f79535-47bb-0310-9956-ffa450edef68
Moved CLI to its own package. New main class is org.apache.fop.cli.Main.
InputHandler is not passed through the FOUserAgent anymore. IMO it doesn't belong there. Instead I defined an interface "Renderable" in the AWT preview that InputHandler implements. This is used exclusively for reloading the document inside the preview dialog.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@239409 13f79535-47bb-0310-9956-ffa450edef68
Renamed FOUserAgent.getStream() to FOUserAgent.resolveURI() which now simply returns a Source instance which the ImageFactory uses to get at an InputStream somehow.
Submitted by: Manuel Mall <mm.at.arcus.com.au>
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@232949 13f79535-47bb-0310-9956-ffa450edef68
1. Addresses the URI resolving issue as discussed in this bug by providing a
FOP implementation of the URIResolver interface as well as the capabilities to
set a URIResolver on the FOUserAgent object.
2. Modifies the BMPReader to extract the resolution information.
3. Fixes a possible array bounds exception in BMPImage which can happen for BMP
images with extra bytes at the end.
4. Provides some infrastructure in ImageFactory in preparation of external
configuration of multiple prioritised image providers per mime type.
5. Sets a proper base URL in SVGElement.
6. Provides test cases and test images for the different formats and
resolutions.
Submitted by: Manuel Mall <mm.at.arcus.com.au>
Patch slightly modified:
- EPS sample graphic exchanged with a very simple and more importantly much smaller one generated by Barcode4J.
- Enabled resolution checking for some of the format-specific testcases (especially after working around resolution detection for PNG)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@232786 13f79535-47bb-0310-9956-ffa450edef68
Made Service a stand-alone class so it can be reused.
Made XMLHandler discoverable through the Service class.
Moved XMLHandler collection into new XMLHandlerRegistry class.
Adjusted the Renderers and XMLHandler to the above changes.
This should make it easier to write certain FOP extensions. The changes were triggered by my work on the FOP extension for Barcode4J for the FOP Trunk.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@225143 13f79535-47bb-0310-9956-ffa450edef68
Resurrected Java2D/AWT Renderer (including bitmap output to PNG and TIFF using the Batik codecs and print capability).
Submitted by: Renaud Richardet <renaud.richardet.at.gmail.com>
Changes on the original patch:
- PageViewport: isResolved() caused a NPE which I fixed.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198725 13f79535-47bb-0310-9956-ffa450edef68
Merge of branch Temp_KnuthStylePageBreaking back into HEAD.
Temp_KnuthStylePageBreaking branch and HEAD have been tagged prior to the merge, so merging uncommitted work from the branch should be easier.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198627 13f79535-47bb-0310-9956-ffa450edef68
Extend the user agent to pipe title, author and keywords through to the PDF. A title on the user agent will override any title info gathered from fo:title elements.
This patch implements a pluggable LayoutManagers system, according
to the ideas of Finn Bock and his patch in bug 30500.
Created a LayoutManagerMaker interface, with method
makeLayoutManagers(FONode, List), and two convenience methods on top
of it.
Created an implementation: LayoutManagerMapping. This is along the
pattern of FOElementMapping. It creates a Map from FObj class to Maker
objects. There are many static inner classes which are subclasses of
Maker. Each subclass implements its own version of the make method.
FOUserAgent has a setter and getter for
LayoutManagerMakerOverride. AreaTreeHandler creates a
LayoutManagerMaker, taking the user's override into account, using
LayoutManagerMapping as the default. It has a get method for it.
The LayoutManager interface has a get method for the AreaTreeHandler
object, a reference to which is held in PageSequenceLM, the top of the
LM tree.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198208 13f79535-47bb-0310-9956-ffa450edef68
Obtained from:
Submitted by:
Reviewed by:
1.) Rename of interface Resolveable to Resolvable. (http://dictionary.reference.com/search?q=resolvable)
2.) Reordering of methods in AreaTreeHandler, removal of unneeded TreeExt array.
3.) Switch from AreaTreeModel.addExtension() to .handleExtension().
4.) Removal of unneeded TreeExt.getName() (unused), getMimeType() (implementation
of an Area Tree extension up to each renderer), and isResolvable() (code changed to
use instanceof operator instead).
5.) Couple of minor layout bugs fixed.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198098 13f79535-47bb-0310-9956-ffa450edef68
Centralized Renderer and FOEventHandler creation in the RenderFactory class.
Provide a similar mechanism as for the Renderers to override the FOEventHandler being used to be able to plug in custom FOEventHandlers. (I don't particularly like this approach but so be it for the moment.)
Javadocs updates in FOUserAgent.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198027 13f79535-47bb-0310-9956-ffa450edef68
Moved from element mapping class names to element mapping objects.
This solves a potential problem where Class.forName() can't load the
element mapping class because the element mapping is only available
in a classloader below the one that loaded fop.jar.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197974 13f79535-47bb-0310-9956-ffa450edef68
Moved user-defined ElementMapping initialization from Driver to FOUserAgent.
Moved only "string" method, the version we use internally--probably sufficient
for others' work as well. (Note: an additional unused FOUserAgent object will
be created in driver during command-line use--cp. its no-param constructor vs.
setUserAgent() call in apps.Fop; this will need to be ironed out at some time.)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197794 13f79535-47bb-0310-9956-ffa450edef68
1.) Moved Renderer instantiation from Driver to FOTreeHandler, as it is the only
FOInputHandler subclass concerned with Renderer creation. (MIFHandler and RTFHandler
are hardcoded to a particular renderer-type).
2.) Added a RendererOverride member variable in FOUserAgent, for use by
AWTRenderer as well as external (i.e. user-defined) renderers. FOTreeHandler coded
to reference it.
3.) Flow validity checking which was added yesterday temporarily commented-out;
I misread the content model from the spec (I will have to account for fo:markers
as initial children.)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197746 13f79535-47bb-0310-9956-ffa450edef68
1. Output constant types (RENDER_PDF, RENDER_PS, etc.) made common between
CommandLineOptions and Driver, and factored into fo.Constants interface.
2. New Driver(AWTRenderer renderer) constructor added in apps.Driver for
the AWTRenderer (which does reloading, unique among the output types.) Note
reloading currently doesn't work--AWTRenderer not yet functional.
3. Driver.hasData() method removed from API--a search on when it was implemented
dates it to 2001, when reset() was coded. Unsure of its need, and so
removed until we have user requests for it.
4. Renderers abstracted away from API in favor of just calling .setRenderer(int Rendertype),
and configuring user-configurable options in FOUserAgent.
5. Driver.setRenderer(String <renderer class name>) also dropped. If external user
need for it, can be re-implemented fairly easily via a "renderer override" string in FOUserAgent, for which FOTreeHandler can read and use instead.
6. Validity checking added to fo:flow, and convenience functions defining the "%block;"
parameter entity and neutral containers as defined in 6.2 of spec [1] added to FObj.
[1] http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N9447-Formatting-Object-Content
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197745 13f79535-47bb-0310-9956-ffa450edef68
1.) Moved the CommandLineOptions' InputHandler object into FOUserAgent, allowing
for a no-parameter constructor for AWTRenderer (like the other renderers). (Code is
not yet ideal in AWTRenderer, but will do the task.)
2.) AWT renderer handling now more similar to the other renderers
(simplifications in Driver, Fop).
3.) Driver.getRenderer() removed from API. (Renderer configuration now mostly
done through FOUserAgent, and setup of renderer prior to calling setRenderer().)
4.) Validity checking added to region-after, -start, -end, and -before.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197744 13f79535-47bb-0310-9956-ffa450edef68
1.) Moving renderer-specific customization variables (producer, creator, create date) to FOUserAgent, those renderers which can work with these values can read them from passed-in FOUserAgent instance.