Apache Batik Нет WriteAdapter?

Я пишу код для преобразования SVG в PNG:

package com.example;

import java.io.*;
import java.nio.file.Paths;
import org.apache.batik.transcoder.image.PNGTranscoder;
import org.apache.batik.transcoder.SVGAbstractTranscoder;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;

public class Main {

    public static void main(String [] args) throws Exception {

        // read the input SVG document into TranscoderInput
        String svgURI = Paths.get(args[0]).toUri().toURL().toString();
        TranscoderInput input = new TranscoderInput(svgURI);
        // define OutputStream to PNG Image and attach to TranscoderOutput
        OutputStream ostream = new FileOutputStream("out.png");
        TranscoderOutput output = new TranscoderOutput(ostream);
        // create a JPEG transcoder
        PNGTranscoder t = new PNGTranscoder();
        // set the transcoding hints
        t.addTranscodingHint(SVGAbstractTranscoder.KEY_HEIGHT, new Float(600));
        t.addTranscodingHint(SVGAbstractTranscoder.KEY_WIDTH, new Float(600));
        // convert and write output
        t.transcode(input, output);
        // flush and close the stream then exit
        ostream.flush();
        ostream.close();
    }
}

Я получаю следующие исключения, выполняя его с различными SVG:

Exception in thread "main" org.apache.batik.transcoder.TranscoderException: null
Enclosed Exception:
Could not write PNG file because no WriteAdapter is availble
    at org.apache.batik.transcoder.image.ImageTranscoder.transcode(ImageTranscoder.java:132)
    at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142)
    at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156)
    at com.example.Main.main(Main.java:26)

Версия для батика (сообщено Maven):

version=1.9
groupId=org.apache.xmlgraphics
artifactId=batik-transcoder

Я получаю ту же ошибку с Batik 1.7.

Предложения?


person Al Pacifico    schedule 21.07.2017    source источник
comment
См. также: github.com/css4j/echosvg/issues/11   -  person Dave Jarvis    schedule 08.05.2021


Ответы (1)


Проблема была решена Питером Коппенсом в списке рассылки xmlgraphics-batik-users. Проблема в том, что в репозитории Maven для Batik 1.9 отсутствует зависимость, которую можно устранить, добавив в pom.xml:

<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>batik-codec</artifactId>
    <version>1.9</version>
</dependency>

С этим добавлением загадочное исключение исчезает, и код работает, как и ожидалось. Об этом сообщалось как об ошибке для Batk 1.7 (https://bz.apache.org/bugzilla/show_bug.cgi?id=44682).

person Al Pacifico    schedule 26.07.2017
comment
где найти pom.xml? - person Lokesh Pandey; 23.08.2017
comment
Узел зависимостей моего pom.xml включал: ‹dependency› ‹groupId›org.apache.xmlgraphics‹/groupId› ‹artifactId›batik-transcoder‹/artifactId› ‹version›1.9‹/version› ‹/dependency› ‹dependency› ‹groupId›org.apache.xmlgraphics‹/groupId› ‹artifactId›batik-codec‹/artifactId› ‹version›1.9‹/version› ‹/dependency› Надеюсь, это поможет. - person Al Pacifico; 24.08.2017
comment
У меня была такая же проблема с версией 1.10. - person ankitkpd; 07.11.2018
comment
то же самое с версией 1.11 - person rumman0786; 13.03.2019
comment
@ rumman0786: Я предлагаю создать простой пример (вы даже можете скопировать мой код выше и использовать более новый батик в качестве зависимости) и отправить его в список рассылки (можно зарегистрироваться по адресу xmlgraphics.apache.org/batik/mailing-lists.html ). Когда у меня будет возможность, я могу перепроверить, какую версию батика использует развернутая версия моего кода, и если зависимость была обновлена, посмотреть, работает ли она... - person Al Pacifico; 14.03.2019
comment
Все так же в 1.13 - person ZhekaKozlov; 20.07.2020