Author: tilman
Date: Fri Jun 20 21:36:28 2014
New Revision: 1604282
URL: http://svn.apache.org/r1604282
Log:
PDFBOX-2141: set glyph transform rather than graphics2d transform, as suggested
by Petr Slaby
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL:
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1604282&r1=1604281&r2=1604282&view=diff
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
(original)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
Fri Jun 20 21:36:28 2014
@@ -448,20 +448,20 @@ public class PageDrawer extends PDFStrea
private void writeFont(final AffineTransform at, final GlyphVector glyphs)
{
- try
- {
- // Convert from PDF, where glyphs are upright when direction is
from
- // bottom to top, to AWT, where this is the other way around
- at.scale(1, -1);
- AffineTransform atInverse = at.createInverse();
- graphics.transform(at);
- graphics.drawGlyphVector(glyphs, 0, 0);
- graphics.transform(atInverse);
- }
- catch (NoninvertibleTransformException exception)
+ // Convert from PDF, where glyphs are upright when direction is from
+ // bottom to top, to AWT, where this is the other way around
+
+ // PDFBOX-2141: do not use graphics.transform(), because this prevents
+ // the correct rendering of shading patterns
+ // don't apply the translation to each glyph, only scale and shear
+ AffineTransform atRS = new AffineTransform(at.getScaleX(),
at.getShearY(),
+ -at.getShearX(), -at.getScaleY(), 0, 0);
+
+ for (int i = 0; i < glyphs.getNumGlyphs(); i++)
{
- LOG.error("Can't invert the given affine transformation",
exception);
+ glyphs.setGlyphTransform(i, atRS);
}
+ graphics.drawGlyphVector(glyphs, (float) at.getTranslateX(), (float)
at.getTranslateY());
}
/**