簡體   English   中英

使用Apache Batik繪制SVG Path元素

[英]Draw a SVG Path element with Apache Batik

目前,我正在學習SVG,現在我想通過Java API繪制SVG。 目前,我正在查看Apache Batik,但隨時可以提出其他解決方案。

我現在要做的是繪制一個描述填充四分之一圓的路徑元素。 使用純SVG和文本編輯器,這沒問題,看起來像這樣:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <path d="M50,50 L30,50 A20,20 0 0,1 50,30 z"
          style="fill:black;"
    />

如何用蠟染布做同樣的事情。 在文檔中,我只能找到drawArc方法,但這只會繪制四分之一圓的方舟部分,如下所示:

公共類SoExampleMain {

public static void main(String[] args) throws IOException {

    // Get a DOMImplementation.
    DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation();

    // Create an instance of org.w3c.dom.Document.
    String svgNS = "http://www.w3.org/2000/svg";
    Document document = domImpl.createDocument(svgNS, "svg", null);

    // Create an instance of the SVG Generator.
    SVGGraphics2D g = new SVGGraphics2D(document);

    g.drawArc(30, 30, 40, 40, 90, 90);

    // we want to use CSS style attributes
    boolean useCSS = true;

    // Finally, stream out SVG to the standard output using
    // UTF-8 encoding.
    Writer out = new OutputStreamWriter(new FileOutputStream(new File("C:\\Users\\Scyla101\\Desktop\\batik-test.svg")), "UTF-8");

    g.stream(out, useCSS);
}

}

有沒有一種方法可以獲得與使用path元素的常規SVG中相同的結果。

作為輔助節點,有很好的蠟染API教程嗎?

問候

看:
http://www.svgopen.org/2002/papers/deweese_hardy__batik_intro/
http://www.svgopen.org/2002/papers/kormann__developing_svg_apps_with_batik/
http://www.udel.edu/CIS/software/dist/batik-1.6/docs/javaScripting.html
http://xmlgraphics.apache.org/batik/
http://mcc.id.au/2007/09/batik-course/
http://wiki.apache.org/xmlgraphics-batik/
http://people.apache.org/~deweese/ac2003/ApacheCON2003.pdf

我將使用JSVGCanvas:

public class SVGApplication {    
    public static void main(final String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @SuppressWarnings("unused")
            @Override
            public void run() {
                new SVGApplication();
            }
        });
    }

    public SVGApplication() {
        final JFrame frame = new JFrame();
        final JPanel panel = new JPanel();
        final JSVGCanvas svgCanvas = new JSVGCanvas();

        frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        frame.getContentPane().add(panel, java.awt.BorderLayout.CENTER);
        svgCanvas.setDocumentState(AbstractJSVGComponent.ALWAYS_DYNAMIC);
        svgCanvas.setDocument(buildDocument());

        panel.add(svgCanvas);
        frame.pack();
        frame.setVisible(true);
    }

    private Document buildDocument() {
        final DOMImplementation impl = SVGDOMImplementation.getDOMImplementation();
        final String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
        final Document doc = impl.createDocument(svgNS, "svg", null);

        // get the root element (the svg element)
        final Element svgRoot = doc.getDocumentElement();

        // create the path element
        final Element element = doc.createElementNS(svgNS, "path");
        element.setAttribute("d", "M50,50 L30,50 A20,20 0 0,1 50,30 z");
        element.setAttribute("style", "fill:black;");

        svgRoot.appendChild(element);

        return doc;
    }
}

要顯示svg路徑,可以使用JavaFX:

public class Main extends Application {
    @Override
    public void start(final Stage primaryStage) {
        final VBox root = new VBox(createPath());
        final Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private SVGPath createPath() {
        final SVGPath arc = new SVGPath();
        arc.setContent("M50,50 L30,50 A20,20 0 0,1 50,30 z");
        arc.setFill(Color.BLACK);
        return arc;
    }

    public static void main(final String[] args) {
        launch(args);
    }
}

問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM