Browse Source

FOP-2881: Add option for page segment for GOCA

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1866691 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-2_4
Simon Steiner 4 years ago
parent
commit
7f7464bade

+ 3
- 0
fop-core/src/main/java/org/apache/fop/afp/AFPGraphics2D.java View File

@@ -696,4 +696,7 @@ public class AFPGraphics2D extends AbstractGraphics2D implements NativeImageHand
public void copyArea(int x, int y, int width, int height, int dx, int dy) {
LOG.debug("copyArea() NYI: ");
}

public void clearRect(int x, int y, int width, int height) {
}
}

+ 9
- 0
fop-core/src/main/java/org/apache/fop/afp/AFPPaintingState.java View File

@@ -95,6 +95,8 @@ public class AFPPaintingState extends org.apache.fop.util.AbstractPaintingState
/** use page segment with F11 and F45 images*/
private boolean pSeg;

private boolean gocaPSeg;

/** use FS45 images*/
private boolean fs45;

@@ -416,6 +418,13 @@ public class AFPPaintingState extends org.apache.fop.util.AbstractPaintingState
this.pSeg = pSeg;
}

public boolean getWrapGocaPSeg() {
return gocaPSeg;
}

public void setWrapGocaPSeg(boolean pSeg) {
this.gocaPSeg = pSeg;
}

/**
* gets whether images should be FS45

+ 4
- 0
fop-core/src/main/java/org/apache/fop/render/afp/AFPDocumentHandler.java View File

@@ -534,6 +534,10 @@ public class AFPDocumentHandler extends AbstractBinaryWritingIFDocumentHandler
paintingState.setWrapPSeg(pSeg);
}

public void setWrapGocaPSeg(boolean pSeg) {
paintingState.setWrapGocaPSeg(pSeg);
}

/** {@inheritDoc} */
public void setFS45(boolean fs45) {
paintingState.setFS45(fs45);

+ 1
- 0
fop-core/src/main/java/org/apache/fop/render/afp/AFPImageHandlerGraphics2D.java View File

@@ -85,6 +85,7 @@ public class AFPImageHandlerGraphics2D extends AFPImageHandler implements ImageH
AFPDataObjectInfo info = createDataObjectInfo();
assert (info instanceof AFPGraphicsObjectInfo);
AFPGraphicsObjectInfo graphicsObjectInfo = (AFPGraphicsObjectInfo) info;
graphicsObjectInfo.setCreatePageSegment(afpContext.getPaintingState().getWrapGocaPSeg());

// set resource information


+ 11
- 0
fop-core/src/main/java/org/apache/fop/render/afp/AFPRendererConfig.java View File

@@ -48,6 +48,7 @@ import static org.apache.fop.render.afp.AFPRendererConfig.ImagesModeOptions.MODE
import static org.apache.fop.render.afp.AFPRendererOption.DEFAULT_RESOURCE_LEVELS;
import static org.apache.fop.render.afp.AFPRendererOption.GOCA;
import static org.apache.fop.render.afp.AFPRendererOption.GOCA_TEXT;
import static org.apache.fop.render.afp.AFPRendererOption.GOCA_WRAP_PSEG;
import static org.apache.fop.render.afp.AFPRendererOption.IMAGES;
import static org.apache.fop.render.afp.AFPRendererOption.IMAGES_DITHERING_QUALITY;
import static org.apache.fop.render.afp.AFPRendererOption.IMAGES_FS45;
@@ -166,6 +167,10 @@ public final class AFPRendererConfig implements RendererConfig {
return getParam(IMAGES_WRAP_PSEG, Boolean.class);
}

public Boolean isGocaWrapPseg() {
return getParam(GOCA_WRAP_PSEG, Boolean.class);
}

public Boolean isFs45() {
return getParam(IMAGES_FS45, Boolean.class);
}
@@ -252,6 +257,7 @@ public final class AFPRendererConfig implements RendererConfig {

private void configure() throws ConfigurationException, FOPException {
configureImages();
configureGOCA();
setParam(SHADING, AFPShadingMode.getValueOf(
cfg.getChild(SHADING.getName()).getValue(AFPShadingMode.COLOR.getName())));
Configuration rendererResolutionCfg = cfg.getChild(RENDERER_RESOLUTION.getName(), false);
@@ -317,6 +323,11 @@ public final class AFPRendererConfig implements RendererConfig {
configureJpegImages(imagesCfg);
}

private void configureGOCA() {
Configuration gocaCfg = cfg.getChild(GOCA.getName());
setParam(GOCA_WRAP_PSEG, gocaCfg.getAttributeAsBoolean(GOCA_WRAP_PSEG.getName(), false));
}

private void configureJpegImages(Configuration imagesCfg) {
Configuration jpegConfig = imagesCfg.getChild(IMAGES_JPEG.getName());
float bitmapEncodingQuality = 1.0f;

+ 3
- 0
fop-core/src/main/java/org/apache/fop/render/afp/AFPRendererConfigurator.java View File

@@ -93,6 +93,9 @@ public class AFPRendererConfigurator extends PrintRendererConfigurator {
if (config.isWrapPseg() != null) {
documentHandler.setWrapPSeg(config.isWrapPseg());
}
if (config.isGocaWrapPseg() != null) {
documentHandler.setWrapGocaPSeg(config.isGocaWrapPseg());
}
if (config.isFs45() != null) {
documentHandler.setFS45(config.isFs45());
}

+ 1
- 0
fop-core/src/main/java/org/apache/fop/render/afp/AFPRendererOption.java View File

@@ -42,6 +42,7 @@ public enum AFPRendererOption implements RendererConfigOption {
SHADING("shading", AFPShadingMode.class),
LINE_WIDTH_CORRECTION("line-width-correction", Float.class),
GOCA("goca", Boolean.class),
GOCA_WRAP_PSEG("pseg", Boolean.class),
GOCA_TEXT("text", Boolean.class);

private final String name;

+ 40
- 0
fop-core/src/test/java/org/apache/fop/apps/AFPRendererConfBuilder.java View File

@@ -30,6 +30,8 @@ import org.apache.fop.render.afp.AFPShadingMode;

import static org.apache.fop.render.afp.AFPRendererConfig.ImagesModeOptions.MODE_GRAYSCALE;
import static org.apache.fop.render.afp.AFPRendererOption.DEFAULT_RESOURCE_LEVELS;
import static org.apache.fop.render.afp.AFPRendererOption.GOCA;
import static org.apache.fop.render.afp.AFPRendererOption.GOCA_WRAP_PSEG;
import static org.apache.fop.render.afp.AFPRendererOption.IMAGES;
import static org.apache.fop.render.afp.AFPRendererOption.IMAGES_DITHERING_QUALITY;
import static org.apache.fop.render.afp.AFPRendererOption.IMAGES_FS45;
@@ -52,6 +54,8 @@ public final class AFPRendererConfBuilder extends RendererConfBuilder {

private ImagesBuilder images;

private GOCABuilder gocaBuilder;

public AFPRendererConfBuilder() {
super(MimeConstants.MIME_AFP);
}
@@ -87,6 +91,16 @@ public final class AFPRendererConfBuilder extends RendererConfBuilder {
return this;
}

public GOCABuilder startGOCA() {
gocaBuilder = new GOCABuilder();
return gocaBuilder;
}

public AFPRendererConfBuilder endGOCA() {
gocaBuilder = null;
return this;
}

public AFPRendererConfBuilder setResourceGroupUri(String uri) {
createTextElement(RESOURCE_GROUP_URI, uri);
return this;
@@ -169,4 +183,30 @@ public final class AFPRendererConfBuilder extends RendererConfBuilder {
return jpeg;
}
}

public final class GOCABuilder {

private final Element el;

private GOCABuilder() {
el = createElement(GOCA.getName());
}

private GOCABuilder setAttribute(String name, Object value) {
el.setAttribute(name, String.valueOf(value));
return this;
}

private GOCABuilder setAttribute(AFPRendererOption options, Object value) {
return setAttribute(options.getName(), value);
}

public GOCABuilder setWrapPseg(boolean value) {
return setAttribute(GOCA_WRAP_PSEG, value);
}

public AFPRendererConfBuilder endGOCA() {
return AFPRendererConfBuilder.this.endGOCA();
}
}
}

+ 93
- 0
fop-core/src/test/java/org/apache/fop/render/afp/AFPImageHandlerGraphics2DTestCase.java View File

@@ -0,0 +1,93 @@
/*
* 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.afp;

import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;

import org.junit.Assert;
import org.junit.Test;

import org.apache.xmlgraphics.image.loader.ImageInfo;
import org.apache.xmlgraphics.image.loader.ImageSize;
import org.apache.xmlgraphics.image.loader.impl.ImageGraphics2D;
import org.apache.xmlgraphics.java2d.Graphics2DImagePainter;

import org.apache.fop.afp.AFPPaintingState;
import org.apache.fop.afp.AFPResourceLevel;
import org.apache.fop.afp.AFPResourceLevelDefaults;
import org.apache.fop.afp.AFPResourceManager;
import org.apache.fop.afp.DataStream;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.FopFactory;

public class AFPImageHandlerGraphics2DTestCase {

@Test
public void testWrapGocaPSeg() throws IOException {
ImageInfo info = new ImageInfo(null, null);
info.setSize(new ImageSize(100, 100, 72));
ImageGraphics2D imageGraphics2D = new ImageGraphics2D(info, new Graphics2DImagePainter() {
public void paint(Graphics2D g2d, Rectangle2D area) {
}
public Dimension getImageSize() {
return null;
}
});

AFPPaintingState paintingState = new AFPPaintingState();
paintingState.setWrapGocaPSeg(true);

FOUserAgent foUserAgent = FopFactory.newInstance(new File(".").toURI()).newFOUserAgent();
AFPResourceManager resourceManager = new AFPResourceManager(foUserAgent.getResourceResolver());

AFPResourceLevelDefaults resourceLevelDefaults = new AFPResourceLevelDefaults();
resourceLevelDefaults.setDefaultResourceLevel("goca", AFPResourceLevel.valueOf("print-file"));
resourceManager.setResourceLevelDefaults(resourceLevelDefaults);

ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataStream dataStream = resourceManager.createDataStream(null, bos);
dataStream.startPage(0, 0, 0, 0, 0);
AFPRenderingContext afpRenderingContext =
new AFPRenderingContext(null, resourceManager, paintingState, null, null);
AFPImageHandlerGraphics2D imageHandlerGraphics2D = new AFPImageHandlerGraphics2D();
imageHandlerGraphics2D.handleImage(afpRenderingContext, imageGraphics2D, new Rectangle());

StringBuilder sb = new StringBuilder();
new AFPParser(true).read(new ByteArrayInputStream(bos.toByteArray()), sb);
Assert.assertEquals(sb.toString(), "BEGIN RESOURCE_GROUP RG000001\n"
+ "BEGIN NAME_RESOURCE RES00001 Triplets: OBJECT_FUNCTION_SET_SPECIFICATION,\n"
+ "BEGIN PAGE_SEGMENT S1000001\n"
+ "BEGIN GRAPHICS S1000001\n"
+ "BEGIN OBJECT_ENVIRONMENT_GROUP OEG00001\n"
+ "DESCRIPTOR OBJECT_AREA Triplets: DESCRIPTOR_POSITION,MEASUREMENT_UNITS,OBJECT_AREA_SIZE,\n"
+ "POSITION OBJECT_AREA\n"
+ "DESCRIPTOR GRAPHICS\n"
+ "END OBJECT_ENVIRONMENT_GROUP OEG00001\n"
+ "END GRAPHICS S1000001\n"
+ "END PAGE_SEGMENT S1000001\n"
+ "END NAME_RESOURCE RES00001\n");
}
}

+ 7
- 0
fop-core/src/test/java/org/apache/fop/render/afp/AFPRendererConfiguratorTestCase.java View File

@@ -210,4 +210,11 @@ public class AFPRendererConfiguratorTestCase extends
verify(getDocHandler()).canEmbedJpeg(false);
}

@Test
public void testWrapGocaPSeg() throws Exception {
parseConfig(createBuilder().startGOCA()
.setWrapPseg(true)
.endGOCA());
verify(getDocHandler()).setWrapGocaPSeg(true);
}
}

Loading…
Cancel
Save