猿问

如何使用 Apache Batik 库在 SVGGraphics2D 中转换 Graphics2D?

我需要将 JPanel(图形)中的内容(形状)转换为 SVGGraphics2D 对象,以获取使用 Apache Batik 库生成的 svg 文件。


public void paintComponent(Graphics g) {

    Graphics2D g2 = (Graphics2D) g;

    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 

            RenderingHints.VALUE_ANTIALIAS_ON);


    g2.setPaint(fg);


    // draw Text

    g2.drawString("Hello world!", 250, 400);


    // draw Line2D.Double

    g2.setPaint(orange);

    g2.draw(new Line2D.Double(50, 50, 200, 200));


    // draw Point2D.Double

    g2.setPaint(red);

    g2.fill(new Ellipse2D.Double(400, 400, 5, 5));


    // draw Rectangle2D.Double

    g2.setPaint(magenta);

    g2.draw(new Rectangle2D.Double(600, 600, 300, 150));

    g2.setPaint(magenta);

    g2.draw(new Rectangle2D.Double(300, 300, 300, 150));


    // draw Ellipse2D.Double

    g2.setPaint(blue);

    g2.draw(new Ellipse2D.Double(400, 400, 200, 200));


    // draw GeneralPath (polygon)

    g2.setPaint(green);

    int x1Points[] = {200, 500, 300};

    int y1Points[] = {100, 100, 300};

    GeneralPath polygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD, 

            x1Points.length);

    polygon.moveTo(x1Points[0], y1Points[0]);


    for ( int index = 1; index < x1Points.length; index++ ) {

        polygon.lineTo(x1Points[index], y1Points[index]);

    }


    polygon.closePath();


    g2.draw(polygon);

}



public void onlyWrite(){


    JFrame f = new JFrame("Shapes Example2");

    f.addWindowListener(new WindowAdapter() {

        public void windowClosing(WindowEvent e) {System.exit(0);}

    });


    // Get a DOMImplementation.

    DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation();



铸造 SVGGraphics2D 我得到以下异常:


线程“main”中的异常 java.lang.ClassCastException: sun.java2d.SunGraphics2D 无法在 ShapesExample2.onlyWrite(ShapesExample2.java:122) at ShapesExample2.main(ShapesExample2.java: 144)


我怎样才能得到 svg 文件?谢谢!


梦里花落0921
浏览 168回答 1
1回答

qq_笑_17

反过来试试,SVGGraphics2D是 的子类Graphics2D,Graphics2D不是 的子类SVGGraphics2D。因此,只需将 SVG 图形对象传递给组件的 paint 方法即可。pane.paintComponent(svgGenerator);您可以在此处查看更多示例:Apache Batik SVG 生成器
随时随地看视频慕课网APP

相关分类

Java
我要回答