问题描述
我正在使用jlatexmath数学将公式转换为SVG图像。我需要在导出的svg图像中保留变量名称。我已经玩过fontAsShapes参数。输出结果很差:不是数学公式。 如何在输出svg图像中保留变量名?现在,所有变量都在svg图像上绘制(仅坐标)。
是否可以绘制公式并保留可变词?
我稍后将这些词用于超链接。
下面是代码:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Insets;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import javax.swing.JLabel;
import org.apache.batik.dom.svg.SVGDOMImplementation;
import org.apache.batik.svggen.SVGGeneratorContext;
import org.apache.batik.svggen.SVGGraphics2D;
import org.scilab.forge.jlatexmath.DefaultTeXFont;
import org.scilab.forge.jlatexmath.TeXConstants;
import org.scilab.forge.jlatexmath.TeXFormula;
import org.scilab.forge.jlatexmath.TeXIcon;
import org.scilab.forge.jlatexmath.cyrillic.CyrillicRegistration;
import org.scilab.forge.jlatexmath.greek.GreekRegistration;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
public class Main {
public static void main(final String args[]) throws IOException {
toSVG("End_fD = (Tos_f/2)*(1/60)*(Tos_f)","Example.svg",true);
System.out.println("done");
}
public static void toSVG(final String latex,final String file,final boolean fontAsShapes) throws IOException {
DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation();
String svgNS = "http://www.w3.org/2000/svg";
Document document = domImpl.createDocument(svgNS,"svg",null);
SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(document);
SVGGraphics2D g2 = new SVGGraphics2D(ctx,fontAsShapes);
DefaultTeXFont.registerAlphabet(new CyrillicRegistration());
DefaultTeXFont.registerAlphabet(new GreekRegistration());
TeXFormula formula = new TeXFormula(latex);
TeXIcon icon = formula.createTeXIcon(TeXConstants.STYLE_DISPLAY,20);
icon.setInsets(new Insets(5,5,5));
g2.setSVGCanvasSize(new Dimension(icon.getIconWidth(),icon.getIconHeight()));
g2.setColor(Color.white);
g2.fillRect(0,icon.getIconWidth(),icon.getIconHeight());
JLabel jl = new JLabel();
jl.setForeground(new Color(0,0));
icon.paintIcon(jl,g2,0);
boolean useCSS = true;
FileOutputStream svgs = new FileOutputStream("target/" + file);
Writer out = new OutputStreamWriter(svgs,"UTF-8");
g2.stream(out);
svgs.flush();
svgs.close();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)