Невозможно добавить SVG в PDF, используя Itext - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь добавить образец SVG-файла, используя IText API.Я использую последнюю версию iText, но я получаю сообщение об ошибке ниже.Ниже приведен код для добавления SVG.Может кто-нибудь помочь мне решить эту проблему?

Взял файл SVG отсюда: Иконки, сделанные Freepik с www.flaticon.com, лицензированы CC 3.0 BY

Ниже приведен POM

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>7.1.5</version>
    <type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/svg -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>svg</artifactId>
    <version>7.1.5</version>
</dependency>

Код

PdfWriter writer = new PdfWriter(new FileOutputStream("C:\\Users\\Documents\\SVGPOC\\Sample1.pdf"));

PdfDocument pdfDoc = new PdfDocument(writer);

Document doc = new Document(pdfDoc);

URL svgUrl = new File("C:\\Users\\Documents\\SVGPOC\\teamwork.svg").toURI().toURL();
doc.add(new Paragraph("Testing SVG on PDF"));                      
Image image = SvgConverter.convertToImage(svgUrl.openStream(), pdfDoc);
doc.add(image);
doc.close();


Exception in thread "main" java.lang.UnsupportedOperationException
    at com.itextpdf.svg.renderers.path.impl.MoveTo.setCoordinates(MoveTo.java:83)
    at com.itextpdf.svg.renderers.impl.PathSvgNodeRenderer.processPathOperator(PathSvgNodeRenderer.java:205)
    at com.itextpdf.svg.renderers.impl.PathSvgNodeRenderer.getShapes(PathSvgNodeRenderer.java:228)
    at com.itextpdf.svg.renderers.impl.PathSvgNodeRenderer.doDraw(PathSvgNodeRenderer.java:115)
    at com.itextpdf.svg.renderers.impl.AbstractSvgNodeRenderer.draw(AbstractSvgNodeRenderer.java:121)
    at com.itextpdf.svg.renderers.impl.AbstractBranchSvgNodeRenderer.doDraw(AbstractBranchSvgNodeRenderer.java:100)
    at com.itextpdf.svg.renderers.impl.SvgTagSvgNodeRenderer.doDraw(SvgTagSvgNodeRenderer.java:62)
    at com.itextpdf.svg.renderers.impl.AbstractSvgNodeRenderer.draw(AbstractSvgNodeRenderer.java:121)
    at com.itextpdf.svg.renderers.impl.PdfRootSvgNodeRenderer.draw(PdfRootSvgNodeRenderer.java:93)
    at com.itextpdf.svg.converter.SvgConverter.convertToXObject(SvgConverter.java:816)
    at com.itextpdf.svg.converter.SvgConverter.convertToXObject(SvgConverter.java:663)
    at com.itextpdf.svg.converter.SvgConverter.convertToXObject(SvgConverter.java:653)
    at com.itextpdf.svg.converter.SvgConverter.convertToXObject(SvgConverter.java:688)
    at com.itextpdf.svg.converter.SvgConverter.convertToImage(SvgConverter.java:713)
    at demoitext.ITextDemo.main(ITextDemo.java:33)

1 Ответ

1 голос
/ 12 марта 2019

Глядя на исходный код , кажется, что itext не поддерживает команды перемещения с более чем двумя аргументами.

   if (coordinates.length > 2) {
        // (x y)+ parameters will be implemented in the future
        throw new UnsupportedOperationException();
    }

Спецификация SVG позволяет это таквам просто нужно переписать свой ввод, чтобы избежать этого, то есть вставить букву L или l.Так что

M 1,2 3,4

должно стать

M 1,2 L 3,4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...