因此,正如标题所说,我正在寻找一种使用 Apache Batik 将 SVG 转换为 PNG 的方法,然后使用 PDFBox 将此图像附加到 PDF 文件,而无需在任何地方实际创建 svg 和 png。
目前我有一个 Web 表单,其中包含带有可选部分的 SVG 图像。提交表单时,我采用 svg 的“html”部分,这意味着我将类似<svg bla bla> <path bla bla/></svg>字符串的内容保留在 Spring 中,然后 Spring 会使用该字符串在给定文件夹中创建“.svg”文件,然后 Batik 在同一文件夹中创建一个 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 文件的情况下在运行时执行此操作?
RISEBY
有只小跳蛙
相关分类