几周以前,它完全正常工作我的SVG,但不知何故它停止工作,我不知道原因,因为在服务器上触发的错误没有帮助。当我将svg文件传输到我的pdf时会发生这种情况:
Root element namespace does not match that requested:
Requested: http://www.w3.org/2000/svg
Found: null. Stacktrace follows:
org.apache.batik.bridge.BridgeException: Root element namespace does not match that requested:
Requested: http://www.w3.org/2000/svg
Found: null
at org.apache.batik.bridge.BridgeContext.getReferencedNode(BridgeContext.java:780)
at org.apache.batik.bridge.BridgeContext.getReferencedElement(BridgeContext.java:796)
at org.apache.batik.bridge.CSSUtilities.convertClipPath(CSSUtilities.java:719)
at org.apache.batik.bridge.AbstractGraphicsNodeBridge.buildGraphicsNode(AbstractGraphicsNodeBridge.java:146)
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.build(GVTBuilder.java:82)
at net.sf.jasperreports.renderers.BatikRenderer.ensureSvg(BatikRenderer.java:192)
at net.sf.jasperreports.renderers.BatikRenderer.getDimension(BatikRenderer.java:141)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportImage(JRPdfExporter.java:1351)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:774)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:738)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:616)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:364)
at com.scacp.operation.MonitoringWellController$_closure13.doCall(MonitoringWellController.groovy:749)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
我不是这个意思,我的xml svg(在xml验证器网站上)是有效的代码。我写的是这样的:
file.write('<?xml version="1.0" encoding="UTF-8"?> \n'
+ '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> \n'
+ '<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="705px" height="1000px" viewBox="0 0 705 1000" enable-background="new 0 0 705 1000" xml:space="preserve"> \n'
+ svgimage + '\n'
+ '</svg>');
变量svgimage是一堆g
,defs
,text
,images
等(非常大,像1k行)
答案 0 :(得分:0)
我建议这样但不完全理解问题 - 转移到pdf是否在某个时刻工作然后突然失败。
在文档类型声明中: w3.org提到在系统标识符中使用“平坦”DTD,这是一个扁平的DTD,而不是多个文件。
w3.org - SVG NampeSpace, Public Identifier and System Identifier :
“请注意,系统标识符中列出的DTD是模块化的DTD(即其内容分布在多个文件中),这意味着验证器可能必须获取多个模块才能进行验证。因此,存在一个扁平的DTD可用,与SVG 1.1模块化的DTD相对应。可以在http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-flat.dtd找到。“
答案 1 :(得分:0)
我有很多工作需要在我的xml上创建超过+ 1k行的原因,并且svg创建的标签和w3没有被识别,clipPath
和{{clip-path
1}}并通过删除它们,完美地运作:
<clipPath id="_ABSTRACT_RENDERER_ID_0"> //removed
...
</clipPath>
<g clip-path="url(http://mypage.com/344#_ABSTRACT_RENDERER_ID_0)"> //remove the attribute clip-path
...
</g>
不知何故,w3没有通过简单地删除它来识别url(...)
,它可以工作。它很奇怪,它总是在那里。