[
https://issues.apache.org/jira/browse/FOP-3135?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17802908#comment-17802908
]
Julien Lacour edited comment on FOP-3135 at 1/4/24 11:07 AM:
-------------------------------------------------------------
[~jgoncalves] I did a small modification to the SVG file to use Calibri instead
of Times:
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" width="3in" height="2in">
<rect width="100%" height="100%" fill="pink"/>
<text><tspan x="10 30 50 70 90" y="30"
font-family="Calibri">ADATA</tspan></text>
<text><tspan x="10 30 50" y="50" font-family="Calibri">ADATA</tspan></text>
<text><tspan x="10" y="70" font-family="Calibri">ADATA</tspan></text>
<text><tspan x="10" y="100 120 140 160 180"
font-family="Calibri">ADATA</tspan></text>
</svg>
{code}
And when I run FOP 2.9 with WIP.patch applied on fop-core classes, all the
tspan text is displayed on a single line (see MI-Calibri-test.pdf).
I simply ran the following command:
{code}
fop -c "..\fop-2.9\fop\conf\fop.xconf" -fo ..\test\MI-test.fo -pdf
..\test\MI-test.pdf
{code}
PS: I has to absolutize the path to the SVG file in the <fo:external-graphic>
element.
was (Author: JIRAUSER300900):
[~jgoncalves] I did a small modification to the SVG file to use Calibri instead
of Times:
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" width="3in" height="2in">
<rect width="100%" height="100%" fill="pink"/>
<text><tspan x="10 30 50 70 90" y="30"
font-family="Calibri">ADATA</tspan></text>
<text><tspan x="10 30 50" y="50" font-family="Calibri">ADATA</tspan></text>
<text><tspan x="10" y="70" font-family="Calibri">ADATA</tspan></text>
<text><tspan x="10" y="100 120 140 160 180"
font-family="Calibri">ADATA</tspan></text>
</svg>
{code}
And when I run FOP 2.9 with WIP.patch applied on fop-core classes, all the
tspan text is displayed on a single line (see MI-Calibri-test.pdf).
> SVG <tspan> content is displayed on a single line without spaces
> ----------------------------------------------------------------
>
> Key: FOP-3135
> URL: https://issues.apache.org/jira/browse/FOP-3135
> Project: FOP
> Issue Type: Bug
> Components: image/svg
> Reporter: Julien Lacour
> Priority: Minor
> Attachments: MI-Calibri-test.pdf, MI-out-patch.pdf, MI-out.pdf,
> MI-test.fo, MI-tspan.svg, MI.patch, WIP-out.pdf, WIP.patch, tspan.svg
>
>
> We have found an issue in FOP when transforming PDFs with SVGs containing
> <tspan> with multiple @x and/or @y attributes values.
> The problem is located in
> org.apache.fop.svg.PDFTextPainter.writeGlyphs(FOPGVTGlyphVector,
> GeneralPath), the positions given by x and y are never used when set.
> A possible fix for this issue is the following:
> {code:java}
> for (int i = 0, n = gv.getNumGlyphs(); i < n; i++) {
> int gc = gv.getGlyphCode(i);
> int[] pa = ((i > dp.length) || (dp[i] == null)) ?
> paZero : dp[i];
> if (gv.getGlyphPosition(i) != null) {
> Point2D gp = gv.getGlyphPosition(i);
> double x = gp.getX() - initialPos.getX();
> double y = -(gp.getY() - initialPos.getY());
> double xd = x - xoLast;
> double yd = y - yoLast;
> textUtil.writeTd(xd, yd);
> textUtil.writeTj((char) gc, true, false);
> xc = x + pa[2];
> yc = y + pa[3];
> xoLast = x;
> yoLast = y;
> } else {
> double xo = xc + pa[0];
> double yo = yc + pa[1];
> double xa = f.getWidth(gc);
> double ya = 0;
> double xd = (xo - xoLast) / 1000f;
> double yd = (yo - yoLast) / 1000f;
>
> textUtil.writeTd(xd, yd);
> textUtil.writeTj((char) gc, true, false);
> xc += xa + pa[2];
> yc += ya + pa[3];
> xoLast = xo;
> yoLast = yo;
> }
> }
> {code}
> I also attached an example for testing, it can be opened in Batik for
> comparison.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)