diff options
author | Simon Steiner <ssteiner@apache.org> | 2017-10-13 12:12:52 +0000 |
---|---|---|
committer | Simon Steiner <ssteiner@apache.org> | 2017-10-13 12:12:52 +0000 |
commit | a2382d7d247ad4bc12df79a691b21d58077f689b (patch) | |
tree | be791b55bf8d096cc2ea75b8d2319423fd815afc | |
parent | 7645c8c63a6e1d9fa19ad51bf896038300d681ce (diff) | |
download | xmlgraphics-fop-a2382d7d247ad4bc12df79a691b21d58077f689b.tar.gz xmlgraphics-fop-a2382d7d247ad4bc12df79a691b21d58077f689b.zip |
FOP-2753: PDF to PS allow fop fonts as fallback
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1812122 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | fop-core/src/main/java/org/apache/fop/render/ps/PSFontUtils.java | 10 | ||||
-rw-r--r-- | fop-core/src/main/java/org/apache/fop/render/ps/PSGraphics2DAdapter.java | 8 | ||||
-rw-r--r-- | fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerGraphics2D.java | 18 | ||||
-rw-r--r-- | fop-core/src/test/java/org/apache/fop/render/ps/PSGraphics2DAdapterTestCase.java | 63 | ||||
-rw-r--r-- | fop/lib/xmlgraphics-commons-svn-trunk.jar | bin | 651975 -> 675202 bytes |
5 files changed, 91 insertions, 8 deletions
diff --git a/fop-core/src/main/java/org/apache/fop/render/ps/PSFontUtils.java b/fop-core/src/main/java/org/apache/fop/render/ps/PSFontUtils.java index f2f6bdaf3..568a22f70 100644 --- a/fop-core/src/main/java/org/apache/fop/render/ps/PSFontUtils.java +++ b/fop-core/src/main/java/org/apache/fop/render/ps/PSFontUtils.java @@ -36,6 +36,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.fontbox.cff.CFFStandardString; import org.apache.xmlgraphics.fonts.Glyphs; +import org.apache.xmlgraphics.java2d.GeneralGraphics2DImagePainter; import org.apache.xmlgraphics.ps.DSCConstants; import org.apache.xmlgraphics.ps.PSGenerator; import org.apache.xmlgraphics.ps.PSResource; @@ -50,6 +51,7 @@ import org.apache.fop.fonts.CustomFont; import org.apache.fop.fonts.EmbeddingMode; import org.apache.fop.fonts.Font; import org.apache.fop.fonts.FontInfo; +import org.apache.fop.fonts.FontTriplet; import org.apache.fop.fonts.FontType; import org.apache.fop.fonts.LazyFont; import org.apache.fop.fonts.MultiByteFont; @@ -907,4 +909,12 @@ public class PSFontUtils extends org.apache.xmlgraphics.ps.PSFontUtils { gen.getResourceTracker().registerSuppliedResource(res); return res; } + + public static void addFallbackFonts(FontInfo fontInfo, GeneralGraphics2DImagePainter painter) throws IOException { + for (Map.Entry<FontTriplet, String> x : fontInfo.getFontTriplets().entrySet()) { + String name = x.getKey().getName(); + Typeface typeface = fontInfo.getFonts().get(x.getValue()); + painter.addFallbackFont(name, typeface); + } + } } diff --git a/fop-core/src/main/java/org/apache/fop/render/ps/PSGraphics2DAdapter.java b/fop-core/src/main/java/org/apache/fop/render/ps/PSGraphics2DAdapter.java index 2ed64e770..3988fdf09 100644 --- a/fop-core/src/main/java/org/apache/fop/render/ps/PSGraphics2DAdapter.java +++ b/fop-core/src/main/java/org/apache/fop/render/ps/PSGraphics2DAdapter.java @@ -31,6 +31,7 @@ import org.apache.xmlgraphics.java2d.Graphics2DImagePainter; import org.apache.xmlgraphics.java2d.ps.PSGraphics2D; import org.apache.xmlgraphics.ps.PSGenerator; +import org.apache.fop.fonts.FontInfo; import org.apache.fop.pdf.PDFFactory; import org.apache.fop.render.AbstractGraphics2DAdapter; import org.apache.fop.render.ImageHandlerUtil; @@ -45,15 +46,17 @@ public class PSGraphics2DAdapter extends AbstractGraphics2DAdapter { private PSGenerator gen; private boolean clip = true; + private FontInfo fontInfo; /** * Creates a new instance. * @param gen the PostScript generator * @param clip true if the image should be clipped */ - public PSGraphics2DAdapter(PSGenerator gen, boolean clip) { + public PSGraphics2DAdapter(PSGenerator gen, boolean clip, FontInfo fontInfo) { this.gen = gen; this.clip = clip; + this.fontInfo = fontInfo; } /** {@inheritDoc} */ @@ -113,6 +116,9 @@ public class PSGraphics2DAdapter extends AbstractGraphics2DAdapter { / context.getUserAgent().getTargetResolution(); graphics.drawImage(bi, new AffineTransform(scale, 0, 0, scale, 0, 0), null); } else { + if (painter instanceof GeneralGraphics2DImagePainter) { + PSFontUtils.addFallbackFonts(fontInfo, (GeneralGraphics2DImagePainter) painter); + } Rectangle2D area = new Rectangle2D.Double(0.0, 0.0, imw, imh); painter.paint(graphics, area); } diff --git a/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerGraphics2D.java b/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerGraphics2D.java index f7f22020a..f128ecc8d 100644 --- a/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerGraphics2D.java +++ b/fop-core/src/main/java/org/apache/fop/render/ps/PSImageHandlerGraphics2D.java @@ -37,6 +37,7 @@ import org.apache.xmlgraphics.ps.FormGenerator; import org.apache.xmlgraphics.ps.PSGenerator; import org.apache.xmlgraphics.ps.PSProcSets; +import org.apache.fop.fonts.FontInfo; import org.apache.fop.render.RenderingContext; /** @@ -94,6 +95,9 @@ public class PSImageHandlerGraphics2D implements PSImageHandler { transform.translate(fx, fy); gen.getCurrentState().concatMatrix(transform); Rectangle2D area = new Rectangle2D.Double(0.0, 0.0, imw, imh); + if (painter instanceof GeneralGraphics2DImagePainter) { + PSFontUtils.addFallbackFonts(psContext.getFontInfo(), (GeneralGraphics2DImagePainter) painter); + } painter.paint(graphics, area); gen.restoreGraphicsState(); gen.commentln("%FOPEndGraphics2D"); @@ -107,7 +111,7 @@ public class PSImageHandlerGraphics2D implements PSImageHandler { final ImageGraphics2D imageG2D = (ImageGraphics2D)image; ImageInfo info = image.getInfo(); - FormGenerator formGen = buildFormGenerator(gen.getPSLevel(), form, info, imageG2D); + FormGenerator formGen = buildFormGenerator(gen.getPSLevel(), form, info, imageG2D, psContext.getFontInfo()); formGen.generate(gen); } /** {@inheritDoc} */ @@ -133,8 +137,8 @@ public class PSImageHandlerGraphics2D implements PSImageHandler { return false; } - private FormGenerator buildFormGenerator(int psLanguageLevel, final PSImageFormResource form, - final ImageInfo info, final ImageGraphics2D imageG2D) { + private FormGenerator buildFormGenerator(int psLanguageLevel, final PSImageFormResource form, final ImageInfo info, + final ImageGraphics2D imageG2D, final FontInfo fontInfo) { String imageDescription = info.getMimeType() + " " + info.getOriginalURI(); final Dimension2D dimensionsPt = info.getSize().getDimensionPt(); final Dimension2D dimensionsMpt = info.getSize().getDimensionMpt(); @@ -145,7 +149,7 @@ public class PSImageHandlerGraphics2D implements PSImageHandler { @Override void doGeneratePaintProc(PSGenerator gen) throws IOException { - paintImageG2D(imageG2D, dimensionsMpt, gen); + paintImageG2D(imageG2D, dimensionsMpt, gen, fontInfo); } }; } else { @@ -157,7 +161,7 @@ public class PSImageHandlerGraphics2D implements PSImageHandler { gen.writeln(" /Filter /SubFileDecode"); gen.writeln(" /DecodeParms << /EODCount 0 /EODString (%FOPEndOfData) >>"); gen.writeln(">> /ReusableStreamDecode filter"); - paintImageG2D(imageG2D, dimensionsMpt, gen); + paintImageG2D(imageG2D, dimensionsMpt, gen, fontInfo); gen.writeln("%FOPEndOfData"); gen.writeln("def"); } @@ -179,8 +183,8 @@ public class PSImageHandlerGraphics2D implements PSImageHandler { } protected void paintImageG2D(final ImageGraphics2D imageG2D, Dimension2D dimensionsMpt, - PSGenerator gen) throws IOException { - PSGraphics2DAdapter adapter = new PSGraphics2DAdapter(gen, false); + PSGenerator gen, FontInfo fontInfo) throws IOException { + PSGraphics2DAdapter adapter = new PSGraphics2DAdapter(gen, false, fontInfo); adapter.paintImage(imageG2D.getGraphics2DImagePainter(), null, 0, 0, diff --git a/fop-core/src/test/java/org/apache/fop/render/ps/PSGraphics2DAdapterTestCase.java b/fop-core/src/test/java/org/apache/fop/render/ps/PSGraphics2DAdapterTestCase.java new file mode 100644 index 000000000..b3ca7205b --- /dev/null +++ b/fop-core/src/test/java/org/apache/fop/render/ps/PSGraphics2DAdapterTestCase.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ +package org.apache.fop.render.ps; + +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.geom.Rectangle2D; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import org.junit.Assert; +import org.junit.Test; + +import org.apache.xmlgraphics.java2d.GeneralGraphics2DImagePainter; +import org.apache.xmlgraphics.java2d.ps.PSGraphics2D; +import org.apache.xmlgraphics.ps.PSGenerator; + +import org.apache.fop.fonts.FontInfo; + +public class PSGraphics2DAdapterTestCase { + @Test + public void testFontFallback() throws IOException { + PSGenerator gen = new PSGenerator(new ByteArrayOutputStream()); + FontInfo fi = new FontInfo(); + fi.addFontProperties("a", "b", "c", 400); + PSGraphics2DAdapter psGraphics2DAdapter = new PSGraphics2DAdapter(gen, true, fi); + MyPainter painter = new MyPainter(); + psGraphics2DAdapter.paintImage(painter, null, 0, 0, 0, 0); + Assert.assertEquals(painter.font, "b"); + } + + static class MyPainter implements GeneralGraphics2DImagePainter { + String font; + public Graphics2D getGraphics(boolean textAsShapes, PSGenerator gen) { + return new PSGraphics2D(true); + } + + public void addFallbackFont(String name, Object font) { + this.font = name; + } + + public void paint(Graphics2D g2d, Rectangle2D area) { + } + + public Dimension getImageSize() { + return new Dimension(); + } + } +} diff --git a/fop/lib/xmlgraphics-commons-svn-trunk.jar b/fop/lib/xmlgraphics-commons-svn-trunk.jar Binary files differindex 7dad52a1f..0e5af7b47 100644 --- a/fop/lib/xmlgraphics-commons-svn-trunk.jar +++ b/fop/lib/xmlgraphics-commons-svn-trunk.jar |