在 JAVA 中通过 SSL 生成嵌入图像的 Word 文档
这是一些代码片段,可让您了解我到目前为止所得到的内容。这样我就可以很好地输出Word文档了。我还可以通过浏览器中的 URL 访问图像,但 Word 文档 src 似乎没有访问 servlet(根据我拥有的一些日志)。
导出Servlet.java `
response.setContentType("application/ms-word");
String imageUrl = request.getScheme() + "://" + request.getServerName() +
":" + request.getServerPort() + request.getContextPath() +
"/ExportImage";
PrintWriter out = response.getWriter();
out.println("<html xmlns:o='urn:schemas-microsoft-com:office:office'
xmlns:w='urn:schemas-microsoft-com:office:word'
xmlns:v='urn:schemas-microsoft-com:vml'
xmlns='http://www.w3.org/TR/REC-html40'>
<head>
<title>Exported Documents</title>
<!--[if gte mso 9]>
<xml>
<w:WordDocument>
<w:View>Print</w:View>
<w:Zoom>100</w:Zoom>
<w:DoNotOptimizeForBrowser/>
<w:BreakWrappedTables/>
</w:WordDocument>
</xml>
<![endif]-->
</head>
<body>
<img src=\"" + imageUrl + "\">
</body>
</html>")
out.flush();
`
导出图像.java
Logger.log("getting Image");
ServletContext servletContext = getServletContext();
String filename = servletContext.getRealPath("myImage.gif");
response.setContentType(
servletContext.getMimeType(filename));
File file = new File(filename);
response.setContentLength((int)file.length());
FileInputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
// Copy the contents of the file to the output stream
byte[] buf = new byte[1024];
int count = 0;
while ((count = in.read(buf)) >= 0) {
out.write(buf, 0, count);
}
in.close();
out.flush();
out.close();
Here is some code snippet to give you an idea of what I got so far. I can output the Word document fine this way. I can also access the image via the URL in the browser, but the Word documents src does not appear to be hitting the servlet(according to some logs I have).
ExportServlet.java
`
response.setContentType("application/ms-word");
String imageUrl = request.getScheme() + "://" + request.getServerName() +
":" + request.getServerPort() + request.getContextPath() +
"/ExportImage";
PrintWriter out = response.getWriter();
out.println("<html xmlns:o='urn:schemas-microsoft-com:office:office'
xmlns:w='urn:schemas-microsoft-com:office:word'
xmlns:v='urn:schemas-microsoft-com:vml'
xmlns='http://www.w3.org/TR/REC-html40'>
<head>
<title>Exported Documents</title>
<!--[if gte mso 9]>
<xml>
<w:WordDocument>
<w:View>Print</w:View>
<w:Zoom>100</w:Zoom>
<w:DoNotOptimizeForBrowser/>
<w:BreakWrappedTables/>
</w:WordDocument>
</xml>
<![endif]-->
</head>
<body>
<img src=\"" + imageUrl + "\">
</body>
</html>")
out.flush();
`
ExportImage.java
Logger.log("getting Image");
ServletContext servletContext = getServletContext();
String filename = servletContext.getRealPath("myImage.gif");
response.setContentType(
servletContext.getMimeType(filename));
File file = new File(filename);
response.setContentLength((int)file.length());
FileInputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
// Copy the contents of the file to the output stream
byte[] buf = new byte[1024];
int count = 0;
while ((count = in.read(buf)) >= 0) {
out.write(buf, 0, count);
}
in.close();
out.flush();
out.close();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
另一种合适的方法是否是完全在服务器上生成文档(已经嵌入图像)并将其流式传输给请求者,而不是尝试让文档进行单独的 https 获取?如果是这样,Docmosis 和 JODReports 可以为您生成带有图像的 doc 格式的文档。
Would another suitable approach be to generate the document completely on the server (with the image embedded already) and stream that to the requestor instead of trying to get the doc to do a separate https fetch? If so, Docmosis and JODReports can produce documents for you in doc format with images.