Я обнаружил, что оно не включает изображение, если я использую 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)
Код: Выделить всё
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
Есть ли способ указать 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;
}
}
Код: Выделить всё
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
Подробнее здесь: https://stackoverflow.com/questions/792 ... s-in-a-jar