我有一个由JS libraray D3生成的SVG图形,应保存在客户端计算机上。我想提供不同的格式,虽然我发现了用于下载SVG和PNG的纯JS解决方案,但我仍然坚持提供PDF。据我所知,没有纯粹的客户端解决方案支持所有SVG元素(我试过jsPDF),虽然我想知道为什么没有更简单的解决方案。 无论如何,这就是为什么我想使用一个使用java batik库的servlet(与本主题相同:Convert SVG to PDF)
现在我想拿出我的SVG元素,将其转换为字符串,然后创建一个ajax get请求:
var svg = $("#chart").get(0);
var serializer = new XMLSerializer();
var sXML = serializer.serializeToString(svg);
$.get("http://localhost:8080/Webmap/Conversion",
{svg: svg},
function (){
//how do i handle the response object?
});
在我的servlet中,我想获取字符串,转换内容并将其检索到客户端,以便可以下载:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String svgString = req.getParameter("svg");
StringReader svg = new StringReader(svgString);
File pdf = new File("/tmp/chart.pdf");
Transcoder transcoder = new PDFTranscoder();
TranscoderInput transcoderInput = new TranscoderInput(svg);
TranscoderOutput transcoderOutput = new TranscoderOutput(new FileOutputStream(pdf));
transcoder.transcode(transcoderInput, transcoderOutput);
resp.setContentType("application/pdf");
resp.setHeader("Content-Disposition", "attachment; filename=/tmp /chart.pdf");
//...how do i have to wrap the generated pdf file into the resp object?
}
很抱歉,如果这看起来像一个简单的问题,但我现在基本上不理解的是如何将pdf附加到响应中,如何在浏览器中下载它?