import org.apache.batik.bridge.BridgeContext;
import org.apache.batik.bridge.GVTBuilder;
-import org.apache.batik.bridge.ViewBox;
import org.apache.batik.dom.svg.SVGDOMImplementation;
import org.apache.batik.gvt.GraphicsNode;
import org.apache.fop.apps.FOPException;
"svg graphic could not be built: " + e.getMessage(), e);
return;
}
- float w = (float) ctx.getDocumentSize().getWidth() * 1000f;
- float h = (float) ctx.getDocumentSize().getHeight() * 1000f;
+
+ // If no viewbox is defined in the svg file, a viewbox of 100x100 is
+ // assumed, as defined in SVGUserAgent.getViewportSize()
+ float iw = (float) ctx.getDocumentSize().getWidth() * 1000f;
+ float ih = (float) ctx.getDocumentSize().getHeight() * 1000f;
+
+ float w = (float) pos.getWidth();
+ float h = (float) pos.getHeight();
// correct integer roundoff
state.getGraph().translate(x / 1000, y / 1000);
SVGSVGElement svg = ((SVGDocument) doc).getRootElement();
- AffineTransform at = ViewBox.getPreserveAspectRatioTransform(svg,
- w / 1000f, h / 1000f);
+ // Aspect ratio preserved by layout engine, not here
+ AffineTransform at = AffineTransform.getScaleInstance(w / iw, h / ih);
AffineTransform inverse = null;
try {
inverse = at.createInverse();
state.getGraph().transform(inverse);
}
// correct integer roundoff
- // currentState.getCurrentGraphics().translate(-x / 1000f, y / 1000f -
- // pageHeight);
- state.getGraph().translate(-(x + 500) / 1000,
- (y + 500) / 1000 - pageHeight);
+ state.getGraph().translate(-(x + 500) / 1000, -(y + 500) / 1000);
}
/**
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright 2005 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!-- $Id$ -->
-<testcase>
- <info>
- <p>
- This test checks external-graphics.
- </p>
- </info>
- <fo>
- <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
- <fo:layout-master-set>
- <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
- <fo:region-body/>
- </fo:simple-page-master>
- </fo:layout-master-set>
- <fo:page-sequence master-reference="normal" white-space-collapse="true">
- <fo:flow flow-name="xsl-region-body">
- <fo:block>SVG external-graphic</fo:block>
- <fo:block>
- <fo:external-graphic src="../../resources/images/img.svg"/>EOG
- </fo:block>
- <fo:block>EOF</fo:block>
- </fo:flow>
- </fo:page-sequence>
- </fo:root>
- </fo>
- <checks>
- <eval expected="100000" xpath="//flow/block[2]/lineArea/viewport/@ipd"/>
- <eval expected="100000" xpath="//flow/block[2]/lineArea/viewport/@ipda"/>
- <eval expected="100000" xpath="//flow/block[2]/lineArea/viewport/@bpd"/>
- <eval expected="100000" xpath="//flow/block[2]/lineArea/viewport/@bpda"/>
- </checks>
-</testcase>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+ Copyright 2005 The Apache Software Foundation\r
+\r
+ Licensed under the Apache License, Version 2.0 (the "License");\r
+ you may not use this file except in compliance with the License.\r
+ You may obtain a copy of the License at\r
+\r
+ http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+ Unless required by applicable law or agreed to in writing, software\r
+ distributed under the License is distributed on an "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ See the License for the specific language governing permissions and\r
+ limitations under the License.\r
+-->\r
+<!-- $Id$ -->\r
+<testcase>\r
+ <info>\r
+ <p>\r
+ This test checks external-graphics.\r
+ </p>\r
+ </info>\r
+ <fo>\r
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">\r
+ <fo:layout-master-set>\r
+ <fo:simple-page-master master-name="normal" page-width="10in" page-height="15in">\r
+ <fo:region-body/>\r
+ </fo:simple-page-master>\r
+ </fo:layout-master-set>\r
+ <fo:page-sequence master-reference="normal" white-space-collapse="true">\r
+ <fo:flow flow-name="xsl-region-body">\r
+ <fo:block text-align="left">2 inch wide SVG external-graphic on LHS</fo:block>\r
+ <fo:block text-align="left">\r
+ <fo:external-graphic src="../../resources/images/img.svg" content-width="2in" scaling="uniform" />EOG\r
+ </fo:block>\r
+ <fo:block text-align="right">4 inch wide SVG external-graphic on RHS</fo:block>\r
+ <fo:block text-align="right">\r
+ <fo:external-graphic src="../../resources/images/img.svg" content-width="4in" scaling="uniform" />EOG\r
+ </fo:block>\r
+ <fo:block text-align="center">6 inch wide SVG external-graphic in center, non-uniformly squeezed to a height of 4in.</fo:block>\r
+ <fo:block text-align="center">\r
+ <fo:external-graphic src="../../resources/images/img.svg" content-width="6in" content-height="4in" scaling="non-uniform" />EOG\r
+ </fo:block>\r
+ <fo:block text-align="left">SVG external-graphic with an intrinsic size (16ptx16pt)</fo:block>\r
+ <fo:block text-align="left">\r
+ <fo:external-graphic src="../../resources/images/img-w-size.svg"/>EOG\r
+ </fo:block>\r
+ <fo:block>EOF</fo:block>\r
+ </fo:flow>\r
+ </fo:page-sequence>\r
+ </fo:root>\r
+ </fo>\r
+ <checks>\r
+ <eval expected="144000" xpath="//flow/block[2]/lineArea/viewport/@ipd"/>\r
+ <eval expected="144000" xpath="//flow/block[2]/lineArea/viewport/@ipda"/>\r
+ <eval expected="144000" xpath="//flow/block[2]/lineArea/viewport/@bpd"/>\r
+ <eval expected="144000" xpath="//flow/block[2]/lineArea/viewport/@bpda"/>\r
+ <eval expected="0 0 144000 144000" xpath="//flow/block[2]/lineArea/viewport/image/@pos"/>\r
+ \r
+ <eval expected="288000" xpath="//flow/block[4]/lineArea/viewport/@ipd"/>\r
+ <eval expected="288000" xpath="//flow/block[4]/lineArea/viewport/@ipda"/>\r
+ <eval expected="288000" xpath="//flow/block[4]/lineArea/viewport/@bpd"/>\r
+ <eval expected="288000" xpath="//flow/block[4]/lineArea/viewport/@bpda"/>\r
+ <eval expected="0 0 288000 288000" xpath="//flow/block[4]/lineArea/viewport/image/@pos"/>\r
+\r
+ <eval expected="432000" xpath="//flow/block[6]/lineArea/viewport/@ipd"/>\r
+ <eval expected="432000" xpath="//flow/block[6]/lineArea/viewport/@ipda"/>\r
+ <eval expected="288000" xpath="//flow/block[6]/lineArea/viewport/@bpd"/>\r
+ <eval expected="288000" xpath="//flow/block[6]/lineArea/viewport/@bpda"/>\r
+ <eval expected="0 0 432000 288000" xpath="//flow/block[6]/lineArea/viewport/image/@pos"/>\r
+\r
+ <!-- TODO: This evaluates nicely to 16000mpt with 72dpi in the FOUserAgent but will result \r
+ in 16080 for 300dpi which is caused by rounding errors because pixels are used internally. -->\r
+ <eval expected="16000" xpath="//flow/block[8]/lineArea/viewport/@ipd"/>\r
+ <eval expected="16000" xpath="//flow/block[8]/lineArea/viewport/@ipda"/>\r
+ <eval expected="16000" xpath="//flow/block[8]/lineArea/viewport/@bpd"/>\r
+ <eval expected="16000" xpath="//flow/block[8]/lineArea/viewport/@bpda"/>\r
+ <eval expected="0 0 16000 16000" xpath="//flow/block[8]/lineArea/viewport/image/@pos"/>\r
+ </checks>\r
+</testcase>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<!--
+ Copyright 2005 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- This SVG is the same as img.svg but with an intrinsic size. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="16pt" height="16pt">
+ <g style="fill:red; stroke:#000000">
+ <rect x="0" y="0" width="15" height="15"/>
+ <rect x="5" y="5" width="15" height="15"/>
+ </g>
+</svg>