- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
找了很多都没有解决这个问题。我正在用 iText 生成 PDF 文件。如果我使用 FileOutputStream,一切都很好,但是当我尝试使用 ServletOutputStream 时,图像不会出现在 PDF 文件中。
当我用文本编辑器打开 PDF 文件时,我看到那里有“???”非常。这意味着某些东西正在削减字节。这就像尝试在 JSP 中使用二进制文件。但我使用的是 JSF、Tomcat 6.0、Spring 3.0 和 Richfaces。
这是使用 ServletOutputStream 生成 PDF 并导致问题的代码
public static void saveChartToPDF(JFreeChart chart, String fileName, HttpServletResponse response) throws Exception {ByteArrayOutputStream baos = new ByteArrayOutputStream();Document document = new Document();document.addCreationDate();document.setPageSize(PageSize.A4.rotate());PdfWriter writer = PdfWriter.getInstance(document, baos); document.open(); PdfContentByte cb = writer.getDirectContent(); PdfTemplate tp = cb.createTemplate(300, 300); Graphics2D g2 = tp.createGraphics(300, 300, new DefaultFontMapper()); Rectangle2D r2D = new Rectangle2D.Double(0, 0, 300, 300); chart.draw(g2, r2D, null); g2.dispose(); cb.addTemplate(tp, 0, 0); document.close(); response.setContentType("application/pdf");response.setHeader("Expires", "0");response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");response.setHeader("Pragma", "public");response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".pdf");response.setContentLength(baos.size());ServletOutputStream out = response.getOutputStream();baos.writeTo(out);out.flush();
下面是与 FileOutputStream() 配合使用的代码
public static void saveChartToPDF(JFreeChart chart, String fileName, HttpServletResponse response) throws Exception {Document document = new Document();document.addCreationDate();document.setPageSize(PageSize.A4.rotate());PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("c:/test1.pdf")); document.open(); PdfContentByte cb = writer.getDirectContent(); PdfTemplate tp = cb.createTemplate(300, 300); Graphics2D g2 = tp.createGraphics(300, 300, new DefaultFontMapper()); Rectangle2D r2D = new Rectangle2D.Double(0, 0, 300, 300); chart.draw(g2, r2D, null); g2.dispose(); cb.addTemplate(tp, 0, 0); document.close();
我找不到为什么字节被剃光。
非常感谢您的帮助,
最佳答案
当在 JSF 中完全掌握响应时,您需要确保调用
response.reset();
在设置 header 之前,很少有可能已经在响应中设置/写入了某些内容(通常是通过某种自定义 Filter
)。
您还需要确保调用
out.close();
而不是 out.flush()
以防止之后将任何其他字节写入响应主体。
最后,在 JSF 中你需要调用
FacesContext.getCurrentInstance().responseComplete();
防止 JSF 将请求/响应转发到 View (呈现响应)。
关于ServletOutputStream 的 PDF 文件中的图像问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4513634/
我正在尝试将一个大的 XML 文件(超过 1.5M)写入 ServletOutputStream,这需要很长时间,接近 7 分钟左右甚至更长。 我正在做的事情如下 - 1. SOAPMessage s
我有一个要求,从 Web 服务(例如:List)获取多个图像,并且必须将这些图像写入 ServletOutputStream。 当我单击“VIEW”链接时,它会调用 servlet,而该 servle
我想压缩动态创建的内容并直接写入ServletOutputStream,而不是在压缩前将其另存为服务器上的文件。 例如,我创建了一个 Excel 工作簿和一个包含带有 SQL 模板的字符串的 Stri
找了很多都没有解决这个问题。我正在用 iText 生成 PDF 文件。如果我使用 FileOutputStream,一切都很好,但是当我尝试使用 ServletOutputStream 时,图像不会出
我遇到了一个无法一致重现的问题。我读取一个文件并将该文件的内容写入 ServletOutputStream。 byte[] buff = new byt
对于内容类型“text/plain”,如果我必须发送大量数据,以下哪个更有效。 ServletOutputStream sos = response.getOutputStream(); sos.wr
这是我在刷新 ServletOutputStream 时遇到的异常。它不会出现在每个请求上,所以我无法重现它。 java.lang.NullPointerException at org.ap
我想知道在创建将内容写入 ServletOutputStream 的 byte[] 时是否有特定规则或最佳实践? byte[] buffer = new byte[1024]; int r
我正在使用 Java 中的一些现有代码开发 Web 服务。 Web 服务使用 ServletResponse 接口(interface)来生成响应。当前代码首先创建 ServletResponse 对
我正在尝试读取 FreemarkerView 渲染的结果: View view = viewResolver.resolveViewName(viewName, locale); view.rende
在执行这段代码时, ServletOutputStream out = response.getOutputStream(); out.write(bytes, 0, bytes.length); o
ServletOutputStream output = response.getOutputStream(); output.write(byte[]); 将 File 写入 javax.servl
我们在服务器端尝试了以下方法, 将 2.5 MB 的文件内容从 MS-Amazon 服务器写入 Java 客户端代码、Android 客户端代码和 IOS 客户端代码大约需要 55 秒 服务器示例代码
我有一个 HttpServlet,我正在尝试为其编写测试并模拟了 ServletOutputStream:ServletOutputStream outputStream = mock(Servlet
我知道之前许多问题的重点是关闭或不关闭 ServletOutputStream,如下所示:Should I close the servlet outputstream?或此处:Should one
据我所知,这属于“你不能那样做”的范畴。我即将重新考虑我的解决方案并解决它,但我认为在这里提问至少值得一试。 我的 JSP/Spring/Struts Servlet 生成报告,将它们写入 PDF,并
我希望这个问题符合 Stack Overflow 问题指南的“软件算法”。 :) 我有一个 Java Web 应用程序,作为服务 Servlet 请求的一部分,它会生成日志记录事件,这些事件会调用持久
我有一个疑问。我有一个项目之前运行成功。但突然间我遇到了下面给出的一个问题 java.lang.InternalError: java.io.IOException: Stream closed at
我正在编写一个动态生成 GIF 文件的端点。我会从头开始。 我有一个名为 Function 的类(class)它像一个抽象类一样工作,我有几个类,在这个例子中 AddFunction ,代表一小块功能
我们有一些生产代码可以有效地执行此代码的操作: http://java.sun.com/products/java-media/2D/reference/faqs/index.html#Q_Can_I
我是一名优秀的程序员,十分优秀!