Так как в заголовке написано, что я ищу способ превратить SVG в PNG с помощью Apache Batik, а затем прикрепить это изображение к PDF-файлу с помощью PDFBox, фактически не создавая svg и png где-либо.
В настоящее время у меня естьвеб-форма с изображением SVG с возможностью ее выбора.Когда форма отправлена, я беру "html" часть svg, что означает, что я сохраняю что-то вроде <svg bla bla> <path bla bla/></svg>
в строке, которую Spring затем использует для создания файла ".svg" в данной папке, затем Батик создает файл PNG вта же папка, а затем PDFBox присоединяет ее к PDF - это прекрасно работает (код ниже).
//Get the svg data from the Form and Create the svg file
String svg = formData.getSvg();
File svgFile = new File("image.svg");
BufferedWriter writer = new BufferedWriter(new FileWriter(svgFile));
writer.write(svg);
writer.close();
// Send to Batik to turn to PNG
PNGTranscoder pngTranscode = new PNGTranscoder();
File svgFile = new File("image.svg");
InputStream in = new FileInputStream(svgFile);
TranscoderInput tIn = new TranscoderInput(in);
OutputStream os = new FileOutputStream("image.png");
TranscoderOutput tOut = new TranscoderOutput(os)
pngTranscode .transcode(tIn , tOut);
os.flush();
os.close();
//Send to PDFBox to attach to pdf
File pngfile = new File("image.png");
String path = pngfile.getAbsolutePath();
PDImageXObject pdImage = PDImageXObject.createFromFile(path, pdf);
PDPageContentStream contents = new PDPageContentStream(pdf, pdf.getPage(1));
contents.drawImage(pdImage, 0, pdf.getPage(1).getMediaBox().getHeight() - pdImage.getHeight());
contents.close();
Как вы можете видеть, есть много файлов и прочего (нужно немного привести в порядок), но возможно ли это сделать на ходу без создания и постоянной загрузки файлов svg и png?