Bugfix: render all background images as artifacts

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_Accessibility@824808 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Vincent Hennebert 2009-10-13 15:34:29 +00:00
parent 1958fe7719
commit e3e19e881a
7 changed files with 24 additions and 85 deletions

View File

@ -155,13 +155,4 @@ public class IFContext {
return this.structurePointer;
}
/**
* Indicates whether a structure pointer is available.
* @return true if there's a structure pointer
* @see #setStructurePointer(String)
*/
public boolean hasStructurePointer() {
return (this.structurePointer != null) && (structurePointer.length() > 0);
}
}

View File

@ -229,16 +229,6 @@ public class PDFContentGenerator {
textutil.beginTextObject();
}
/**
* used for accessibility
* separates a text element from fo:leader text element
*/
public void separateTextElementFromLeader() {
if (!inArtifactMode) {
separateTextElements(null, 0);
}
}
/** Indicates the beginning of a text object. */
protected void beginTextObject() {
if (!textutil.isInTextObject()) {

View File

@ -34,6 +34,7 @@ import org.apache.fop.pdf.PDFXObject;
import org.apache.fop.render.ImageHandler;
import org.apache.fop.render.RendererContext;
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.
@ -83,13 +84,8 @@ public class PDFImageHandlerRawJPEG implements PDFImageHandler, ImageHandler {
float w = (float)pos.getWidth() / 1000f;
float h = (float)pos.getHeight() / 1000f;
if (context.getUserAgent().isAccessibilityEnabled()) {
String structElemType = pdfContext.getStructElemType();
if (structElemType != null && structElemType.length() > 0) {
int sequenceNum = pdfContext.getSequenceNum();
generator.placeImage(x, y, w, h, xobj, structElemType, sequenceNum);
} else {
generator.placeImage(x, y, w, h, xobj);
}
MarkedContentInfo mci = pdfContext.getMarkedContentInfo();
generator.placeImage(x, y, w, h, xobj, mci.tag, mci.mcid);
} else {
generator.placeImage(x, y, w, h, xobj);
}

View File

@ -34,6 +34,7 @@ import org.apache.fop.pdf.PDFXObject;
import org.apache.fop.render.ImageHandler;
import org.apache.fop.render.RendererContext;
import org.apache.fop.render.RenderingContext;
import org.apache.fop.render.pdf.PDFLogicalStructureHandler.MarkedContentInfo;
/**
* Image handler implementation which handles RenderedImage instances for PDF output.
@ -84,9 +85,8 @@ public class PDFImageHandlerRenderedImage implements PDFImageHandler, ImageHandl
float w = (float)pos.getWidth() / 1000f;
float h = (float)pos.getHeight() / 1000f;
if (context.getUserAgent().isAccessibilityEnabled()) {
String structElemType = pdfContext.getStructElemType();
int sequenceNum = pdfContext.getSequenceNum();
generator.placeImage(x, y, w, h, xobj, structElemType, sequenceNum);
MarkedContentInfo mci = pdfContext.getMarkedContentInfo();
generator.placeImage(x, y, w, h, xobj, mci.tag, mci.mcid);
} else {
generator.placeImage(x, y, w, h, xobj);
}

View File

@ -40,6 +40,7 @@ import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.image.loader.batik.BatikImageFlavors;
import org.apache.fop.render.ImageHandler;
import org.apache.fop.render.RenderingContext;
import org.apache.fop.render.pdf.PDFLogicalStructureHandler.MarkedContentInfo;
import org.apache.fop.svg.PDFAElementBridge;
import org.apache.fop.svg.PDFBridgeContext;
import org.apache.fop.svg.PDFGraphics2D;
@ -122,9 +123,8 @@ public class PDFImageHandlerSVG implements ImageHandler {
generator.comment("SVG setup");
generator.saveGraphicsState();
if (context.getUserAgent().isAccessibilityEnabled()) {
String structElemType = pdfContext.getStructElemType();
int sequenceNum = pdfContext.getSequenceNum();
generator.beginMarkedContentSequence(structElemType, sequenceNum);
MarkedContentInfo mci = pdfContext.getMarkedContentInfo();
generator.beginMarkedContentSequence(mci.tag, mci.mcid);
}
generator.setColor(Color.black, false);
generator.setColor(Color.black, true);

View File

@ -131,7 +131,7 @@ public class PDFPainter extends AbstractIFPainter {
throws IFException {
PDFXObject xobject = getPDFDoc().getXObject(uri);
if (xobject != null) {
if (accessEnabled && getContext().hasStructurePointer()) {
if (accessEnabled) {
String ptr = getContext().getStructurePointer();
prepareImageMCID(ptr);
placeImageAccess(rect, xobject);
@ -139,7 +139,7 @@ public class PDFPainter extends AbstractIFPainter {
placeImage(rect, xobject);
}
} else {
if (accessEnabled && getContext().hasStructurePointer()) {
if (accessEnabled) {
String ptr = getContext().getStructurePointer();
prepareImageMCID(ptr);
}
@ -156,8 +156,7 @@ public class PDFPainter extends AbstractIFPainter {
protected RenderingContext createRenderingContext() {
PDFRenderingContext pdfContext = new PDFRenderingContext(
getUserAgent(), generator, this.documentHandler.currentPage, getFontInfo());
pdfContext.setMCID(imageMCI.mcid);
pdfContext.setStructElemType(imageMCI.tag);
pdfContext.setMarkedContentInfo(imageMCI);
return pdfContext;
}
@ -198,7 +197,7 @@ public class PDFPainter extends AbstractIFPainter {
/** {@inheritDoc} */
public void drawImage(Document doc, Rectangle rect) throws IFException {
if (accessEnabled && getContext().hasStructurePointer()) {
if (accessEnabled) {
String ptr = getContext().getStructurePointer();
prepareImageMCID(ptr);
}
@ -298,22 +297,12 @@ public class PDFPainter extends AbstractIFPainter {
throws IFException {
if (accessEnabled) {
String ptr = getContext().getStructurePointer();
if (ptr != null && ptr.length() > 0) {
MarkedContentInfo mci = logicalStructureHandler.addTextContentItem(ptr);
if (generator.getTextUtil().isInTextObject()) {
generator.separateTextElements(mci.tag, mci.mcid);
}
generator.updateColor(state.getTextColor(), true, null);
generator.beginTextObjectAccess(mci.tag, mci.mcid);
} else {
// <fo:leader leader-pattern="use-content">
// Leader content is marked as "/Artifact"
if (generator.getTextUtil().isInTextObject()) {
generator.separateTextElementFromLeader();
}
generator.updateColor(state.getTextColor(), true, null);
generator.beginLeaderTextObject();
MarkedContentInfo mci = logicalStructureHandler.addTextContentItem(ptr);
if (generator.getTextUtil().isInTextObject()) {
generator.separateTextElements(mci.tag, mci.mcid);
}
generator.updateColor(state.getTextColor(), true, null);
generator.beginTextObjectAccess(mci.tag, mci.mcid);
} else {
generator.updateColor(state.getTextColor(), true, null);
generator.beginTextObject();

View File

@ -25,6 +25,7 @@ import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.pdf.PDFPage;
import org.apache.fop.render.AbstractRenderingContext;
import org.apache.fop.render.pdf.PDFLogicalStructureHandler.MarkedContentInfo;
/**
* Rendering context for PDF production.
@ -34,11 +35,7 @@ public class PDFRenderingContext extends AbstractRenderingContext {
private PDFContentGenerator generator;
private FontInfo fontInfo;
private PDFPage page;
/** Temp. val. for accessibility, used in PDFImageHandlerRenderedImage */
private String structElemType = "";
/** Temp. val. for accessibility, used in PDFImageHandlerRenderedImage */
private int mcid = -1;
private MarkedContentInfo mci;
/**
* Main constructor.
@ -84,35 +81,11 @@ public class PDFRenderingContext extends AbstractRenderingContext {
return this.fontInfo;
}
/**
* Used for accessibility, used in PDFPainter.drawImage
* @param value to be stored
*/
public void setMCID(int value) {
mcid = value;
void setMarkedContentInfo(MarkedContentInfo mci) {
this.mci = mci;
}
/**
* Used for accessibility
* @return mcid
*/
public int getSequenceNum() {
return mcid;
}
/**
* Used for accessibility
* @param s the type of the structure element
*/
public void setStructElemType(String s) {
structElemType = s;
}
/**
* Used for accessibility
* @return the type of the structure element
*/
public String getStructElemType() {
return structElemType;
MarkedContentInfo getMarkedContentInfo() {
return mci;
}
}