Java 使用SVGSalamander将SVG转换为图像未正确渲染SVG

Java 使用SVGSalamander将SVG转换为图像未正确渲染SVG,java,image,svg,converters,svg-salamander,Java,Image,Svg,Converters,Svg Salamander,我曾为iText PDF文档的SVG图像渲染工作。 为此,我使用SVGSalamander将SVG转换为图像格式。 它工作正常,但有一个奇怪的行为,即一些SVG图像在进行渲染时没有正确渲染。错误渲染的svg与真实图像不一致。 我试过了,但我不明白为什么只有一些图片会发生这种情况 如果有人帮我解决这个问题,我真的很感激 Java代码: private static Image createSVGImage(PdfWriter pdfWriter, String imageEntry) throws

我曾为iText PDF文档的SVG图像渲染工作。 为此,我使用SVGSalamander将SVG转换为图像格式。 它工作正常,但有一个奇怪的行为,即一些SVG图像在进行渲染时没有正确渲染。错误渲染的svg与真实图像不一致。 我试过了,但我不明白为什么只有一些图片会发生这种情况

如果有人帮我解决这个问题,我真的很感激

Java代码:

private static Image createSVGImage(PdfWriter pdfWriter, String imageEntry) throws BadElementException {
        Image image = null;

        Graphics2D g2dgraphics =null;
        PdfTemplate template = null;
        try{
            SVGDiagram diagram = SVGCache.getSVGUniverse().getDiagram( new java.io.File( imageEntry ).toURI() );
            template = pdfWriter.getDirectContent().createTemplate( diagram.getWidth(), diagram.getHeight());
            diagram.setIgnoringClipHeuristic(true);
             g2dgraphics= new PdfGraphics2D(template, diagram.getWidth(), diagram.getHeight());
        diagram.render(g2dgraphics);
    }catch( Exception e ){
        e.printStackTrace();
    } finally {
        if( g2dgraphics != null ){
            g2dgraphics.dispose();
          image = Image.getInstance(template);

        }
        g2dgraphics.dispose();
    }

    return image;
}
未对齐的SVG xml代码

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
  <path d="M19,16a46,46 0,1,0 62,0l-8,8a34,34 0,1,1-46,0z" fill="#069"/>
  <path d="M46,43v35a28,28 0,0,1-14-49zM54,43v35a28,28 0,0,0 14-49z" fill="#396"/>
  <circle r="15" cx="50" cy="18" fill="#900"/>
</svg>

真实图像

从上面的代码输出图像


我真的不知道为什么这个库会出现这种情况,因为没有答案,我已经将SVGSalamendar更改为Batik库,如果有人需要,这是它的工作代码

Maven依赖关系

<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>batik-svggen</artifactId>
    <version>1.11</version>
</dependency>

<!-- https://mvnrepository.com/artifact/batik/batik-transcoder -->
<dependency>
 <groupId>org.apache.xmlgraphics</groupId>
  <artifactId>batik-transcoder</artifactId>
   <version>1.11</version>
</dependency>

<!-- https://mvnrepository.com/artifact/batik/batik-rasterizer -->
<dependency>
 <groupId>org.apache.xmlgraphics</groupId>
  <artifactId>batik-rasterizer</artifactId>
  <version>1.11</version>
</dependency>
private static Image createSVGImage(PdfWriter pdfWriter, String imageEntry) throws BadElementException, IOException {
        Image image = null;
        final BufferedImage[] imagePointer = new BufferedImage[1];

        PdfContentByte pdfCB = new PdfContentByte(pdfWriter);   

         try {

                TranscoderInput input = new TranscoderInput(new FileInputStream(imageEntry));

                ImageTranscoder t = new ImageTranscoder() {

                    @Override
                    public BufferedImage createImage(int w, int h) {
                        return new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
                    }

                    @Override
                    public void writeImage(BufferedImage img, TranscoderOutput output) throws TranscoderException {
                        // TODO Auto-generated method stub
                         imagePointer[0] = img;

                    }
                };
                t.addTranscodingHint(ImageTranscoder.KEY_FORCE_TRANSPARENT_WHITE,
                        Boolean.FALSE);
                t.addTranscodingHint(ImageTranscoder.KEY_BACKGROUND_COLOR, Color.white);
                t.transcode(input, null);
            }
            catch (TranscoderException ex) {
                // Requires Java 6
                ex.printStackTrace();
                throw new IOException("Couldn't convert ");
            }

          image = Image.getInstance(pdfCB, imagePointer[0], 1);     

        return image;
    }