java - 使用 Batik 将 svg 转换为图像时出现 TranscoderException
问题描述
我正在尝试将svg
内容转换为pdf
orpng
文件。我正在使用蜡染来做到这一点。我的代码如下:
Transcoder transcoder = new PDFTranscoder();
TranscoderOutput transcoderOutput = new TranscoderOutput(new FileOutputStream(new File(outputFilePath + "\\" + outputFileName + ".pdf")));
transcoder.transcode(transcoderInput, transcoderOutput);
但是,我得到以下异常:
Exception in thread "main" org.apache.batik.transcoder.TranscoderException: null
Enclosed Exception:
Content is not allowed in prolog.
at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:226)
at org.apache.batik.transcoder.image.ImageTranscoder.transcode(ImageTranscoder.java:92)
at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142)
at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156)
at com.we.poc.svgConverterdemo.conv.POC.main(POC.java:35)
Caused by: org.apache.batik.bridge.BridgeException: Content is not allowed in prolog.
at org.apache.batik.bridge.BridgeContext.getReferencedNode(BridgeContext.java:788)
at org.apache.batik.bridge.BridgeContext.getReferencedElement(BridgeContext.java:804)
at org.apache.batik.bridge.PaintServer.convertURIPaint(PaintServer.java:365)
at org.apache.batik.bridge.PaintServer.convertPaint(PaintServer.java:273)
at org.apache.batik.bridge.PaintServer.convertFillPaint(PaintServer.java:242)
at org.apache.batik.bridge.PaintServer.convertFillAndStroke(PaintServer.java:160)
at org.apache.batik.bridge.SVGShapeElementBridge.createShapePainter(SVGShapeElementBridge.java:117)
at org.apache.batik.bridge.SVGDecoratedShapeElementBridge.createFillStrokePainter(SVGDecoratedShapeElementBridge.java:58)
at org.apache.batik.bridge.SVGDecoratedShapeElementBridge.createShapePainter(SVGDecoratedShapeElementBridge.java:84)
at org.apache.batik.bridge.SVGShapeElementBridge.buildGraphicsNode(SVGShapeElementBridge.java:91)
at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:224)
at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219)
at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219)
at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219)
at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219)
at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219)
at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219)
at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
at org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:141)
at org.apache.batik.bridge.SVGImageElementBridge.createSVGImageNode(SVGImageElementBridge.java:697)
at org.apache.batik.bridge.SVGImageElementBridge.createImageGraphicsNode(SVGImageElementBridge.java:296)
at org.apache.batik.bridge.SVGImageElementBridge.buildImageGraphicsNode(SVGImageElementBridge.java:179)
at org.apache.batik.bridge.SVGImageElementBridge.createGraphicsNode(SVGImageElementBridge.java:121)
at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:213)
at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:219)
at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171)
at org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:82)
at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:208)
... 4 more
解决方案
从您的堆栈跟踪中,看起来某些填充定义引用了外部文件。仔细查看该文件并确保它是有效的 XML:
在 org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142)
... 引起:
org.apache.batik.bridge.BridgeException:prolog 中不允许内容。
在 org.apache.batik.bridge.BridgeContext.getReferencedNode(BridgeContext.java:788)
在 org.apache.batik.bridge.BridgeContext.getReferencedElement(BridgeContext.java:804)
在 org.apache.batik.bridge.PaintServer.convertURIPaint (PaintServer.java:365)
在 org.apache.batik.bridge.PaintServer.convertPaint(PaintServer.java:273)
在 org.apache.batik.bridge.PaintServer.convertFillPaint(PaintServer.java:242)
推荐阅读
- xml - 划分一组项 XPath
- powershell - 我想在 Windows 事件日志的应用程序和服务日志区域中创建一个自定义文件夹
- python - 在 Keras 中用于恶意软件机器学习的最佳损失函数和优化器?
- typescript - 即使我没有实现接口的所有强制属性,Typescript 也没有显示错误
- opengl - GLsizeiptr 和 GLintptr - 函数列表
- excel - 如何重置按钮的外观?
- python - 无法使用 DRF APIClient() 更改标头
- laravel - 为什么登录重定向在 Laravel 中不起作用
- r - 错误:Bioconductor 版本“3.13”需要 R 版本“4.1”(R 版本 4.0.2)
- mysql - 在 Mysql 中,具有不同列值的相同 Id 使用 mysql 查询并排显示