如何使用Servlet将PDF文件数据作为响应发送?

时间:2013-06-07 06:02:57

标签: java ios java-ee servlets

我的要求是使用HTTP Servlet将PDF数据响应到移动客户端(iPhone)。

我是按照以下方式做的,但我没有在客户端获得预期的输出。

    PrintWriter out = response.getWriter();

    String aInputFileName = "/Users/hcl/Desktop/Easwar/sample.pdf";
        log("Reading in binary file named : " + aInputFileName);
        File file = new File(aInputFileName);
        log("File size: " + file.length());
        byte[] result = new byte[(int)file.length()];
        System.out.println("Length : "+  result.length);
        try {
          InputStream input = null;
          try {
            int totalBytesRead = 0;
            input = new BufferedInputStream(new FileInputStream(file));
            while(totalBytesRead < result.length){
              int bytesRemaining = result.length - totalBytesRead;
              //input.read() returns -1, 0, or more :
              int bytesRead = input.read(result, totalBytesRead, bytesRemaining); 
              if (bytesRead > 0){
                totalBytesRead = totalBytesRead + bytesRead;
              }
            }
        response.setHeader("Content-Type", "application/pdf");

        out.println(result);

我遵循的方法是正确的吗?请指教。

感谢。

2 个答案:

答案 0 :(得分:5)

package com.javatpoint;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.darwinsys.spdf.PDF;
import com.darwinsys.spdf.Page;
import com.darwinsys.spdf.Text;
import com.darwinsys.spdf.MoveTo;

public class ServletPDF extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException {

PrintWriter out = response.getWriter();
response.setContentType("application/pdf");

response.setHeader("Content-disposition","inline; filename='javatpoint.pdf'");

PDF p = new PDF(out);
Page p1 = new Page(p);
p1.add(new MoveTo(p, 200, 700));
p1.add(new Text(p, "www.javatpoint.com"));
p1.add(new Text(p, "by Sonoo Jaiswal"));

p.add(p1);
p.setAuthor("Ian F. Darwin");

p.writePDF();
}
}

答案 1 :(得分:4)

您必须使用ServletOutputStream及其write()方法将字节写入响应。