java svg 转pdf_将SVG转换为PDF

小编典典

感谢Adrian展示了应该如何使用Batik光栅化器API。但是,我需要一个更轻量的解决方案–

我无法写入临时文件,并且我希望更少的依赖关系。因此,从他指出的方法开始,我找到了一种访问较低级代码进行转换的方法,而没有其他方法。

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import org.apache.batik.transcoder.Transcoder;

import org.apache.batik.transcoder.TranscoderException;

import org.apache.batik.transcoder.TranscoderInput;

import org.apache.batik.transcoder.TranscoderOutput;

import org.apache.fop.svg.PDFTranscoder;

public class Test {

public static void main(String[] argv) throws TranscoderException, FileNotFoundException {

Transcoder transcoder = new PDFTranscoder();

TranscoderInput transcoderInput = new TranscoderInput(new FileInputStream(new File("/tmp/test.svg")));

TranscoderOutput transcoderOutput = new TranscoderOutput(new FileOutputStream(new File("/tmp/test.pdf")));

transcoder.transcode(transcoderInput, transcoderOutput);

}

}

编译并运行命令是

javac -cp batik-rasterizer.jar -d build Test.java

java -cp build:batik-rasterizer.jar Test

重要的一点是,TranscoderInput并且TranscoderOutput可以与InputStream和一起使用OutputStream,而不仅仅是文件流。请注意,其中一个构造函数采用org.w3c.dom.Document,这意味着您甚至不需要将SVG

DOM序列化为SVG字符串,从而节省了额外的步骤。

与高级API不同,此版本也不向stdout / stderr写入任何内容。

对于JPEG,PNG或TIFF输出,请替换org.apache.fop.svg.PDFTranscoder为org.apache.batik.transcoder.image.JPEGTranscoder,PNGTranscoder或TIFFTranscoder(请注意,这些栅格格式在不同的包装中)。

(我不太确定Java如何找到org.apache.batk.transcoder.*和org.apache.fop.svg.PDFTranscoder类,因为我没有在中看到它们batik-

rasterizer.jar。)

编辑:

尽管简单的命令行编译batik-

rasterizer.jar仅适用于该命令,但是它正在执行某种类加载器的魔力来查找所有必需的类。在更实际的情况下(使用Ant构建项目),您必须手动查找类。他们可以发现batik-1.7.zip从蜡染项目,并fop-1.1.zip从该项目的FOP。在蜡染中,您需要进行编译batik-

transcoder.jar和运行

batik-transcoder.jar

batik-anim.jar

batik-awt-util.jar

batik-bridge.jar

batik-css.jar

batik-dom.jar

batik-ext.jar

batik-gvt.jar

batik-parser.jar

batik-script.jar

batik-svg-dom.jar

batik-util.jar

batik-xml.jar

xml-apis-ext.jar

在FOP中,您需要进行编译fop.jar和运行

fop.jar

avalon-framework-4.2.0.jar

xmlgraphics-commons-1.5.jar

2020-09-08

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值