Bonjour,


Je suis débutant en batik et j'ai un programme java qui permet de créer une image à partir d'un texte en utilisant batik et je compile (sous red hat) ainsi:
javac -classpath batik-dom.jar:batik-svggen.jar:batik-transcoder.jar:batik-svg-dom.jar:batik-awt-util.jar:batik-awt-util.jar:batik-bridge.jar:batik-css.jar:batik-extension.jar:batik-ext.jar:batik-gui-util.jar:batik-gvt.jar:batik-parser.jar:batik-script.jar:batik-swing.jar:batik-util.jar:batik-xml.jar:. ImageGenerator.java
Le fichier java se trouve dans le même répertoire que les jar

J'ai essayé de voir s'il y avait des imports qui manquaient en rajoutant des imports ou en compilant avec tous les jar de batik se trouvant sur le répertoire mais ça n'a rien changé.

C'est peut-être mon classpath à la compilation qui pose problème mais je ne vois pas comment voir quel est la bonne manière d'utiliser le classpath

Voici le code source:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
 
import java.awt.Rectangle;
import java.awt.Graphics2D;
import java.awt.Color;
import java.io.Writer;
import java.io.OutputStreamWriter;
import java.io.IOException;
 
import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*; import java.applet.*; import javax.swing.*; 
 
import org.apache.batik.ext.awt.g2d.AbstractGraphics2D;
import org.apache.batik.svggen.SVGGraphics2D;
import org.apache.batik.dom.GenericDOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.DOMImplementation;
import org.apache.batik.dom.svg.SVGDOMImplementation;
 
import org.w3c.dom.*;
import org.w3c.dom.svg.*;
 
 
public class ImageGenerator{
 
	public static void main(String[] args) {
		ImageGenerator ig = new ImageGenerator();
		try {
			ig.generateImage("GLOBAL LOGISTICS PROVIDER", "/homepage.png", "Neo Sans", null, "0e0e0e", "40", "", "", "700");
 
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/*JAVA*/
    private static String C_MODULE_NAME = "ImageGenerator";
 
	public void generateRolloverImages(String text, String rubriqueName) throws Exception {
		int defaultWidth = 170;
		generateImage(text, "/"+rubriqueName+"_off.png", "Neo Sans", null, "7F7F7F", "12", null, null, ""+defaultWidth);
		generateImage(text, "/"+rubriqueName+"_on.png", "Neo Sans", null, "1D4C92" , "12", null, null, ""+defaultWidth );
	}
    public void generateImage(String text, String fileLocation, String fontName,String bgColorStr, String txtColorStr, String fontSizeStr, String fontStyleStr, String heightStr, String widthStr) throws Exception {
 
 
      java.awt.Color bgColor = null;
      java.awt.Color txtColor = java.awt.Color.BLACK;
      int fontStyle = java.awt.Font.PLAIN;
      int height = -1;
      int width = -1;
      int fontSize = 12;
 
      if (fileLocation == null || fileLocation.length() == 0){
		System.out.println("erreur");
        //wsnoheto.error.CTErreur.DeclencherException(C_MODULE_NAME, "generateImage",null);
      }
      //wsnoheto.error.CTErreur.DeclencherException(C_MODULE_NAME, C_METHOD_NAME, t);
      if (text == null) text = "";
      if (fontName == null || fontName.length() == 0) fontName = "Serif";
      if (bgColorStr != null && bgColorStr.length() > 0) bgColor = new java.awt.Color(Integer.parseInt(bgColorStr, 16));
      if (txtColorStr != null && txtColorStr.length() > 0) txtColor = new java.awt.Color(Integer.parseInt(txtColorStr, 16));
      if (heightStr != null && heightStr.length() > 0) height = Integer.parseInt(heightStr);
      if (widthStr != null && widthStr.length() > 0) width = Integer.parseInt(widthStr);
      if (fontSizeStr != null && fontSizeStr.length() > 0) fontSize = Integer.parseInt(fontSizeStr);
      if (fontSize <= 0) fontSize = 12;
      if (fontStyleStr != null) {
        String[] paramFontStyles = fontStyleStr.split("\\+");
        for (int i = 0; i < paramFontStyles.length; i++) {
          if (paramFontStyles[i].compareToIgnoreCase("BOLD") == 0) fontStyle += java.awt.Font.BOLD;
          if (paramFontStyles[i].compareToIgnoreCase("ITALIC") == 0) fontStyle += java.awt.Font.ITALIC;
        }
      }
      generateImage(text, fileLocation, fontName, bgColor, txtColor, fontSize, fontStyle, height, width);
    }
    public void generatePj(String textField, String imageField, String fontName,String bgColorStr, String txtColorStr, String fontSizeStr, String fontStyleStr, String heightStr, String widthStr) throws Throwable {
      StringBuilder imgRoot = new StringBuilder().append("image").append(java.io.File.separator).append("toto").append(java.io.File.separator);
      StringBuilder imgPath = new StringBuilder().append("pj").append(java.io.File.separator).append(textField).append("12").append(".png");
      String imgLocation = imgRoot.toString() + imgPath.toString();
      System.out.println( "imgLocation " + imgLocation );
      generateImage(textField, imgLocation, fontName, bgColorStr, txtColorStr, fontSizeStr, fontStyleStr, heightStr, widthStr);
      imageField=imgPath.toString().replace('\\', '/');
    }
    protected void generateImage(String text, String imageLocation, String fontName, java.awt.Color bgColor, java.awt.Color txtColor, int fontSize, int fontStyle, int height, int width) throws Exception {
      org.w3c.dom.Document document = org.apache.batik.dom.GenericDOMImplementation.getDOMImplementation().createDocument(org.apache.batik.dom.svg.SVGDOMImplementation.SVG_NAMESPACE_URI,"svg", null);
      org.apache.batik.svggen.SVGGraphics2D svgGenerator = new org.apache.batik.svggen.SVGGraphics2D(document);
      svgGenerator.setPaint(bgColor);
      //svgGenerator.setBackground(bgColor);
      if (bgColor != null) svgGenerator.fill(new java.awt.Rectangle(0, 0, width, height));
      svgGenerator.setPaint(txtColor);
 
      java.awt.Font curFont = new java.awt.Font(fontName, fontStyle, fontSize);
      svgGenerator.setFont(curFont);
      double maxWidth = 0;
      float sx = 0;
      float sy = 0;
      if (text.length() > 0){
        text = new String(text);
 
        String[] curLines = text.split("\n");
        for (int i = 0; i < curLines.length; i++){
          String curLine = curLines[i];
          int sstartchar = 0;
          java.text.AttributedString sas = new java.text.AttributedString(curLine);
          sas.addAttribute(java.awt.font.TextAttribute.FONT, curFont);
          java.text.AttributedCharacterIterator saci = sas.getIterator();
          java.awt.font.FontRenderContext sfrc = svgGenerator.getFontRenderContext();
          java.awt.font.LineBreakMeasurer slbm = new java.awt.font.LineBreakMeasurer(saci, sfrc);
          while (slbm.getPosition() < saci.getEndIndex()) {
            java.awt.font.TextLayout stextLayout = slbm.nextLayout(width);
            double curWidth = stextLayout.getBounds().getWidth();
            if (curWidth > maxWidth) maxWidth = curWidth;
            sy += stextLayout.getAscent();
            svgGenerator.drawString(curLine.substring(sstartchar, slbm.getPosition()), sx, sy);
            sstartchar = slbm.getPosition();
            sy += stextLayout.getDescent() + stextLayout.getLeading();
            sx = 0;
          }
        }
      }
      if (height < 0) height = Math.round(sy + 0.5f);
      width = new Long(Math.round(maxWidth + 1.5f)).intValue();
      svgGenerator.setSVGCanvasSize(new java.awt.Dimension(width, height));
 
      java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(8192);
      java.io.Writer svgOutput = new java.io.OutputStreamWriter(baos, java.nio.charset.Charset.forName(System.getProperty("file.encoding"))); //"ISO-8859-15"
      svgGenerator.stream(svgOutput, true);
 
      // Create the transcoder input.
      org.apache.batik.transcoder.TranscoderInput input = new org.apache.batik.transcoder.TranscoderInput(new java.io.StringReader(baos.toString()));
 
      // Create the transcoder output.
      java.io.OutputStream ostream = null;
      String absimageLocation = imageLocation;
      System.out.println(absimageLocation);
      java.io.File file = new java.io.File(absimageLocation);
      new java.io.File(file.getParent()).mkdirs();
      ostream = new java.io.FileOutputStream(absimageLocation);
      org.apache.batik.transcoder.TranscoderOutput output = new org.apache.batik.transcoder.TranscoderOutput(ostream);
      //org.apache.batik.transcoder.image.JPEGTranscoder transcoder = new org.apache.batik.transcoder.image.JPEGTranscoder();
      //transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY,new Float(.1));
      org.apache.batik.transcoder.image.PNGTranscoder transcoder = new org.apache.batik.transcoder.image.PNGTranscoder();
      transcoder.transcode(input, output);
      ostream.flush();
      ostream.close();
    }
}
après avoir compilé je fais un java ImageGenerator puis je me retrouve avec l'exception suivante:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/batik/dom/GenericDOMImplementation
at ImageGenerator.generateImage(ImageGenerator.java:81)
at ImageGenerator.generateImage(ImageGenerator.java:70)
at ImageGenerator.main(ImageGenerator.java:26)
Caused by: java.lang.ClassNotFoundException: org.apache.batik.dom.GenericDOMImplementation
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
... 3 more
L'exception pointe sur la ligne suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
org.w3c.dom.Document document = org.apache.batik.dom.GenericDOMImplementation.getDOMImplementation().createDocument(org.apache.batik.dom.svg.SVGDOMImplementation.SVG_NAMESPACE_URI,"svg", null);

Merci d'avance pour votre compréhension