You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-dev@xmlgraphics.apache.org by bu...@apache.org on 2004/03/26 07:39:34 UTC
DO NOT REPLY [Bug 27971] New: -
Bugs on the transformation of the linearGradient element for SVG to PDF
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=27971>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=27971
Bugs on the transformation of the linearGradient element for SVG to PDF
Summary: Bugs on the transformation of the linearGradient element
for SVG to PDF
Product: Fop
Version: 1.0dev
Platform: PC
OS/Version: Windows XP
Status: NEW
Severity: Major
Priority: Other
Component: svg
AssignedTo: fop-dev@xml.apache.org
ReportedBy: gliu@actuate.com
CC: keiron@aftexsw.com
There's a bug found while converting an SVG file to PDF file with some
functionalities of linearGradient and object translation, using the FOP
version xml-fop_20040318232912.tar.gz
The source SVG file contains two rect shapes, one is located from the origin,
another is translated for some distance. Both of them are employed with a same
linearGradient, names "linearGradient1", which is defined based on the origin
of the SVG coordinate. However, in the converted PDF file, the translated rect
object just displays a single color (the second stop color of the
linearGradient), while the un-translated rect object displays normally.
We found the root cause of this issue maybe the improper concatinating
transformations implemented in the ApplyPaint() function of the class
org.apache.fop.svg.PDFGraphics2D, omitting a necessary concatinating transform:
=============================
//MultipleGradientPaint.CycleMethodEnum cycenum = gp.getCycleMethod();
//boolean cyclic = (cycenum == MultipleGradientPaint.REPEAT);
AffineTransform transform = graphicsState.getTransform();
transform.concatenate(gp.getTransform());
transform.concatenate(getTransform()); ///Here the fixing
=============================
The sample of SVG file is attached as below:
===================================================================
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="800" height="600" viewBox="0 0 800 600"
xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>Example lingrad01 - fill a rectangle using a
linear gradient paint server</desc>
<g>
<defs>
<linearGradient x1="10" gradientUnits="userSpaceOnUse" x2="300" y1="10"
y2="300" id="linearGradient1" spreadMethod="pad">
<stop style="stop-opacity:1; stop-color:blue;" offset="0%" />
<stop style="stop-opacity:1; stop-color:green;" offset="100%" />
</linearGradient>
</defs>
<!-- The rectangle is filled using a linear gradient paint server -->
<rect x="10" y="10" width="290" style="fill:url(#linearGradient1);
stroke:none;" height="290" />
<rect transform="translate(300,300)" x="10" y="10" width="290" style="fill:url
(#linearGradient1); stroke:none;" height="290" />
<rect x="0" y="0" height="600" width="800" style="stroke:red; fill:none"/>
</g>
</svg>
============================================================================