这个想法是,如果您能够将 JavaFX 节点树结构转换为一系列 Graphics2D 订单,那么您可以使用具有 Graphics2D 驱动程序的 Batik。
问题是,将 JavaFX 树结构转换为 Graphics2D 订单并不像您想象的那么困难(即使您处理节点的 CSS 属性)。
您应该从一个新的空 SVGDocument 创建一个 SVGGraphics2D,例如:
Document doc = SVGDOMImplementation.getDOMImplementation().createDocument(SVGDOMImplementation.SVG_NAMESPACE_URI, "svg", null);
SVGGraphics2D g2D = new SVGGraphics2D(doc);
然后得到要转换的Scene的根节点,对于这个节点,得到Node的类型,可以是Shape、Control、Region、ImageView、Group、SubScene、Shape3D
根据每个节点,您可以获得节点的特征。例如,对于一个形状,如果它是一条线,您可以在 SVGGraphics2D 中绘制该线。例如:
g2D.drawLine((int) line.getStartX(), (int) line.getStartY(), (int) line.getEndX(), (int) line.getEndY());
请注意,您还需要注意应用于节点的变换以及节点的填充或绘制。
然后你迭代节点子节点并递归地做同样的事情。
最后,您应该能够将文档保存在 SVG 中,因为 Batik 允许本地执行此操作。