感谢Adrian展示了应该如何使用Batik光栅化器API。但是,我需要一个更轻量的解决方案–
我无法写入临时文件,并且我希望更少的依赖关系。因此,从他指出的方法开始,我找到了一种访问较低级代码进行转换的方法,而没有其他方法。
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import org.apache.batik.transprer.Transprer;import org.apache.batik.transprer.TransprerException;import org.apache.batik.transprer.TransprerInput;import org.apache.batik.transprer.TransprerOutput;import org.apache.fop.svg.PDFTransprer;public class Test { public static void main(String[] argv) throws TransprerException, FileNotFoundException { Transprer transprer = new PDFTransprer(); TransprerInput transprerInput = new TransprerInput(new FileInputStream(new File("/tmp/test.svg"))); TransprerOutput transprerOutput = new TransprerOutput(new FileOutputStream(new File("/tmp/test.pdf"))); transprer.transpre(transprerInput, transprerOutput); }}
javac -cp batik-rasterizer.jar -d build Test.javajava -cp build:batik-rasterizer.jar Test
重要的一点是,
TransprerInput并且
TransprerOutput可以与
InputStream和一起使用
OutputStream,而不仅仅是文件流。请注意,其中一个构造函数采用
org.w3c.dom.document,这意味着您甚至不需要将SVG
DOM序列化为SVG字符串,从而节省了额外的步骤。
与高级API不同,此版本也不向stdout / stderr写入任何内容。
对于JPEG,PNG或TIFF输出,请替换
org.apache.fop.svg.PDFTransprer为
org.apache.batik.transprer.image.JPEGTransprer,
PNGTransprer或
TIFFTransprer(请注意,这些栅格格式在不同的包装中)。
(我不太确定Java如何找到
org.apache.batk.transprer.*和
org.apache.fop.svg.PDFTransprer类,因为我没有在中看到它们
batik-rasterizer.jar。)
编辑:
尽管简单的命令行编译
batik-rasterizer.jar仅适用于该命令,但是它正在执行某种类加载器的魔力来查找所有必需的类。在更实际的情况下(使用Ant构建项目),您必须手动查找类。他们可以发现
batik-1.7.zip从蜡染项目,并
fop-1.1.zip从该项目的FOP。在蜡染中,您需要进行编译
batik-transprer.jar和运行
batik-transprer.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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)