Description
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:
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; } }
I also attached an example for testing, it can be opened in Batik for comparison.
Attachments
Attachments
Issue Links
- is related to
-
FOP-3180 [PATCH] SVG Glyph positions ignored when using a custom font
- Resolved