# Probleme mit WMF zu SVG mit Batik



## hansmueller (30. August 2010)

Hallo,

ich versuche mit Hilfe von Batik eine wmf-Datei in eine svg-Datei zu konvertieren.

Lt. den Beispielen auf http://xmlgraphics.apache.org/batik...tik/transcoder/wmf/tosvg/package-summary.html sollte es eigendlich ganz einfach gehen. Aber bei mir funktioniert es nicht.

Dies ist mein Programm:

```
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.wmf.tosvg.WMFTranscoder;


public class MainProg
{
	public static void main(String[] args)
	{
		MainProg x = new MainProg();
	}
	
	public MainProg()
	{				
		try
		{				
			File inputFile = new File("C:/Programme/Java/Zusatz/batik-1.7/samples/tests/resources/wmf/testChart.wmf");
			File outputFile = new File("C:/Programme/Java/Zusatz/batik-1.7/samples/tests/resources/wmf/XXXXtestChart.svg");
			
			TranscoderInput input = new TranscoderInput(inputFile.toURI().toString());
	        OutputStream stream = new FileOutputStream(outputFile);
	        TranscoderOutput output = new TranscoderOutput(stream);
	        WMFTranscoder transcoder = new WMFTranscoder();
	        transcoder.transcode(input,output);			
			
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		
	}
}
```

und dies die Fehlermeldung, die es ausspuckt:

```
java.lang.NullPointerException
	at org.apache.batik.svggen.ImageHandlerBase64Encoder.encodeImage(ImageHandlerBase64Encoder.java:157)
	at org.apache.batik.svggen.ImageHandlerBase64Encoder.handleHREF(ImageHandlerBase64Encoder.java:133)
	at org.apache.batik.svggen.DefaultImageHandler.handleImage(DefaultImageHandler.java:91)
	at org.apache.batik.svggen.SimpleImageHandler.handleImage(SimpleImageHandler.java:126)
	at org.apache.batik.svggen.SVGTexturePaint.toSVG(SVGTexturePaint.java:136)
	at org.apache.batik.svggen.SVGPaint.toSVG(SVGPaint.java:134)
	at org.apache.batik.svggen.SVGPaint.toSVG(SVGPaint.java:116)
	at org.apache.batik.svggen.SVGGraphicContextConverter.toSVG(SVGGraphicContextConverter.java:101)
	at org.apache.batik.svggen.DOMGroupManager.addElement(DOMGroupManager.java:168)
	at org.apache.batik.svggen.SVGGraphics2D.fill(SVGGraphics2D.java:1383)
	at org.apache.batik.transcoder.wmf.tosvg.WMFPainter.paint(WMFPainter.java:1142)
	at org.apache.batik.transcoder.wmf.tosvg.WMFPainter.paint(WMFPainter.java:489)
	at org.apache.batik.transcoder.wmf.tosvg.WMFTranscoder.transcode(WMFTranscoder.java:187)
	at MainProg.<init>(MainProg.java:27)
	at MainProg.main(MainProg.java:13)
```

Was mach ich Falsch?

MfG
hansmueller


----------



## sheel (30. August 2010)

```
TranscoderInput input = new TranscoderInput(inputFile.toURI().toString());
TranscoderOutput output = new TranscoderOutput(stream);
```

Eine der zwei Anweisungen liefert null zurück.
Prüf nach den beiden Zeilen, ob der Returnwert null war und gib ggf. entsprechende Fehlermeldungen aus, statt einfach weiterzumachen.


----------



## hansmueller (30. August 2010)

Danke für den Vorschlag sheel, aber keine der beiden Anweisungen gab null zurück.

Das Problem lag an einer ganz anderen Stelle:
Das inputFile!

Die Datei "C:/Programme/Java/Zusatz/batik-1.7/samples/tests/resources/wmf/testChart.wmf" ist völlig in Ordnung. Nur scheint sie irgendetwas zu beinhalten, mit dem der WMFTranscoder nicht klar kommt.

Ich habe die "testChart.wmf" durch eine andere wmf-Datei (eine mit Autocad erstellte) ersetzt und dann ging die Umwandlung ohne Probleme.

Der WMFTrancoder kann wohl noch nicht alles abdecken. Ich finde es nur merkwürdig, da die "testChart.wmf" mit Batik ausgeliefert wird. Wieso ist Batik dann nicht in der Lage, diese zu fressen? 

MfG
hansmueller


----------



## sheel (30. August 2010)

Kann ich leider auch nicht sagen.

Ich fins nur immer wieder traurig, dass es solche Methoden bei Java häufiger gibt.
Geben statt null ein Objekt zurück, obwohl was daneben gegangen ist; und das fehlerhafte Objekt verursacht dann weitere Probleme.


----------

