java处理word公式(wmf格式转svg格式转png格式)

java | 2020-08-27 09:43:20

1.wmf格式转换成svg

把wmf格式转成svg格式,这样就能在浏览器中显示了
需要第三方jar包:wmf2svg-0.9.6.jar

//wmf格式的图片转换成svg格式  
    private void convert(String file,String dest) throws Exception{  
        InputStream in = new FileInputStream(file);  
        WmfParser parser = new WmfParser();  
        final SvgGdi gdi = new SvgGdi(false);  
        parser.parse(in, gdi);  
        Document doc = gdi.getDocument();  
        OutputStream out = new FileOutputStream(dest);  
        if (dest.endsWith(".svgz")) {  
            out = new GZIPOutputStream(out);  
        }  
        output(doc, out);  
   }  
  
   private void output(Document doc, OutputStream out) throws Exception {  
        TransformerFactory factory = TransformerFactory.newInstance();  
        Transformer transformer = factory.newTransformer();  
        transformer.setOutputProperty(OutputKeys.METHOD, "xml");  
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");  
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");  
        transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,"-//W3C//DTD SVG 1.0//EN");  
        transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd");  
        transformer.transform(new DOMSource(doc), new StreamResult(out));  
        ByteArrayOutputStream bos = new ByteArrayOutputStream();  
        transformer.transform(new DOMSource(doc), new StreamResult(bos));  
        out.flush();  
        out.close();  
}

 

2.svg格式转换成png
导入maven依赖

<dependency>
    <groupId>com.kenai.nbpwr</groupId>
    <artifactId>org-apache-batik-all</artifactId>
    <version>1.7-201003011305</version>
</dependency>
	<!-- https://mvnrepository.com/artifact/xml-apis/xml-apis-ext -->
<dependency>
    <groupId>xml-apis</groupId>
    <artifactId>xml-apis-ext</artifactId>
    <version>1.3.04</version>
</dependency>
		<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>batik-codec</artifactId>
    <version>1.7</version>
</dependency>

 

public class Test {
	/**
	 * 将svg字符串转换为png
	 * 
	 * @param svgCode
	 *            svg代码
	 * @param pngFilePath
	 *            保存的路径
	 * @throws TranscoderException
	 *             svg代码异常
	 * @throws IOException
	 *             io错误
	 */
	public static void convertToPng(String svgCode, String pngFilePath) throws IOException, TranscoderException {
 
		File file = new File(pngFilePath);
 
		FileOutputStream outputStream = null;
		try {
			file.createNewFile();
			outputStream = new FileOutputStream(file);
			convertToPng(svgCode, outputStream);
		} finally {
			if (outputStream != null) {
				try {
					outputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
 
	/**
	 * 将svgCode转换成png文件,直接输出到流中
	 * 
	 * @param svgCode
	 *            svg代码
	 * @param outputStream
	 *            输出流
	 * @throws TranscoderException
	 *             异常
	 * @throws IOException
	 *             io异常
	 */
	public static void convertToPng(String svgCode, OutputStream outputStream) throws TranscoderException, IOException {
		try {
			byte[] bytes = svgCode.getBytes("utf-8");
			PNGTranscoder t = new PNGTranscoder();
			TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(bytes));
			TranscoderOutput output = new TranscoderOutput(outputStream);
			t.transcode(input, output);
			outputStream.flush();
		} finally {
			if (outputStream != null) {
				try {
					outputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
 
	// 读取svg
	public static String readToString(String fileName) {
		String encoding = "UTF-8";
		File file = new File(fileName);
		Long filelength = file.length();
		byte[] filecontent = new byte[filelength.intValue()];
		try {
			FileInputStream in = new FileInputStream(file);
			in.read(filecontent);
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			return new String(filecontent, encoding);
		} catch (UnsupportedEncodingException e) {
			System.err.println("The OS does not support " + encoding);
			e.printStackTrace();
			return null;
		}
	}
 
	public static void main(String[] args) {
		String svgCode = readToString("C:\\Users\\Administrator\\Desktop\\1.svg");
		try {
			 convertToPng(svgCode,"D:/1/1.png");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TranscoderException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

登录后即可回复 登录 | 注册
    
关注编程学问公众号