From: Vincent Hennebert Date: Wed, 18 May 2011 19:31:58 +0000 (+0000) Subject: Bugfix: alternative text not working in tagged PDF for TIFF images X-Git-Tag: fop-1_1rc1old~211 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=a5fd3694f0a586df531c2751b303fd4cfccbc610;p=xmlgraphics-fop.git Bugfix: alternative text not working in tagged PDF for TIFF images git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1124394 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/fop/render/pdf/AbstractPDFImageHandler.java b/src/java/org/apache/fop/render/pdf/AbstractPDFImageHandler.java new file mode 100644 index 000000000..c03d4593c --- /dev/null +++ b/src/java/org/apache/fop/render/pdf/AbstractPDFImageHandler.java @@ -0,0 +1,69 @@ +/* + * 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. + */ + +/* $Id$ */ + +package org.apache.fop.render.pdf; + +import java.awt.Rectangle; +import java.io.IOException; + +import org.apache.xmlgraphics.image.loader.Image; + +import org.apache.fop.pdf.PDFImage; +import org.apache.fop.pdf.PDFXObject; +import org.apache.fop.render.ImageHandler; +import org.apache.fop.render.RenderingContext; +import org.apache.fop.render.pdf.PDFLogicalStructureHandler.MarkedContentInfo; + +/** + * A partial implementation of a PDF-specific image handler, containing the code that is + * common between image flavors. + */ +abstract class AbstractPDFImageHandler implements ImageHandler { + + /** {@inheritDoc} */ + public void handleImage(RenderingContext context, Image image, Rectangle pos) + throws IOException { + PDFRenderingContext pdfContext = (PDFRenderingContext)context; + PDFContentGenerator generator = pdfContext.getGenerator(); + PDFImage pdfimage = createPDFImage(image, image.getInfo().getOriginalURI()); + PDFXObject xobj = generator.getDocument().addImage( + generator.getResourceContext(), pdfimage); + + float x = (float)pos.getX() / 1000f; + float y = (float)pos.getY() / 1000f; + float w = (float)pos.getWidth() / 1000f; + float h = (float)pos.getHeight() / 1000f; + if (context.getUserAgent().isAccessibilityEnabled()) { + MarkedContentInfo mci = pdfContext.getMarkedContentInfo(); + generator.placeImage(x, y, w, h, xobj, mci.tag, mci.mcid); + } else { + generator.placeImage(x, y, w, h, xobj); + } + } + + /** + * Creates a PDF image object out of the given image. + * + * @param image an image + * @param xobjectKey a key for retrieval of the image from the document's XObject collection + * @return a suitable {@link PDFImage} implementation that can handle the flavour of + * the given image + */ + abstract PDFImage createPDFImage(Image image, String xobjectKey); +} diff --git a/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawCCITTFax.java b/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawCCITTFax.java index b7d47ad58..c0971a8d0 100644 --- a/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawCCITTFax.java +++ b/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawCCITTFax.java @@ -19,44 +19,26 @@ package org.apache.fop.render.pdf; -import java.awt.Rectangle; -import java.io.IOException; - import org.apache.xmlgraphics.image.loader.Image; import org.apache.xmlgraphics.image.loader.ImageFlavor; import org.apache.xmlgraphics.image.loader.impl.ImageRawCCITTFax; import org.apache.fop.pdf.PDFImage; -import org.apache.fop.pdf.PDFXObject; -import org.apache.fop.render.ImageHandler; import org.apache.fop.render.RenderingContext; /** * Image handler implementation which handles CCITT encoded images (CCITT fax group 3/4) * for PDF output. */ -public class PDFImageHandlerRawCCITTFax implements ImageHandler { +public class PDFImageHandlerRawCCITTFax extends AbstractPDFImageHandler { private static final ImageFlavor[] FLAVORS = new ImageFlavor[] { ImageFlavor.RAW_CCITTFAX, }; - /** {@inheritDoc} */ - public void handleImage(RenderingContext context, Image image, Rectangle pos) - throws IOException { - PDFRenderingContext pdfContext = (PDFRenderingContext)context; - PDFContentGenerator generator = pdfContext.getGenerator(); - ImageRawCCITTFax ccitt = (ImageRawCCITTFax)image; - - PDFImage pdfimage = new ImageRawCCITTFaxAdapter(ccitt, image.getInfo().getOriginalURI()); - PDFXObject xobj = generator.getDocument().addImage( - generator.getResourceContext(), pdfimage); - - float x = (float)pos.getX() / 1000f; - float y = (float)pos.getY() / 1000f; - float w = (float)pos.getWidth() / 1000f; - float h = (float)pos.getHeight() / 1000f; - generator.placeImage(x, y, w, h, xobj); + @Override + PDFImage createPDFImage(Image image, String xobjectKey) { + return new ImageRawCCITTFaxAdapter((ImageRawCCITTFax) image, xobjectKey); } /** {@inheritDoc} */ diff --git a/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawJPEG.java b/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawJPEG.java index 7ac181014..d09ae9804 100644 --- a/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawJPEG.java +++ b/src/java/org/apache/fop/render/pdf/PDFImageHandlerRawJPEG.java @@ -19,56 +19,32 @@ package org.apache.fop.render.pdf; -import java.awt.Rectangle; -import java.io.IOException; - import org.apache.xmlgraphics.image.loader.Image; import org.apache.xmlgraphics.image.loader.ImageFlavor; import org.apache.xmlgraphics.image.loader.impl.ImageRawJPEG; import org.apache.fop.pdf.PDFImage; -import org.apache.fop.pdf.PDFXObject; -import org.apache.fop.render.ImageHandler; import org.apache.fop.render.RenderingContext; -import org.apache.fop.render.pdf.PDFLogicalStructureHandler.MarkedContentInfo; /** * Image handler implementation which handles raw JPEG images for PDF output. */ -public class PDFImageHandlerRawJPEG implements ImageHandler { +public class PDFImageHandlerRawJPEG extends AbstractPDFImageHandler { private static final ImageFlavor[] FLAVORS = new ImageFlavor[] { ImageFlavor.RAW_JPEG, }; - /** {@inheritDoc} */ - public void handleImage(RenderingContext context, Image image, Rectangle pos) - throws IOException { - PDFRenderingContext pdfContext = (PDFRenderingContext)context; - PDFContentGenerator generator = pdfContext.getGenerator(); - ImageRawJPEG imageJPEG = (ImageRawJPEG)image; - - PDFImage pdfimage = new ImageRawJPEGAdapter(imageJPEG, image.getInfo().getOriginalURI()); - PDFXObject xobj = generator.getDocument().addImage( - generator.getResourceContext(), pdfimage); - - float x = (float)pos.getX() / 1000f; - float y = (float)pos.getY() / 1000f; - float w = (float)pos.getWidth() / 1000f; - float h = (float)pos.getHeight() / 1000f; - if (context.getUserAgent().isAccessibilityEnabled()) { - MarkedContentInfo mci = pdfContext.getMarkedContentInfo(); - generator.placeImage(x, y, w, h, xobj, mci.tag, mci.mcid); - } else { - generator.placeImage(x, y, w, h, xobj); - } - } - /** {@inheritDoc} */ public int getPriority() { return 100; } + @Override + PDFImage createPDFImage(Image image, String xobjectKey) { + return new ImageRawJPEGAdapter((ImageRawJPEG) image, xobjectKey); + } + /** {@inheritDoc} */ public Class getSupportedImageClass() { return ImageRawJPEG.class; diff --git a/src/java/org/apache/fop/render/pdf/PDFImageHandlerRenderedImage.java b/src/java/org/apache/fop/render/pdf/PDFImageHandlerRenderedImage.java index e0ff3cdd4..7b34e7bd7 100644 --- a/src/java/org/apache/fop/render/pdf/PDFImageHandlerRenderedImage.java +++ b/src/java/org/apache/fop/render/pdf/PDFImageHandlerRenderedImage.java @@ -19,50 +19,26 @@ package org.apache.fop.render.pdf; -import java.awt.Rectangle; -import java.io.IOException; - import org.apache.xmlgraphics.image.loader.Image; import org.apache.xmlgraphics.image.loader.ImageFlavor; import org.apache.xmlgraphics.image.loader.impl.ImageRendered; import org.apache.fop.pdf.PDFImage; -import org.apache.fop.pdf.PDFXObject; -import org.apache.fop.render.ImageHandler; import org.apache.fop.render.RenderingContext; -import org.apache.fop.render.pdf.PDFLogicalStructureHandler.MarkedContentInfo; /** * Image handler implementation which handles RenderedImage instances for PDF output. */ -public class PDFImageHandlerRenderedImage implements ImageHandler { +public class PDFImageHandlerRenderedImage extends AbstractPDFImageHandler { private static final ImageFlavor[] FLAVORS = new ImageFlavor[] { ImageFlavor.BUFFERED_IMAGE, ImageFlavor.RENDERED_IMAGE }; - /** {@inheritDoc} */ - public void handleImage(RenderingContext context, Image image, Rectangle pos) - throws IOException { - PDFRenderingContext pdfContext = (PDFRenderingContext)context; - PDFContentGenerator generator = pdfContext.getGenerator(); - ImageRendered imageRend = (ImageRendered)image; - - PDFImage pdfimage = new ImageRenderedAdapter(imageRend, image.getInfo().getOriginalURI()); - PDFXObject xobj = generator.getDocument().addImage( - generator.getResourceContext(), pdfimage); - - float x = (float)pos.getX() / 1000f; - float y = (float)pos.getY() / 1000f; - float w = (float)pos.getWidth() / 1000f; - float h = (float)pos.getHeight() / 1000f; - if (context.getUserAgent().isAccessibilityEnabled()) { - MarkedContentInfo mci = pdfContext.getMarkedContentInfo(); - generator.placeImage(x, y, w, h, xobj, mci.tag, mci.mcid); - } else { - generator.placeImage(x, y, w, h, xobj); - } + @Override + PDFImage createPDFImage(Image image, String xobjectKey) { + return new ImageRenderedAdapter((ImageRendered) image, xobjectKey); } /** {@inheritDoc} */ diff --git a/status.xml b/status.xml index 064cdf8e6..f1b5de7b7 100644 --- a/status.xml +++ b/status.xml @@ -59,6 +59,9 @@ documents. Example: the fix of marks layering will be such a case when it's done. --> + + Bugfix: alternative text not working in tagged PDF for TIFF images. + Fixed io exception in MODCAParser caused by the improper use of mark() and reset() on the MODCA data input stream. Added unit test.