【问题标题】:iText - generating files on the fly without needing a PDF fileiText - 即时生成文件,无需 PDF 文件
【发布时间】:2012-02-13 21:17:54
【问题描述】:

我正在尝试使用 iText 生成 pdf 文件,但我对生成有疑问。我想将 PDF 提供给浏览器,以便浏览器显示它,而无需实际创建文件。

实现这一目标的最佳方法是什么?

一个限制是我需要从 JSP 页面中使用它——我正在寻找可以规避“getOutputStream 已被调用一次”错误的东西。

【问题讨论】:

    标签: java jsp itext


    【解决方案1】:

    我想将 PDF 提供给浏览器,以便浏览器显示它,而无需实际创建文件。

    只需将responsegetOutputStream() 而非new FileOutputStream 传递给PdfWriter

    PdfWriter pdfWriter = PdfWriter.getInstance(document, response.getOutputStream());
    // ...
    

    一个限制是我需要从 JSP 页面中使用它 - 我正在寻找可以绕过“getOutputStream 已被调用一次”错误的东西。

    只需删除 JSP 中 <% %> 之外的 any 空格,包括换行符。它们由响应编写器隐式发送到响应。

    即不要

    <% page import="foo" %>
    <% page import="bar" %>
    
    <%
       for (int i = 0; i < 1000; i++) {
           out.println("I should not use scriptlets.");
       }
    %>
    
    (newline here)
    

    但更是如此

    <% page import="foo" %><% page import="bar" %><%
       for (int i = 0; i < 1000; i++) {
           out.println("I should use servlets.");
       }
    %>
    

    或者更好的是,不要将 Java 代码放在 JSP 文件中。 JSP 文件旨在呈现 HTML 之类的模板文本,而不是做完全不同的事情。在像 servlet 这样的普通 Java 类中执行此操作。

    【讨论】:

    • BalusC - 非常感谢您为回答我的问题所做的努力。我真的很感激。
    【解决方案2】:

    将其写入servlet输出流,记得将编码设置为正确的值

    【讨论】:

    • 这是我要运行的代码:===================== Document document = new Document(); // 步骤 2 PdfWriter.getInstance(document, response.getOutputStream()); // 第三步 document.open(); // 第 4 步 document.add(new Paragraph("Hello World")); ==================================================== ============ itext getOutputStream() 已为此响应调用
    • 我有一些代码可以做到这一点,但我要到早上才能发布 t - 那就这样吧
    • 没有忘记这件事——我还在努力寻找相关代码
    • 谢谢先生。我已经在 servlet 中完成了此操作,但要求是在 JSP 页面中执行此操作 - 我只是在寻找方法来规避已调用 getOutputStream 以进行响应的问题。
    • BalusC 已经给你上面的答案了,所以我要做的就是重复他所说的话。让我们知道它对您的效果
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 2011-11-17
      • 2022-07-29
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多