【问题标题】:Generating a pdf using itext and displaying it on the browser使用 itext 生成 pdf 并在浏览器上显示
【发布时间】:2014-05-14 09:09:57
【问题描述】:

我已经成功地在 jsp 中编写了一个代码来使用 itext 生成一个 pdf 文件。它工作正常,但不是立即生成 pdf,而是部分生成。只有当我切换到另一个选项卡或窗口并切换回原来的选项卡或窗口时,它才能正确显示整个内容。

解决方案是在服务器中创建一个 pdf 文件,在浏览器窗口中打开它,并在打开后立即将其从服务器内存中删除。任何人都可以帮助我吗?

[这是该程序的精简近似值。]

    <%@ page trimDirectiveWhitespaces="true" %> 
<%@
page import="java.servlet.*,
javax.servlet.http.*,
java.io.*,
java.util.*,
com.lowagie.text.pdf.*,
com.lowagie.text.*"
%>

<%@ include file="connection.jsp" %>
<%
response.setContentType("application/pdf");
Document document = new Document();
try
{
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    PdfWriter.getInstance(document, buffer); 
    document.open();
    PdfPTable table = new PdfPTable(1);
    table.addCell("1");
    table.addCell("2");
    table.addCell("3");
    table.addCell("4");
    table.addCell("5");
    table.addCell("6");
        document.add(table);        
    document.close(); 

    DataOutputStream dataOutput = new DataOutputStream(response.getOutputStream());
    byte[] bytes = buffer.toByteArray();
    response.setContentLength(bytes.length);
    for(int i = 0; i < bytes.length; i++)
        dataOutput.writeByte(bytes[i]);

    dataOutput.flush();
    dataOutput.close();
    return;
}

catch(DocumentException e)
{
    e.printStackTrace();
}

%>

【问题讨论】:

  • 在 jsp 中使用 iText 的任何理由都被认为是不好的约定。而是使用 servlet
  • 我同意 @sankrish...尝试使用 servlet 并告诉我们...

标签: jsp pdf itext


【解决方案1】:

如果您复制了实际代码,则您创建的 PDF 文件从一开始就已损坏。您正在引入空格和换行符,例如这里:

%>

<%@ include file="connection.jsp" %>

这需要改成:

%><%@ include file="connection.jsp" %>

当您在 PDF 中引入不属于该处的字节时。

此外,令我惊讶的是,您的代码实际上可以工作,因为在您引入空格或换行的那一刻,response.getOutputStream() 方法被隐式触发。

当您显式获取输出流时,我希望java.lang.IllegalStateException 会说“getOutputStream() 已被调用以获取此响应”。

总而言之:使用 JSP 创建二进制文件是个坏主意。您应该使用 servlet。您描述的行为是损坏的 PDF 的典型行为。我认为由于您使用 JSP 的方式,您的 PDF 已损坏。

【讨论】:

    猜你喜欢
    • 2014-08-03
    • 2012-05-14
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多