将字节数组转换为PDF并在JSP页面中显示

时间:2013-09-25 07:47:39

标签: java html jsp

我正在做一个JSP站点,我需要显示PDF文件。 我有webservice的PDF文件的字节数组,我需要在HTML中将该字节数组显示为PDF文件。我的问题是如何将该字节数组转换为PDF并在新选项卡中显示该PDF。

3 个答案:

答案 0 :(得分:3)

使用输出流将这些字节保存在磁盘上。

FileOutputStream fos = new FileOutputStream(new File(latest.pdf));

//create an object of BufferedOutputStream
bos = new BufferedOutputStream(fos);

byte[] pdfContent = //your bytes[]

bos.write(pdfContent);

然后将其链接发送到客户端以从那里打开。 比如http://myexamply.com/files/latest.pdf

答案 1 :(得分:3)

更好的是为此使用servlet,因为你不想提供一些html,但是你想要传输一个字节[]:

public class PdfStreamingServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(final HttpServletRequest request,
        final HttpServletResponse response) throws ServletException,
        IOException {
        processRequest(request, response);
    }

    public void processRequest(final HttpServletRequest request,
        final HttpServletResponse response) throws ServletException,
        IOException {

        // fetch pdf
        byte[] pdf = new byte[] {}; // Load PDF byte[] into here
        if (pdf != null) {
            String contentType = "application/pdf";
            byte[] ba1 = new byte[1024];
            String fileName = "pdffile.pdf";
            // set pdf content
            response.setContentType("application/pdf");
            // if you want to download instead of opening inline
            // response.addHeader("Content-Disposition", "attachment; filename=" + fileName);
            // write the content to the output stream
            BufferedOutputStream fos1 = new BufferedOutputStream(
                response.getOutputStream());
            fos1.write(ba1);
            fos1.flush();
            fos1.close();
        }
    }
}

答案 2 :(得分:1)

可悲的是,您没有告诉我们您使用的技术。

使用Spring MVC,使用@ResponseBody作为控制器方法的注释,并简单地返回字节:

@ResponseBody
@RequestMapping(value = "/pdf/shopping-list.pdf", produces = "application/pdf", method=RequestMethod.POST)
public byte[] downloadShoppingListPdf() {
    return new byte[0];
}

在新标签页中打开是一个无关紧要的事情,必须在HTML中处理。