Apache FOP/Xmlgraphics не может загрузить SVG, если он находится в банке.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Apache FOP/Xmlgraphics не может загрузить SVG, если он находится в банке.

Сообщение Anonymous »

У меня есть приложение, использующее Apache FOP для создания PDF-файла, который включает изображение SVG (это логотип, и он каждый раз один и тот же).
Я обнаружил, что оно не включает изображение, если я использую Maven плагин сборки для создания jar-файла с зависимостями.
Я проделал некоторую работу, чтобы сузить его, и кажется, что загрузчик изображений SVG не регистрируется, когда приложение находится в jar-файле - так что это не PDF-часть ФОП как например, это ImageManager, который находится в xmlgraphics-commons.
Я вставил минимальный пример ниже, для него потребуются файлы с именами img.png, img.tiff< /code> и img.svg в текущем каталоге.
Если вы запустите это с помощью mvn exec:java, оно распечатается

Код: Выделить всё

image (image/png)
image (image/tiff)
image (image/svg+xml)
и если вы запустите пакет mvn, а затем java -cp .\target\mavenproject2-1.0-SNAPSHOT-jar-with-dependents.jar project.Mavenproject2 вы получаете

Код: Выделить всё

image (image/png)
image (image/tiff)
Nov 26, 2024 10:19:15 AM project.Mavenproject2 load
SEVERE: Loading img.svg
org.apache.xmlgraphics.image.loader.ImageException: The file format is not supported.  No ImagePreloader found for image
at org.apache.xmlgraphics.image.loader.ImageManager.preloadImage(ImageManager.java:181)
at project.Mavenproject2.load(Mavenproject2.java:43)
at project.Mavenproject2.main(Mavenproject2.java:31)

null
Значит, загрузчик SVG недоступен.
Есть ли способ указать FOP зарегистрировать этот загрузчик SVG, иначе его невозможно запустить из jar с зависимостями, и мне стоит поискать другой способ упаковки приложения?
Минимальный пример кода:

Код: Выделить всё

package project;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageInputStream;
import org.apache.fop.apps.FopFactoryBuilder;
import org.apache.xmlgraphics.image.loader.ImageException;
import org.apache.xmlgraphics.image.loader.ImageInfo;
import org.apache.xmlgraphics.image.loader.ImageManager;
import org.apache.xmlgraphics.image.loader.ImageSource;

public class Mavenproject2 {

public static void main(String[] args) throws FileNotFoundException, ImageException, IOException {
Mavenproject2 me = new Mavenproject2();
System.out.println(me.load("img.png"));
System.out.println(me.load("img.tiff"));
System.out.println(me.load("img.svg"));
}

public Mavenproject2() {
URI base = URI.create("https://example.com/nowhere");
FopFactoryBuilder ffb = new FopFactoryBuilder(base);
this.imageManager = ffb.getImageManager();
}
private final ImageManager imageManager;

public ImageInfo load(String ff) {
try {
File sourceFile = new File(ff);
ImageInputStream iis = ImageIO.createImageInputStream(sourceFile);
ImageInfo preloadImage = imageManager.preloadImage("image", new ImageSource(iis, "image", true));
return preloadImage;
} catch (IOException | ImageException ex) {
Logger.getLogger(Mavenproject2.class.getName()).log(Level.SEVERE, "Loading " + ff, ex);
}
return null;
}
}

и POM:

Код: Выделить всё


4.0.0
project
mavenproject2
1.0-SNAPSHOT
jar


org.apache.xmlgraphics
fop
2.10



UTF-8
21
project.Mavenproject2




maven-assembly-plugin
3.7.1


package

single



jar-with-dependencies








Использование maven 3.9.9 в Windows11.


Подробнее здесь: https://stackoverflow.com/questions/792 ... s-in-a-jar
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Apache FOP/Xmlgraphics не может загрузить SVG, если он находится в банке.
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Apache FOP/Xmlgraphics не может загрузить SVG, если он находится в банке.
    Anonymous » » в форуме JAVA
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Apache FOP для .NET Core (FOP.NetCore v. 3.0): Wingdings 2/3 не найден
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • MVN Deploy: развернуть на существующей правильной банке приводит к коррупционной банке в артефакте
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Org.apache.xmlgraphics.image.loader.ImageException: формат файла не поддерживается. ImagePreloader не найден
    Anonymous » » в форуме JAVA
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»