charts added

This commit is contained in:
root
2025-10-06 18:09:22 +05:00
parent 40626e9a14
commit ceff3ca5d3
2 changed files with 32 additions and 22 deletions
@@ -40,7 +40,7 @@ public class ReportSynthesisService {
return new ArrayList<byte[]>();
}
String svg = ollamaAnalyticsService.generateWithInstruction(json, buildSvgPrompt(json));
byte[] png = SvgToPngConverter.convertSvgToPng(svg);
byte[] png = SvgToPngConverter.convert(svg);
List<byte[]> list = new ArrayList<>();
if (png != null && png.length > 0) {
list.add(png);
@@ -2,40 +2,50 @@ package kz.konturai.parser.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.PNGTranscoder;
import java.io.InputStream;
public class SvgToPngConverter {
public static byte[] convertSvgToPng(String svg) {
if (svg == null || svg.isBlank()) {
/**
* Преобразует строку с SVG-кодом в массив байт PNG-изображения.
*
* @param svgCode Строка, содержащая валидный SVG.
* @return Массив байт PNG или null в случае ошибки.
*/
public static byte[] convert(String svgCode) {
if (svgCode == null || svgCode.isBlank()) {
return null;
}
try {
Class<?> pngTranscoderClass = Class.forName("org.apache.batik.transcoder.image.PNGTranscoder");
Object transcoder = pngTranscoderClass.getDeclaredConstructor().newInstance();
// 1. Создаем транскодер для PNG
PNGTranscoder transcoder = new PNGTranscoder();
Class<?> transcoderInputClass = Class.forName("org.apache.batik.transcoder.TranscoderInput");
Class<?> transcoderOutputClass = Class.forName("org.apache.batik.transcoder.TranscoderOutput");
// 2. Устанавливаем входные данные (наш SVG-код)
InputStream inputStream = new ByteArrayInputStream(svgCode.getBytes(StandardCharsets.UTF_8));
TranscoderInput input = new TranscoderInput(inputStream);
ByteArrayInputStream in = new ByteArrayInputStream(svg.getBytes(StandardCharsets.UTF_8));
Constructor<?> inputCtor = transcoderInputClass.getConstructor(java.io.InputStream.class);
Object input = inputCtor.newInstance(in);
// 3. Устанавливаем, куда будет записан результат (в байтовый массив в памяти)
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
TranscoderOutput output = new TranscoderOutput(outputStream);
ByteArrayOutputStream out = new ByteArrayOutputStream();
Constructor<?> outputCtor = transcoderOutputClass.getConstructor(java.io.OutputStream.class);
Object output = outputCtor.newInstance(out);
// 4. Запускаем процесс конвертации
transcoder.transcode(input, output);
Method transcode = pngTranscoderClass.getMethod("transcode", transcoderInputClass, transcoderOutputClass);
transcode.invoke(transcoder, input, output);
// 5. Получаем результат
outputStream.flush();
return outputStream.toByteArray();
out.flush();
return out.toByteArray();
} catch (ClassNotFoundException e) {
return null;
} catch (Exception e) {
System.err.println("Ошибка при конвертации SVG в PNG: " + e.getMessage());
e.printStackTrace(); // Очень полезно для отладки
return null;
}
}
}
}