Browse Source

Added ability to create single-page SVG 1.1 using a DOMResult or SAXResult.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@800697 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-1_0
Jeremias Maerki 15 years ago
parent
commit
ee23221821
1 changed files with 39 additions and 42 deletions
  1. 39
    42
      src/sandbox/org/apache/fop/render/svg/SVGDocumentHandler.java

+ 39
- 42
src/sandbox/org/apache/fop/render/svg/SVGDocumentHandler.java View File

@@ -22,9 +22,6 @@ package org.apache.fop.render.svg;
import java.awt.Dimension;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -66,6 +63,9 @@ public class SVGDocumentHandler extends AbstractSVGDocumentHandler {
private StreamResult firstStream;
private StreamResult currentStream;

/** Used for single-page documents rendered to a DOM or SAX. */
private Result simpleResult;

private Document reusedParts;

/**
@@ -92,7 +92,7 @@ public class SVGDocumentHandler extends AbstractSVGDocumentHandler {
getUserAgent().getOutputFile());
this.firstStream = (StreamResult)result;
} else {
throw new UnsupportedOperationException("Result is not supported: " + result);
this.simpleResult = result;
}
}

@@ -152,46 +152,19 @@ public class SVGDocumentHandler extends AbstractSVGDocumentHandler {
/** {@inheritDoc} */
public void startPage(int index, String name, String pageMasterName, Dimension size)
throws IFException {
OutputStream out;
try {
if (index == 0) {
out = null;
} else {
out = this.multiFileUtil.createOutputStream(index);
if (out == null) {
//TODO Convert to event
throw new IFException(
"No filename information available. Stopping after first page.", null);
}
}
} catch (IOException ioe) {
throw new IFException("I/O exception while setting up output file", ioe);
}
if (out == null) {
this.handler = decorate(createContentHandler(this.firstStream));
if (this.multiFileUtil != null) {
prepareHandlerWithOutputStream(index);
} else {
this.currentStream = new StreamResult(out);
this.handler = decorate(createContentHandler(this.currentStream));
}
if (false) {
final ContentHandler originalHandler = this.handler;
this.handler = decorate((ContentHandler)Proxy.newProxyInstance(
ContentHandler.class.getClassLoader(),
new Class[] {ContentHandler.class},
new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
String methodName = method.getName();
System.out.println(methodName + ":");
if (args != null) {
for (int i = 0; i < args.length; i++) {
System.out.println(" " + args[i]);
}
}
return method.invoke(originalHandler, args);
}
}));
if (this.simpleResult == null) {
//Only one page is supported with this approach at the moment
throw new IFException(
"Only one page is supported for output with the given Result instance!",
null);
}
super.setResult(this.simpleResult);
this.simpleResult = null;
}

try {
handler.startDocument();
handler.startPrefixMapping("", NAMESPACE);
@@ -227,6 +200,30 @@ public class SVGDocumentHandler extends AbstractSVGDocumentHandler {
}
}

private void prepareHandlerWithOutputStream(int index) throws IFException {
OutputStream out;
try {
if (index == 0) {
out = null;
} else {
out = this.multiFileUtil.createOutputStream(index);
if (out == null) {
//TODO Convert to event
throw new IFException(
"No filename information available. Stopping after first page.", null);
}
}
} catch (IOException ioe) {
throw new IFException("I/O exception while setting up output file", ioe);
}
if (out == null) {
this.handler = decorate(createContentHandler(this.firstStream));
} else {
this.currentStream = new StreamResult(out);
this.handler = decorate(createContentHandler(this.currentStream));
}
}

private GenerationHelperContentHandler decorate(ContentHandler contentHandler) {
return new GenerationHelperContentHandler(contentHandler, getMainNamespace());
}

Loading…
Cancel
Save